)]}'
{"etc/oslo-config-generator/neutron.conf":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4d0820a7bee2baeec368aa12a1989b29765f290","unresolved":false,"context_lines":[{"line_number":7,"context_line":"namespace \u003d neutron.db"},{"line_number":8,"context_line":"namespace \u003d neutron.extensions"},{"line_number":9,"context_line":"namespace \u003d nova.auth"},{"line_number":10,"context_line":"namespace \u003d ironic.auth"},{"line_number":11,"context_line":"namespace \u003d oslo.log"},{"line_number":12,"context_line":"namespace \u003d oslo.db"},{"line_number":13,"context_line":"namespace \u003d oslo.policy"}],"source_content_type":"text/plain","patch_set":1,"id":"dfbec78f_ffc96cab","line":10,"range":{"start_line":10,"start_character":12,"end_line":10,"end_character":23},"updated":"2019-05-13 13:10:54.000000000","message":"If ironic is not loaded, then the following warning will be thrown:\n\nWARNING:stevedore.named:Could not load ironic.auth\n\nI\u0027m not an expert on this and I would like to have additional feedback on this, but I think you should create a new file for ironic and load this namespace only if ironic is loaded.\n\nAs I said, I would like someone else to comment on this.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a8e86d9d16f94f7ea49aa0a96eeddc3af4f137ec","unresolved":false,"context_lines":[{"line_number":7,"context_line":"namespace \u003d neutron.db"},{"line_number":8,"context_line":"namespace \u003d neutron.extensions"},{"line_number":9,"context_line":"namespace \u003d nova.auth"},{"line_number":10,"context_line":"namespace \u003d ironic.auth"},{"line_number":11,"context_line":"namespace \u003d oslo.log"},{"line_number":12,"context_line":"namespace \u003d oslo.db"},{"line_number":13,"context_line":"namespace \u003d oslo.policy"}],"source_content_type":"text/plain","patch_set":1,"id":"bfb3d3c7_332d6195","line":10,"range":{"start_line":10,"start_character":12,"end_line":10,"end_character":23},"in_reply_to":"bfb3d3c7_e00db190","updated":"2019-05-21 08:28:22.000000000","message":"You are right. Thanks!","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0482ca12bedb1e457bfe3628b40f4da44478bae4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"namespace \u003d neutron.db"},{"line_number":8,"context_line":"namespace \u003d neutron.extensions"},{"line_number":9,"context_line":"namespace \u003d nova.auth"},{"line_number":10,"context_line":"namespace \u003d ironic.auth"},{"line_number":11,"context_line":"namespace \u003d oslo.log"},{"line_number":12,"context_line":"namespace \u003d oslo.db"},{"line_number":13,"context_line":"namespace \u003d oslo.policy"}],"source_content_type":"text/plain","patch_set":1,"id":"bfb3d3c7_e00db190","line":10,"range":{"start_line":10,"start_character":12,"end_line":10,"end_character":23},"in_reply_to":"dfbec78f_28c9faaa","updated":"2019-05-21 08:12:26.000000000","message":"But this isn\u0027t loaded from ironic. It is entry point defined in https://review.opendev.org/#/c/658787/4/setup.cfg so it\u0027s in fact neutron.opts:list_ironic_auth_opts","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1adb25c6ee34d49c032676f4dbc1cb541772e036","unresolved":false,"context_lines":[{"line_number":7,"context_line":"namespace \u003d neutron.db"},{"line_number":8,"context_line":"namespace \u003d neutron.extensions"},{"line_number":9,"context_line":"namespace \u003d nova.auth"},{"line_number":10,"context_line":"namespace \u003d ironic.auth"},{"line_number":11,"context_line":"namespace \u003d oslo.log"},{"line_number":12,"context_line":"namespace \u003d oslo.db"},{"line_number":13,"context_line":"namespace \u003d oslo.policy"}],"source_content_type":"text/plain","patch_set":1,"id":"dfbec78f_28c9faaa","line":10,"range":{"start_line":10,"start_character":12,"end_line":10,"end_character":23},"in_reply_to":"dfbec78f_c4bcd407","updated":"2019-05-14 08:05:23.000000000","message":"Because ironic is not always part of an OpenStack installation, thus this warning message will be thrown most of the times.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2b3ebd96d1791c2afb503b4c5f19787e18934def","unresolved":false,"context_lines":[{"line_number":7,"context_line":"namespace \u003d neutron.db"},{"line_number":8,"context_line":"namespace \u003d neutron.extensions"},{"line_number":9,"context_line":"namespace \u003d nova.auth"},{"line_number":10,"context_line":"namespace \u003d ironic.auth"},{"line_number":11,"context_line":"namespace \u003d oslo.log"},{"line_number":12,"context_line":"namespace \u003d oslo.db"},{"line_number":13,"context_line":"namespace \u003d oslo.policy"}],"source_content_type":"text/plain","patch_set":1,"id":"dfbec78f_c4bcd407","line":10,"range":{"start_line":10,"start_character":12,"end_line":10,"end_character":23},"in_reply_to":"dfbec78f_ffc96cab","updated":"2019-05-13 18:49:44.000000000","message":"hm, not sure I understand, why would\u0027nt ironic be loaded when generating sample configuration?","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"}],"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4d0820a7bee2baeec368aa12a1989b29765f290","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                self.nova_notifier.record_port_status_changed)"},{"line_number":174,"context_line":"        if cfg.CONF.ironic.enable_notifications:"},{"line_number":175,"context_line":"            # Import ironic notifier conditionally"},{"line_number":176,"context_line":"            from neutron.notifiers import ironic"},{"line_number":177,"context_line":"            self.ironic_notifier \u003d ironic.Notifier.get_instance()"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @registry.receives(resources.RBAC_POLICY, [events.BEFORE_CREATE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_9f687087","line":176,"range":{"start_line":176,"start_character":12,"end_line":176,"end_character":48},"updated":"2019-05-13 13:10:54.000000000","message":"This should be in the import section.\n\nBTW, because neutronclient is now mandatory in neutron (added to requirements), there is no need to make this import conditional.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2b3ebd96d1791c2afb503b4c5f19787e18934def","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                self.nova_notifier.record_port_status_changed)"},{"line_number":174,"context_line":"        if cfg.CONF.ironic.enable_notifications:"},{"line_number":175,"context_line":"            # Import ironic notifier conditionally"},{"line_number":176,"context_line":"            from neutron.notifiers import ironic"},{"line_number":177,"context_line":"            self.ironic_notifier \u003d ironic.Notifier.get_instance()"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @registry.receives(resources.RBAC_POLICY, [events.BEFORE_CREATE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_e9f77158","line":176,"range":{"start_line":176,"start_character":12,"end_line":176,"end_character":48},"in_reply_to":"dfbec78f_9f687087","updated":"2019-05-13 18:49:44.000000000","message":"This is following the same pattern that is used for nova on L160-L162, novaclient is also in requirements. Why load the ironic notifier if ironic is not used?","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1adb25c6ee34d49c032676f4dbc1cb541772e036","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                self.nova_notifier.record_port_status_changed)"},{"line_number":174,"context_line":"        if cfg.CONF.ironic.enable_notifications:"},{"line_number":175,"context_line":"            # Import ironic notifier conditionally"},{"line_number":176,"context_line":"            from neutron.notifiers import ironic"},{"line_number":177,"context_line":"            self.ironic_notifier \u003d ironic.Notifier.get_instance()"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @registry.receives(resources.RBAC_POLICY, [events.BEFORE_CREATE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_c8b93e15","line":176,"range":{"start_line":176,"start_character":12,"end_line":176,"end_character":48},"in_reply_to":"dfbec78f_e9f77158","updated":"2019-05-14 08:05:23.000000000","message":"Well, you are following a previous implementation. That\u0027s ok although there is not need.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"}],"neutron/notifiers/ironic.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4d0820a7bee2baeec368aa12a1989b29765f290","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def __init__(self):"},{"line_number":49,"context_line":"        self.batch_notifier \u003d batch_notifier.BatchNotifier("},{"line_number":50,"context_line":"            cfg.CONF.send_events_interval, self.send_events)"},{"line_number":51,"context_line":"        registry.subscribe(self.process_port_update_event,"},{"line_number":52,"context_line":"                           resources.PORT, events.AFTER_UPDATE)"},{"line_number":53,"context_line":"        registry.subscribe(self.process_port_delete_event,"},{"line_number":54,"context_line":"                           resources.PORT, events.AFTER_DELETE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_5f5438ff","line":51,"updated":"2019-05-13 13:10:54.000000000","message":"Neutron now uses registry decorator. Please, take a look at https://review.opendev.org/#/c/439738/","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2b3ebd96d1791c2afb503b4c5f19787e18934def","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def __init__(self):"},{"line_number":49,"context_line":"        self.batch_notifier \u003d batch_notifier.BatchNotifier("},{"line_number":50,"context_line":"            cfg.CONF.send_events_interval, self.send_events)"},{"line_number":51,"context_line":"        registry.subscribe(self.process_port_update_event,"},{"line_number":52,"context_line":"                           resources.PORT, events.AFTER_UPDATE)"},{"line_number":53,"context_line":"        registry.subscribe(self.process_port_delete_event,"},{"line_number":54,"context_line":"                           resources.PORT, events.AFTER_DELETE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_a990994b","line":51,"in_reply_to":"dfbec78f_5f5438ff","updated":"2019-05-13 18:49:44.000000000","message":"Done","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4d0820a7bee2baeec368aa12a1989b29765f290","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.irclient \u003d self._get_ironic_client()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_session(self, group):"},{"line_number":58,"context_line":"        ks_loading.register_session_conf_options(cfg.CONF, group)"},{"line_number":59,"context_line":"        ks_loading.register_auth_conf_options(cfg.CONF, group)"},{"line_number":60,"context_line":"        auth \u003d ks_loading.load_auth_from_conf_options(cfg.CONF, group)"},{"line_number":61,"context_line":"        session \u003d ks_loading.load_session_from_conf_options("},{"line_number":62,"context_line":"            cfg.CONF, group, auth\u003dauth)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_1fbb2072","line":59,"range":{"start_line":58,"start_character":7,"end_line":59,"end_character":62},"updated":"2019-05-13 13:10:54.000000000","message":"These sections are registered once the server is loaded, in [1]. You don\u0027t need to do this again. \n\n[1] https://review.opendev.org/#/c/658787/1/neutron/common/config.py","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2b3ebd96d1791c2afb503b4c5f19787e18934def","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.irclient \u003d self._get_ironic_client()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_session(self, group):"},{"line_number":58,"context_line":"        ks_loading.register_session_conf_options(cfg.CONF, group)"},{"line_number":59,"context_line":"        ks_loading.register_auth_conf_options(cfg.CONF, group)"},{"line_number":60,"context_line":"        auth \u003d ks_loading.load_auth_from_conf_options(cfg.CONF, group)"},{"line_number":61,"context_line":"        session \u003d ks_loading.load_session_from_conf_options("},{"line_number":62,"context_line":"            cfg.CONF, group, auth\u003dauth)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_e998d175","line":59,"range":{"start_line":58,"start_character":7,"end_line":59,"end_character":62},"in_reply_to":"dfbec78f_1fbb2072","updated":"2019-05-13 18:49:44.000000000","message":"Done","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4d0820a7bee2baeec368aa12a1989b29765f290","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            port_event \u003d \u0027unbind_port\u0027"},{"line_number":112,"context_line":"        elif (original_port_status \u003d\u003d n_const.PORT_STATUS_DOWN and"},{"line_number":113,"context_line":"                current_port_status in [n_const.PORT_STATUS_ACTIVE,"},{"line_number":114,"context_line":"                                        n_const.PORT_STATUS_ERROR]):"},{"line_number":115,"context_line":"            port_event \u003d \u0027bind_port\u0027"},{"line_number":116,"context_line":"        LOG.debug(\u0027Queuing event for {event_type} for port {port} \u0027"},{"line_number":117,"context_line":"                  \u0027for status {status}.\u0027.format(event_type\u003dport_event,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_ff43ac6a","line":114,"range":{"start_line":114,"start_character":48,"end_line":114,"end_character":65},"updated":"2019-05-13 13:10:54.000000000","message":"Are we going to consider a binding error as \"bind_port\"?","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2b3ebd96d1791c2afb503b4c5f19787e18934def","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            port_event \u003d \u0027unbind_port\u0027"},{"line_number":112,"context_line":"        elif (original_port_status \u003d\u003d n_const.PORT_STATUS_DOWN and"},{"line_number":113,"context_line":"                current_port_status in [n_const.PORT_STATUS_ACTIVE,"},{"line_number":114,"context_line":"                                        n_const.PORT_STATUS_ERROR]):"},{"line_number":115,"context_line":"            port_event \u003d \u0027bind_port\u0027"},{"line_number":116,"context_line":"        LOG.debug(\u0027Queuing event for {event_type} for port {port} \u0027"},{"line_number":117,"context_line":"                  \u0027for status {status}.\u0027.format(event_type\u003dport_event,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_c9f06d94","line":114,"range":{"start_line":114,"start_character":48,"end_line":114,"end_character":65},"in_reply_to":"dfbec78f_ff43ac6a","updated":"2019-05-13 18:49:44.000000000","message":"Yes, the original state was DOWN and it transitioned to either ACTIVE or ERROR on \"bind_port\". We pass the `current_port_status\" in the notify_event below, on Ironic side we will check the status, if status is ERROR Ironic should handle the error, i.e provisioning the node failed when wiring up the network.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9721ce123d10ac8800217ca4abec93da9b07822f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        args[\u0027os_ironic_api_version\u0027] \u003d IRONIC_API_VERSION"},{"line_number":75,"context_line":"        args[\u0027max_retries\u0027] \u003d cfg.CONF.ironic.max_retries"},{"line_number":76,"context_line":"        args[\u0027retry_interval\u0027] \u003d cfg.CONF.ironic.retry_interval"},{"line_number":77,"context_line":"        return client.Client(1, **args)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def send_events(self, batched_events):"},{"line_number":80,"context_line":"        # NOTE(TheJulia): Friendly exception handling so operators"}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_1dbfd861","line":77,"range":{"start_line":77,"start_character":29,"end_line":77,"end_character":30},"updated":"2019-05-23 11:19:58.000000000","message":"nit: this should come from some variable/constant or should be a named argument","commit_id":"8a312dfecad986f32f0cc8c323bd9cfad4d6adc7"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"8d9ae43b2da508985f16325740f72f77f6134ac1","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        args[\u0027os_ironic_api_version\u0027] \u003d IRONIC_API_VERSION"},{"line_number":75,"context_line":"        args[\u0027max_retries\u0027] \u003d cfg.CONF.ironic.max_retries"},{"line_number":76,"context_line":"        args[\u0027retry_interval\u0027] \u003d cfg.CONF.ironic.retry_interval"},{"line_number":77,"context_line":"        return client.Client(1, **args)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def send_events(self, batched_events):"},{"line_number":80,"context_line":"        # NOTE(TheJulia): Friendly exception handling so operators"}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_db683aba","line":77,"range":{"start_line":77,"start_character":29,"end_line":77,"end_character":30},"in_reply_to":"bfb3d3c7_1dbfd861","updated":"2019-05-27 11:40:26.000000000","message":"Done","commit_id":"8a312dfecad986f32f0cc8c323bd9cfad4d6adc7"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d3e00c4a1d9c403514f55343d490d72e60177968","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        args[\u0027os_ironic_api_version\u0027] \u003d IRONIC_API_VERSION"},{"line_number":75,"context_line":"        args[\u0027max_retries\u0027] \u003d cfg.CONF.ironic.max_retries"},{"line_number":76,"context_line":"        args[\u0027retry_interval\u0027] \u003d cfg.CONF.ironic.retry_interval"},{"line_number":77,"context_line":"        return client.Client(1, **args)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def send_events(self, batched_events):"},{"line_number":80,"context_line":"        # NOTE(TheJulia): Friendly exception handling so operators"}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_1e11d65d","line":77,"range":{"start_line":77,"start_character":29,"end_line":77,"end_character":30},"in_reply_to":"bfb3d3c7_db683aba","updated":"2019-05-28 09:39:43.000000000","message":"Thanks","commit_id":"8a312dfecad986f32f0cc8c323bd9cfad4d6adc7"}],"neutron/tests/unit/notifiers/test_ironic.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4d0820a7bee2baeec368aa12a1989b29765f290","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Copyright 2017 Red Hat Inc."},{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":19,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":20,"context_line":"#    a copy of the License at"},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":23,"context_line":"#"},{"line_number":24,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":25,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":26,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":27,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":28,"context_line":"#    under the License."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import eventlet"},{"line_number":31,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_ff25ec5c","line":28,"range":{"start_line":15,"start_character":0,"end_line":28,"end_character":23},"updated":"2019-05-13 13:10:54.000000000","message":"You should use only one header. Maybe, if you need it, you can join both copyrights (OpenStack and Red Hat) y two lines at the beginning of the file.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2b3ebd96d1791c2afb503b4c5f19787e18934def","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Copyright 2017 Red Hat Inc."},{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":19,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":20,"context_line":"#    a copy of the License at"},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":23,"context_line":"#"},{"line_number":24,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":25,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":26,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":27,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":28,"context_line":"#    under the License."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import eventlet"},{"line_number":31,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_6985c1ce","line":28,"range":{"start_line":15,"start_character":0,"end_line":28,"end_character":23},"in_reply_to":"dfbec78f_ff25ec5c","updated":"2019-05-13 18:49:44.000000000","message":"oops, Done.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0482ca12bedb1e457bfe3628b40f4da44478bae4","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @mock.patch.object(ironic.LOG, \u0027error\u0027, autospec\u003dTrue)"},{"line_number":185,"context_line":"    @mock.patch.object(client, \u0027Client\u0027, autospec\u003dFalse)"},{"line_number":186,"context_line":"    def test_send_envent_method_not_found(self, mock_client, mock_log):"},{"line_number":187,"context_line":"        self.ironic_notifier.irclient \u003d mock_client"},{"line_number":188,"context_line":"        exception \u003d ironic_exc.NotFound()"},{"line_number":189,"context_line":"        mock_client.events.create.side_effect \u003d exception"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_20b8a9c6","line":186,"range":{"start_line":186,"start_character":18,"end_line":186,"end_character":24},"updated":"2019-05-21 08:12:26.000000000","message":"nit: shouldn\u0027t be \"event\"?","commit_id":"b555fba4a774a4eed1e777b143d8a4a9e34b0e98"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"30322cb5f520860bedd8674fc3ede4a529d9bf63","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @mock.patch.object(ironic.LOG, \u0027error\u0027, autospec\u003dTrue)"},{"line_number":185,"context_line":"    @mock.patch.object(client, \u0027Client\u0027, autospec\u003dFalse)"},{"line_number":186,"context_line":"    def test_send_envent_method_not_found(self, mock_client, mock_log):"},{"line_number":187,"context_line":"        self.ironic_notifier.irclient \u003d mock_client"},{"line_number":188,"context_line":"        exception \u003d ironic_exc.NotFound()"},{"line_number":189,"context_line":"        mock_client.events.create.side_effect \u003d exception"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_13fffd01","line":186,"range":{"start_line":186,"start_character":18,"end_line":186,"end_character":24},"in_reply_to":"bfb3d3c7_20b8a9c6","updated":"2019-05-21 08:27:18.000000000","message":"ineed, these are typos.\n\nDone.","commit_id":"b555fba4a774a4eed1e777b143d8a4a9e34b0e98"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0482ca12bedb1e457bfe3628b40f4da44478bae4","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @mock.patch.object(ironic.LOG, \u0027error\u0027, autospec\u003dTrue)"},{"line_number":197,"context_line":"    @mock.patch.object(client, \u0027Client\u0027, autospec\u003dFalse)"},{"line_number":198,"context_line":"    def test_send_envent_exception(self, mock_client, mock_log):"},{"line_number":199,"context_line":"        self.ironic_notifier.irclient \u003d mock_client"},{"line_number":200,"context_line":"        mock_client.events.create.side_effect \u003d Exception()"},{"line_number":201,"context_line":"        self.ironic_notifier.send_events([\u0027test\u0027, \u0027events\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_e0b131e3","line":198,"range":{"start_line":198,"start_character":18,"end_line":198,"end_character":24},"updated":"2019-05-21 08:12:26.000000000","message":"same here","commit_id":"b555fba4a774a4eed1e777b143d8a4a9e34b0e98"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"30322cb5f520860bedd8674fc3ede4a529d9bf63","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @mock.patch.object(ironic.LOG, \u0027error\u0027, autospec\u003dTrue)"},{"line_number":197,"context_line":"    @mock.patch.object(client, \u0027Client\u0027, autospec\u003dFalse)"},{"line_number":198,"context_line":"    def test_send_envent_exception(self, mock_client, mock_log):"},{"line_number":199,"context_line":"        self.ironic_notifier.irclient \u003d mock_client"},{"line_number":200,"context_line":"        mock_client.events.create.side_effect \u003d Exception()"},{"line_number":201,"context_line":"        self.ironic_notifier.send_events([\u0027test\u0027, \u0027events\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_f30d8937","line":198,"range":{"start_line":198,"start_character":18,"end_line":198,"end_character":24},"in_reply_to":"bfb3d3c7_e0b131e3","updated":"2019-05-21 08:27:18.000000000","message":"Done","commit_id":"b555fba4a774a4eed1e777b143d8a4a9e34b0e98"}],"setup.cfg":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4d0820a7bee2baeec368aa12a1989b29765f290","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    neutron.ml2.sriov.agent \u003d neutron.opts:list_sriov_agent_opts"},{"line_number":145,"context_line":"    neutron.ml2.xenapi \u003d neutron.opts:list_xenapi_opts"},{"line_number":146,"context_line":"    nova.auth \u003d neutron.opts:list_auth_opts"},{"line_number":147,"context_line":"    ironic.auth \u003d neutron.opts:list_ironic_auth_opts"},{"line_number":148,"context_line":"oslo.config.opts.defaults \u003d"},{"line_number":149,"context_line":"    neutron \u003d neutron.common.config:set_cors_middleware_defaults"},{"line_number":150,"context_line":"oslo.policy.enforcer \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"dfbec78f_9f71500f","line":147,"updated":"2019-05-13 13:10:54.000000000","message":"small nit: those options are alphabetically sorted.","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2b3ebd96d1791c2afb503b4c5f19787e18934def","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    neutron.ml2.sriov.agent \u003d neutron.opts:list_sriov_agent_opts"},{"line_number":145,"context_line":"    neutron.ml2.xenapi \u003d neutron.opts:list_xenapi_opts"},{"line_number":146,"context_line":"    nova.auth \u003d neutron.opts:list_auth_opts"},{"line_number":147,"context_line":"    ironic.auth \u003d neutron.opts:list_ironic_auth_opts"},{"line_number":148,"context_line":"oslo.config.opts.defaults \u003d"},{"line_number":149,"context_line":"    neutron \u003d neutron.common.config:set_cors_middleware_defaults"},{"line_number":150,"context_line":"oslo.policy.enforcer \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"dfbec78f_a968991c","line":147,"in_reply_to":"dfbec78f_9f71500f","updated":"2019-05-13 18:49:44.000000000","message":"Done","commit_id":"a901c2d4759b238682bfe2e6f2440e328a4551ce"}]}
