)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f4046d84104223b585c5d8bec7948d237f0101eb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     IWAMOTO Toshihiro \u003ciwamoto@valinux.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-09-05 12:50:08 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rip off of_interface option"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ic900209868acfbe3bbb56fabbbf5c4472857e412"},{"line_number":10,"context_line":"Co-Authored-By: Ihar Hrachyshka \u003cihrachys@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_bc99c57a","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":8},"updated":"2018-09-05 16:33:41.000000000","message":"Isn\u0027t it better to use a bit normal word like \"Drop\".\n\nIn addition, this change requires a release note.","commit_id":"82f394fe0126eed63edd797a2d3e78b02e79fe86"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"77a67e416ea9963a73c048b8b156da625cc2b62d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     IWAMOTO Toshihiro \u003ciwamoto@valinux.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-09-05 12:50:08 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rip off of_interface option"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ic900209868acfbe3bbb56fabbbf5c4472857e412"},{"line_number":10,"context_line":"Co-Authored-By: Ihar Hrachyshka \u003cihrachys@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_7bb741f7","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":8},"in_reply_to":"3f79a3b5_bc99c57a","updated":"2018-09-11 04:35:14.000000000","message":"The wording was chosen by Ihar, maybe he didn\u0027t like ovs-ofctl much. ;)","commit_id":"82f394fe0126eed63edd797a2d3e78b02e79fe86"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ofswitch.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9869563012c673d86539e7497f598d5915373902","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        match \u003d self._match(ofp, ofpp, match, **match_kwargs)"},{"line_number":222,"context_line":"        if isinstance(instructions, six.string_types):"},{"line_number":223,"context_line":"            # NOTE: string instructions is for backward compatibility"},{"line_number":224,"context_line":"            # debtcollector.deprecate(\"Use of string instruction is \""},{"line_number":225,"context_line":"            #     \"deprecated\", removal_version\u003d\u0027?\u0027)"},{"line_number":226,"context_line":"            jsonlist \u003d ofctl_string.ofp_instruction_from_str("},{"line_number":227,"context_line":"                ofp, instructions)"},{"line_number":228,"context_line":"            instructions \u003d ofproto_parser.ofp_instruction_from_jsondict("}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_b6d6f1c2","line":225,"range":{"start_line":224,"start_character":12,"end_line":225,"end_character":52},"updated":"2019-05-23 08:33:21.000000000","message":"Do we need this? I first thought this is a part of the comment but it is not.","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"7ef1ca4dacaec0a57e13f2e4370a52e3884e908c","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        match \u003d self._match(ofp, ofpp, match, **match_kwargs)"},{"line_number":222,"context_line":"        if isinstance(instructions, six.string_types):"},{"line_number":223,"context_line":"            # NOTE: string instructions is for backward compatibility"},{"line_number":224,"context_line":"            # debtcollector.deprecate(\"Use of string instruction is \""},{"line_number":225,"context_line":"            #     \"deprecated\", removal_version\u003d\u0027?\u0027)"},{"line_number":226,"context_line":"            jsonlist \u003d ofctl_string.ofp_instruction_from_str("},{"line_number":227,"context_line":"                ofp, instructions)"},{"line_number":228,"context_line":"            instructions \u003d ofproto_parser.ofp_instruction_from_jsondict("}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_4a6d7630","line":225,"range":{"start_line":224,"start_character":12,"end_line":225,"end_character":52},"in_reply_to":"bfb3d3c7_0af45e85","updated":"2019-05-24 05:03:28.000000000","message":"This codepath was intended to be used by this:\n\nhttps://review.opendev.org/460395\n\nI guess nobody is using this codepath. I\u0027m not sure if we should follow the proper deprecation procedure for this block.","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"257353f3ce2246c2061d5f7b2ca053591e5b456d","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        match \u003d self._match(ofp, ofpp, match, **match_kwargs)"},{"line_number":222,"context_line":"        if isinstance(instructions, six.string_types):"},{"line_number":223,"context_line":"            # NOTE: string instructions is for backward compatibility"},{"line_number":224,"context_line":"            # debtcollector.deprecate(\"Use of string instruction is \""},{"line_number":225,"context_line":"            #     \"deprecated\", removal_version\u003d\u0027?\u0027)"},{"line_number":226,"context_line":"            jsonlist \u003d ofctl_string.ofp_instruction_from_str("},{"line_number":227,"context_line":"                ofp, instructions)"},{"line_number":228,"context_line":"            instructions \u003d ofproto_parser.ofp_instruction_from_jsondict("}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_fb9bdb14","line":225,"range":{"start_line":224,"start_character":12,"end_line":225,"end_character":52},"in_reply_to":"bfb3d3c7_4a6d7630","updated":"2019-05-24 08:33:37.000000000","message":"Lets deprecate it in proper way for now and remove in U cycle","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"caf4c06debf97b0efe84036ff773f5ea5d85d7c7","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        match \u003d self._match(ofp, ofpp, match, **match_kwargs)"},{"line_number":222,"context_line":"        if isinstance(instructions, six.string_types):"},{"line_number":223,"context_line":"            # NOTE: string instructions is for backward compatibility"},{"line_number":224,"context_line":"            # debtcollector.deprecate(\"Use of string instruction is \""},{"line_number":225,"context_line":"            #     \"deprecated\", removal_version\u003d\u0027?\u0027)"},{"line_number":226,"context_line":"            jsonlist \u003d ofctl_string.ofp_instruction_from_str("},{"line_number":227,"context_line":"                ofp, instructions)"},{"line_number":228,"context_line":"            instructions \u003d ofproto_parser.ofp_instruction_from_jsondict("}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_0af45e85","line":225,"range":{"start_line":224,"start_character":12,"end_line":225,"end_character":52},"in_reply_to":"bfb3d3c7_9b142650","updated":"2019-05-24 04:51:44.000000000","message":"+1 to emit the deprecation message. As the previous comment says, we are dropping ofctl of_interface, so it looks the right chance to deprecate it.","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d59694cb7e28e259fc9df636d7f6c76c0e99776c","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        match \u003d self._match(ofp, ofpp, match, **match_kwargs)"},{"line_number":222,"context_line":"        if isinstance(instructions, six.string_types):"},{"line_number":223,"context_line":"            # NOTE: string instructions is for backward compatibility"},{"line_number":224,"context_line":"            # debtcollector.deprecate(\"Use of string instruction is \""},{"line_number":225,"context_line":"            #     \"deprecated\", removal_version\u003d\u0027?\u0027)"},{"line_number":226,"context_line":"            jsonlist \u003d ofctl_string.ofp_instruction_from_str("},{"line_number":227,"context_line":"                ofp, instructions)"},{"line_number":228,"context_line":"            instructions \u003d ofproto_parser.ofp_instruction_from_jsondict("}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_9b142650","line":225,"range":{"start_line":224,"start_character":12,"end_line":225,"end_character":52},"in_reply_to":"bfb3d3c7_b6d6f1c2","updated":"2019-05-23 21:32:09.000000000","message":"This looks like a typo to me, I think L223 can be removed and L224-225 could be un-commented. Or, alternatively the entire if block looks like it could be removed if we want to skip the deprecation warning.","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"}],"neutron/tests/common/conn_testers.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9869563012c673d86539e7497f598d5915373902","unresolved":false,"context_lines":[{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def __init__(self, ip_cidr, br_int_cls):"},{"line_number":403,"context_line":"        self.br_int_cls \u003d br_int_cls"},{"line_number":404,"context_line":"        super(OVSConnectionTester, self).__init__(ip_cidr)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def _setUp(self):"},{"line_number":407,"context_line":"        super(OVSConnectionTester, self)._setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_5693f5fa","line":404,"updated":"2019-05-23 08:33:21.000000000","message":"nit question: we usually call super() first and then do class-specific things without a specific reason. Do we need to set self.br_int_cls before super()?","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d59694cb7e28e259fc9df636d7f6c76c0e99776c","unresolved":false,"context_lines":[{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def __init__(self, ip_cidr, br_int_cls):"},{"line_number":403,"context_line":"        self.br_int_cls \u003d br_int_cls"},{"line_number":404,"context_line":"        super(OVSConnectionTester, self).__init__(ip_cidr)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def _setUp(self):"},{"line_number":407,"context_line":"        super(OVSConnectionTester, self)._setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_7e0e0033","line":404,"in_reply_to":"bfb3d3c7_5693f5fa","updated":"2019-05-23 21:32:09.000000000","message":"I don\u0027t see a need to do delay invoking super(), if you spin another patch set I would flip this.","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"257353f3ce2246c2061d5f7b2ca053591e5b456d","unresolved":false,"context_lines":[{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def __init__(self, ip_cidr, br_int_cls):"},{"line_number":403,"context_line":"        self.br_int_cls \u003d br_int_cls"},{"line_number":404,"context_line":"        super(OVSConnectionTester, self).__init__(ip_cidr)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def _setUp(self):"},{"line_number":407,"context_line":"        super(OVSConnectionTester, self)._setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_7b87ebb6","line":404,"in_reply_to":"bfb3d3c7_7e0e0033","updated":"2019-05-24 08:33:37.000000000","message":"Done","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"}],"neutron/tests/fullstack/resources/config.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                port.ExclusivePort(constants.PROTO_NAME_TCP,"},{"line_number":229,"context_line":"                                   start\u003dOVS_OF_PORT_LISTEN_START,"},{"line_number":230,"context_line":"                                   end\u003dOVS_OF_PORT_LISTEN_END)).port,"},{"line_number":231,"context_line":"            \u0027of_listen_port\u0027: self.useFixture("},{"line_number":232,"context_line":"                port.ExclusivePort(constants.PROTO_NAME_TCP)).port"},{"line_number":233,"context_line":"        })"},{"line_number":234,"context_line":"        super(OVSConfigFixture, self)._setUp()"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_b1187f81","line":232,"range":{"start_line":231,"start_character":11,"end_line":232,"end_character":66},"updated":"2019-05-06 01:40:20.000000000","message":"duplicated","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                port.ExclusivePort(constants.PROTO_NAME_TCP,"},{"line_number":229,"context_line":"                                   start\u003dOVS_OF_PORT_LISTEN_START,"},{"line_number":230,"context_line":"                                   end\u003dOVS_OF_PORT_LISTEN_END)).port,"},{"line_number":231,"context_line":"            \u0027of_listen_port\u0027: self.useFixture("},{"line_number":232,"context_line":"                port.ExclusivePort(constants.PROTO_NAME_TCP)).port"},{"line_number":233,"context_line":"        })"},{"line_number":234,"context_line":"        super(OVSConfigFixture, self)._setUp()"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_f98255c8","line":232,"range":{"start_line":231,"start_character":11,"end_line":232,"end_character":66},"in_reply_to":"dfbec78f_b1187f81","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"}],"neutron/tests/functional/agent/l2/base.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b6d34467967bbd1cbfa726a78ec9af9db1bf44af","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                              group\u003d\u0027OVS\u0027)"},{"line_number":64,"context_line":"            cfg.CONF.set_override(\u0027of_listen_port\u0027,"},{"line_number":65,"context_line":"                                  conf.OVS.of_listen_port,"},{"line_number":66,"context_line":"                                  group\u003d\u0027OVS\u0027)"},{"line_number":67,"context_line":"            main_mod.init_config()"},{"line_number":68,"context_line":"            self._main_thread \u003d eventlet.spawn(self._kick_main)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_601db40d","line":66,"updated":"2018-09-18 20:39:02.000000000","message":"nit: why overriding config options is done in loop?","commit_id":"e9ce57e2695eaa26717b5f1005b1c78f5c3428f1"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"1a102881e5411cc872a4e383695bfbc64eec0a6f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                              group\u003d\u0027OVS\u0027)"},{"line_number":64,"context_line":"            cfg.CONF.set_override(\u0027of_listen_port\u0027,"},{"line_number":65,"context_line":"                                  conf.OVS.of_listen_port,"},{"line_number":66,"context_line":"                                  group\u003d\u0027OVS\u0027)"},{"line_number":67,"context_line":"            main_mod.init_config()"},{"line_number":68,"context_line":"            self._main_thread \u003d eventlet.spawn(self._kick_main)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_af617713","line":66,"in_reply_to":"3f79a3b5_601db40d","updated":"2018-09-19 03:11:33.000000000","message":"It is to avoid port conflicts. Will add a comment.","commit_id":"e9ce57e2695eaa26717b5f1005b1c78f5c3428f1"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"df45dda5e4636fe974dd1b9540b4cfa1edcf3b99","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        retry_count \u003d 3"},{"line_number":59,"context_line":"        while True:"},{"line_number":60,"context_line":"            # Try a few different ports as a port conflict"},{"line_number":61,"context_line":"            # causes the test to fail."},{"line_number":62,"context_line":"            conf.set_override(\u0027of_listen_port\u0027,"},{"line_number":63,"context_line":"                              net_helpers.get_free_namespace_port("},{"line_number":64,"context_line":"                                  n_const.PROTO_NAME_TCP),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_902613ba","line":61,"updated":"2018-09-19 08:52:58.000000000","message":"ok, now I understand. Thx :)","commit_id":"42acdc51be86702ee5ece15f5c6e1e5578d9c359"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class OVSOFControllerHelper(object):"},{"line_number":49,"context_line":"    \"\"\"Helper class that runs ryu openflow controller.\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def start_of_controller(self, conf):"},{"line_number":52,"context_line":"        self.br_int_cls \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_9113fb66","line":49,"range":{"start_line":49,"start_character":30,"end_line":49,"end_character":33},"updated":"2019-05-06 01:40:20.000000000","message":"osken","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class OVSOFControllerHelper(object):"},{"line_number":49,"context_line":"    \"\"\"Helper class that runs ryu openflow controller.\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def start_of_controller(self, conf):"},{"line_number":52,"context_line":"        self.br_int_cls \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_198889e5","line":49,"range":{"start_line":49,"start_character":30,"end_line":49,"end_character":33},"in_reply_to":"dfbec78f_9113fb66","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9869563012c673d86539e7497f598d5915373902","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import eventlet"},{"line_number":20,"context_line":"import fixtures"},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutron_lib import constants as n_const"},{"line_number":24,"context_line":"from neutron_lib.utils import net"},{"line_number":25,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_96772dd5","line":22,"updated":"2019-05-23 08:33:21.000000000","message":"nit: do we need this blank line?","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"257353f3ce2246c2061d5f7b2ca053591e5b456d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import eventlet"},{"line_number":20,"context_line":"import fixtures"},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutron_lib import constants as n_const"},{"line_number":24,"context_line":"from neutron_lib.utils import net"},{"line_number":25,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":11,"id":"bfb3d3c7_1b902fed","line":22,"in_reply_to":"bfb3d3c7_96772dd5","updated":"2019-05-24 08:33:37.000000000","message":"nope","commit_id":"46a3863ca62796edcc0dd8841be8e909d22b8f4d"}],"neutron/tests/functional/agent/test_l2_ovs_agent.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b6d34467967bbd1cbfa726a78ec9af9db1bf44af","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        def find_drop_flow(ofport, flows):"},{"line_number":43,"context_line":"            for flow in flows:"},{"line_number":44,"context_line":"                # flow.instruction \u003d\u003d [] means actions\u003ddrop"},{"line_number":45,"context_line":"                if not flow.instructions and \\"},{"line_number":46,"context_line":"                   (\u0027in_port\u0027, ofport) in flow.match.items():"},{"line_number":47,"context_line":"                    return True"},{"line_number":48,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_001640f3","line":45,"updated":"2018-09-18 20:39:02.000000000","message":"nit: I know that Brian don\u0027t like using \"\\\" at the end if the line. Put whole conditions in brackets should make him happy :)","commit_id":"e9ce57e2695eaa26717b5f1005b1c78f5c3428f1"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"1a102881e5411cc872a4e383695bfbc64eec0a6f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        def find_drop_flow(ofport, flows):"},{"line_number":43,"context_line":"            for flow in flows:"},{"line_number":44,"context_line":"                # flow.instruction \u003d\u003d [] means actions\u003ddrop"},{"line_number":45,"context_line":"                if not flow.instructions and \\"},{"line_number":46,"context_line":"                   (\u0027in_port\u0027, ofport) in flow.match.items():"},{"line_number":47,"context_line":"                    return True"},{"line_number":48,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0f8aebba","line":45,"in_reply_to":"3f79a3b5_001640f3","updated":"2018-09-19 03:11:33.000000000","message":"As done in PS1?\nI\u0027m not a great fan of a trailing backslash but parens gave a PEP8 error.","commit_id":"e9ce57e2695eaa26717b5f1005b1c78f5c3428f1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2fcbd3c2946e2e2f88cce2e6e5ac9040e3a6b6aa","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        def find_drop_flow(ofport, flows):"},{"line_number":43,"context_line":"            for flow in flows:"},{"line_number":44,"context_line":"                # flow.instruction \u003d\u003d [] means actions\u003ddrop"},{"line_number":45,"context_line":"                if not flow.instructions and \\"},{"line_number":46,"context_line":"                   (\u0027in_port\u0027, ofport) in flow.match.items():"},{"line_number":47,"context_line":"                    return True"},{"line_number":48,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_e128e398","line":45,"updated":"2018-09-19 04:00:57.000000000","message":"Oh, it\u0027s always *me* that doesn\u0027t like trailing backslashes :)","commit_id":"fe3561564e55aa66378775e9598109e20df1cc87"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2fcbd3c2946e2e2f88cce2e6e5ac9040e3a6b6aa","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            for flow in flows:"},{"line_number":44,"context_line":"                # flow.instruction \u003d\u003d [] means actions\u003ddrop"},{"line_number":45,"context_line":"                if not flow.instructions and \\"},{"line_number":46,"context_line":"                   (\u0027in_port\u0027, ofport) in flow.match.items():"},{"line_number":47,"context_line":"                    return True"},{"line_number":48,"context_line":"            return False"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_210c9b40","line":46,"updated":"2018-09-19 04:00:57.000000000","message":"If you put this if statement in parens, you can get past the pep8 error by indenting this second line of it 8 spaces, I had to do that other places previously.\n\n                 # flow.instruction \u003d\u003d [] means actions\u003ddrop\n-                if not flow.instructions and \\\n-                   (\u0027in_port\u0027, ofport) in flow.match.items():\n+                if (not flow.instructions and\n+                        (\u0027in_port\u0027, ofport) in flow.match.items()):\n                     return True","commit_id":"fe3561564e55aa66378775e9598109e20df1cc87"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"0993d9898d452840a972ef19dd318499b6f7c63c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            for flow in flows:"},{"line_number":44,"context_line":"                # flow.instruction \u003d\u003d [] means actions\u003ddrop"},{"line_number":45,"context_line":"                if not flow.instructions and \\"},{"line_number":46,"context_line":"                   (\u0027in_port\u0027, ofport) in flow.match.items():"},{"line_number":47,"context_line":"                    return True"},{"line_number":48,"context_line":"            return False"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_44c1a57f","line":46,"in_reply_to":"3f79a3b5_210c9b40","updated":"2018-09-19 04:34:24.000000000","message":"Thanks. It should be better now. :)","commit_id":"fe3561564e55aa66378775e9598109e20df1cc87"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"df45dda5e4636fe974dd1b9540b4cfa1edcf3b99","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            for flow in flows:"},{"line_number":44,"context_line":"                # flow.instruction \u003d\u003d [] means actions\u003ddrop"},{"line_number":45,"context_line":"                if (not flow.instructions and"},{"line_number":46,"context_line":"                        (\u0027in_port\u0027, ofport) in flow.match.items()):"},{"line_number":47,"context_line":"                    return True"},{"line_number":48,"context_line":"            return False"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_b02b0f80","line":46,"updated":"2018-09-19 08:52:58.000000000","message":"thx. It\u0027s better now :)","commit_id":"42acdc51be86702ee5ece15f5c6e1e5578d9c359"}],"neutron/tests/unit/agent/l2/extensions/test_qos.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.qos_ext \u003d qos.QosAgentExtension()"},{"line_number":225,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":226,"context_line":"        self.connection \u003d mock.Mock()"},{"line_number":227,"context_line":"        ryu_app \u003d mock.Mock()"},{"line_number":228,"context_line":"        self.agent_api \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":229,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dryu_app),"},{"line_number":230,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027, ryu_app\u003dryu_app),"},{"line_number":231,"context_line":"                         {\u0027phynet1\u0027: ovs_bridge.OVSAgentBridge(\u0027br-phynet1\u0027)})"},{"line_number":232,"context_line":"        self.qos_ext.consume_api(self.agent_api)"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_f11ef76e","line":230,"range":{"start_line":227,"start_character":8,"end_line":230,"end_character":78},"updated":"2019-05-06 01:40:20.000000000","message":"os_ken_app","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.qos_ext \u003d qos.QosAgentExtension()"},{"line_number":225,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":226,"context_line":"        self.connection \u003d mock.Mock()"},{"line_number":227,"context_line":"        ryu_app \u003d mock.Mock()"},{"line_number":228,"context_line":"        self.agent_api \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":229,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dryu_app),"},{"line_number":230,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027, ryu_app\u003dryu_app),"},{"line_number":231,"context_line":"                         {\u0027phynet1\u0027: ovs_bridge.OVSAgentBridge(\u0027br-phynet1\u0027)})"},{"line_number":232,"context_line":"        self.qos_ext.consume_api(self.agent_api)"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_39622d40","line":230,"range":{"start_line":227,"start_character":8,"end_line":230,"end_character":78},"in_reply_to":"dfbec78f_f11ef76e","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"}],"neutron/tests/unit/agent/linux/openvswitch_firewall/test_firewall.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        self.execute \u003d mock.patch.object("},{"line_number":753,"context_line":"            utils, \"execute\", spec\u003dutils.execute).start()"},{"line_number":754,"context_line":"        bridge \u003d ovs_bridge.OVSAgentBridge(\u0027foo\u0027, ryu_app\u003dmock.Mock())"},{"line_number":755,"context_line":"        mock.patch.object("},{"line_number":756,"context_line":"            ovsfw.OVSFirewallDriver, \u0027initialize_bridge\u0027,"},{"line_number":757,"context_line":"            return_value\u003dbridge.deferred("}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_d1197388","line":754,"range":{"start_line":754,"start_character":50,"end_line":754,"end_character":57},"updated":"2019-05-06 01:40:20.000000000","message":"os_ken_app","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        self.execute \u003d mock.patch.object("},{"line_number":753,"context_line":"            utils, \"execute\", spec\u003dutils.execute).start()"},{"line_number":754,"context_line":"        bridge \u003d ovs_bridge.OVSAgentBridge(\u0027foo\u0027, ryu_app\u003dmock.Mock())"},{"line_number":755,"context_line":"        mock.patch.object("},{"line_number":756,"context_line":"            ovsfw.OVSFirewallDriver, \u0027initialize_bridge\u0027,"},{"line_number":757,"context_line":"            return_value\u003dbridge.deferred("}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_f95b3584","line":754,"range":{"start_line":754,"start_character":50,"end_line":754,"end_character":57},"in_reply_to":"dfbec78f_d1197388","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/openflow/test_br_cookie.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            \u0027neutron.agent.ovsdb.impl_idl._connection\u0027)"},{"line_number":30,"context_line":"        conn_patcher.start()"},{"line_number":31,"context_line":"        self.addCleanup(conn_patcher.stop)"},{"line_number":32,"context_line":"        self.br \u003d ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dmock.Mock())"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_reserved_cookies(self):"},{"line_number":35,"context_line":"        def_cookie \u003d self.br.default_cookie"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_5124a3c6","line":32,"range":{"start_line":32,"start_character":54,"end_line":32,"end_character":61},"updated":"2019-05-06 01:40:20.000000000","message":"os_ken_app","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            \u0027neutron.agent.ovsdb.impl_idl._connection\u0027)"},{"line_number":30,"context_line":"        conn_patcher.start()"},{"line_number":31,"context_line":"        self.addCleanup(conn_patcher.stop)"},{"line_number":32,"context_line":"        self.br \u003d ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dmock.Mock())"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_reserved_cookies(self):"},{"line_number":35,"context_line":"        def_cookie \u003d self.br.default_cookie"}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_794f45bd","line":32,"range":{"start_line":32,"start_character":54,"end_line":32,"end_character":61},"in_reply_to":"dfbec78f_5124a3c6","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.assertNotIn(requested_cookie, self.br.reserved_cookies)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_set_agent_uuid_stamp(self):"},{"line_number":52,"context_line":"        self.br \u003d ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dmock.Mock())"},{"line_number":53,"context_line":"        def_cookie \u003d self.br.default_cookie"},{"line_number":54,"context_line":"        new_cookie \u003d ovs_lib.generate_random_cookie()"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_7121a7b4","line":52,"range":{"start_line":52,"start_character":54,"end_line":52,"end_character":61},"updated":"2019-05-06 01:40:20.000000000","message":"os_ken_app","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.assertNotIn(requested_cookie, self.br.reserved_cookies)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_set_agent_uuid_stamp(self):"},{"line_number":52,"context_line":"        self.br \u003d ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dmock.Mock())"},{"line_number":53,"context_line":"        def_cookie \u003d self.br.default_cookie"},{"line_number":54,"context_line":"        new_cookie \u003d ovs_lib.generate_random_cookie()"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_39c78d15","line":52,"range":{"start_line":52,"start_character":54,"end_line":52,"end_character":61},"in_reply_to":"dfbec78f_7121a7b4","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertNotIn(def_cookie, self.br.reserved_cookies)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_set_agent_uuid_stamp_with_reserved_cookie(self):"},{"line_number":63,"context_line":"        self.br \u003d ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dmock.Mock())"},{"line_number":64,"context_line":"        def_cookie \u003d self.br.default_cookie"},{"line_number":65,"context_line":"        new_cookie \u003d self.br.request_cookie()"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_112e2ba5","line":63,"range":{"start_line":63,"start_character":54,"end_line":63,"end_character":61},"updated":"2019-05-06 01:40:20.000000000","message":"os_ken_app","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertNotIn(def_cookie, self.br.reserved_cookies)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_set_agent_uuid_stamp_with_reserved_cookie(self):"},{"line_number":63,"context_line":"        self.br \u003d ovs_bridge.OVSAgentBridge(\u0027br-int\u0027, ryu_app\u003dmock.Mock())"},{"line_number":64,"context_line":"        def_cookie \u003d self.br.default_cookie"},{"line_number":65,"context_line":"        new_cookie \u003d self.br.request_cookie()"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_f9d015cc","line":63,"range":{"start_line":63,"start_character":54,"end_line":63,"end_character":61},"in_reply_to":"dfbec78f_112e2ba5","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_agent_extension_api.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e1eed31c6f6a7f4d861bae5e90ee93e2457c4de","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    import ovs_test_base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class TestOVSAgentExtensionAPI(ovs_test_base.OVSRyuTestBase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(TestOVSAgentExtensionAPI, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_f13597f8","line":29,"range":{"start_line":29,"start_character":48,"end_line":29,"end_character":51},"updated":"2019-05-06 01:40:20.000000000","message":"OSken ?","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    import ovs_test_base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class TestOVSAgentExtensionAPI(ovs_test_base.OVSRyuTestBase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(TestOVSAgentExtensionAPI, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_79e425ad","line":29,"range":{"start_line":29,"start_character":48,"end_line":29,"end_character":51},"in_reply_to":"dfbec78f_f13597f8","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"}],"releasenotes/notes/remove-of_interface-option-531ac8a1c767603a.yaml":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"2ab5629733617c424796c6a39cc20f66c3eff321","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bfb3d3c7_c6a541b7","line":7,"updated":"2019-05-19 21:03:57.000000000","message":"Should we warn users that they may experience data plane downtine when the agent is re-started?","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7b4ffb6866395322d3ec3b478bd06094db810c6b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bfb3d3c7_998f99cb","line":7,"in_reply_to":"bfb3d3c7_c6a541b7","updated":"2019-05-20 20:20:24.000000000","message":"Done","commit_id":"f03b5291de87ebf0dc9d34e4709c049b1ebec737"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0e064a986523661720bbb95c12a3625c12f6217f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The deprecated ``of_interface`` option is removed. Neutron will"},{"line_number":5,"context_line":"    always use the ``native`` driver, which has been the default"},{"line_number":6,"context_line":"    since Pike (11.0)."},{"line_number":7,"context_line":"    If old driver ``ovs-ofctl`` was used before upgrade, automatically"},{"line_number":8,"context_line":"    done change to ``native`` driver will cause short break of data plane"},{"line_number":9,"context_line":"    connectivity during neutron-ovs-agent upgrade."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"bfb3d3c7_4919f61f","line":7,"range":{"start_line":7,"start_character":57,"end_line":7,"end_character":70},"updated":"2019-05-24 19:37:36.000000000","message":"nit: s/the automatically","commit_id":"4aeec2000108dbb8f2490f2de9cc9b0a4e509fcb"}]}
