)]}'
{"neutron/agent/ovsdb/impl_idl.py":[{"author":{"_account_id":27079,"name":"Frank Wang","email":"wangpeihuixyz@126.com","username":"FrankWang"},"change_message_id":"6969b5e2a53445007f1f848f25e17f6cfb92150f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return NeutronOvsdbIdl(_connection)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class OvsCleanup(command.BaseCommand):"},{"line_number":61,"context_line":"    def __init__(self, api, bridge, all_ports\u003dFalse):"},{"line_number":62,"context_line":"        super(OvsCleanup, self).__init__(api)"},{"line_number":63,"context_line":"        self.bridge \u003d bridge"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_787c1a20","line":60,"range":{"start_line":60,"start_character":0,"end_line":60,"end_character":37},"updated":"2018-01-22 06:48:43.000000000","message":"I\u0027d like to know why don\u0027t you put this directly into the ovsapp?","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"85bd8a36c914973dede99d7f76f4a7fe8b9297a8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return NeutronOvsdbIdl(_connection)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class OvsCleanup(command.BaseCommand):"},{"line_number":61,"context_line":"    def __init__(self, api, bridge, all_ports\u003dFalse):"},{"line_number":62,"context_line":"        super(OvsCleanup, self).__init__(api)"},{"line_number":63,"context_line":"        self.bridge \u003d bridge"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_97b44937","line":60,"range":{"start_line":60,"start_character":0,"end_line":60,"end_character":37},"in_reply_to":"7f96bb07_787c1a20","updated":"2018-01-22 13:42:13.000000000","message":"I put it here because it is pretty neutron-specific with the whole \u0027skip_value\u0027 thing that ovs cleanup uses. Also, even if I do put it in osvdapp eventually, it would take a while to make a new release, etc. and be able to use this and it is a pretty important fix.","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"19b82dcec3f054d877f3ab99a4f5b241b44afa75","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.bridge \u003d bridge"},{"line_number":64,"context_line":"        self.all_ports \u003d all_ports"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def run_idl(self, txn):"},{"line_number":67,"context_line":"        br \u003d idlutils.row_by_value(self.api.idl, \u0027Bridge\u0027, \u0027name\u0027, self.bridge)"},{"line_number":68,"context_line":"        for port in br.ports:"},{"line_number":69,"context_line":"            if not any(self.is_deletable_port(iface)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_bec34357","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":25},"updated":"2018-01-23 08:45:27.000000000","message":"why it is here? It\u0027s not used in this method anywhere","commit_id":"fef374131b5df33ab0e5516ba3f03c90089726dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2f7fa6c4f87ba1db4c0152f71fda8e262884abf1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.bridge \u003d bridge"},{"line_number":64,"context_line":"        self.all_ports \u003d all_ports"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def run_idl(self, txn):"},{"line_number":67,"context_line":"        br \u003d idlutils.row_by_value(self.api.idl, \u0027Bridge\u0027, \u0027name\u0027, self.bridge)"},{"line_number":68,"context_line":"        for port in br.ports:"},{"line_number":69,"context_line":"            if not any(self.is_deletable_port(iface)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_79863568","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":25},"in_reply_to":"7f96bb07_5e4b1f86","updated":"2018-01-23 09:04:00.000000000","message":"ok, that\u0027s clear now. Thx","commit_id":"fef374131b5df33ab0e5516ba3f03c90089726dc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"29ede76e90b04f8af226ec802a0950f6c75e5471","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.bridge \u003d bridge"},{"line_number":64,"context_line":"        self.all_ports \u003d all_ports"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def run_idl(self, txn):"},{"line_number":67,"context_line":"        br \u003d idlutils.row_by_value(self.api.idl, \u0027Bridge\u0027, \u0027name\u0027, self.bridge)"},{"line_number":68,"context_line":"        for port in br.ports:"},{"line_number":69,"context_line":"            if not any(self.is_deletable_port(iface)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_5e4b1f86","line":66,"range":{"start_line":66,"start_character":22,"end_line":66,"end_character":25},"in_reply_to":"7f96bb07_bec34357","updated":"2018-01-23 08:55:41.000000000","message":"It\u0027s to keep the method API, otherwise do_commit would fail:\nhttps://github.com/openstack/ovsdbapp/blob/master/ovsdbapp/backend/ovs_idl/transaction.py#L86","commit_id":"fef374131b5df33ab0e5516ba3f03c90089726dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"19b82dcec3f054d877f3ab99a4f5b241b44afa75","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                iface.delete()"},{"line_number":75,"context_line":"            port.delete()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def is_deletable_port(self, port):"},{"line_number":78,"context_line":"        # Deletable defined as \"looks like vif port and not set to skip delete\""},{"line_number":79,"context_line":"        if self.all_ports:"},{"line_number":80,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_3eb893e3","line":77,"updated":"2018-01-23 08:45:27.000000000","message":"I would make it \"private\" and start name of this method with \"_\"","commit_id":"fef374131b5df33ab0e5516ba3f03c90089726dc"}],"neutron/cmd/ovs_cleanup.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5f100d6aa4c8427d05b33fff40388ef09ebd87c3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # Remove remaining ports created by Neutron (usually veth pair)"},{"line_number":122,"context_line":"        delete_neutron_ports(ports)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        LOG.info(\"OVS cleanup completed successfully\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_1c129559","line":124,"updated":"2018-01-22 18:29:49.000000000","message":"Was this message supposed to be indented?","commit_id":"8453c45975840dfbc70b5ba989cf779b7e7066f2"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9a5f172cb8493b1e862ddde3e68ff558766a0450","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # Remove remaining ports created by Neutron (usually veth pair)"},{"line_number":122,"context_line":"        delete_neutron_ports(ports)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        LOG.info(\"OVS cleanup completed successfully\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_4a392b3d","line":124,"in_reply_to":"7f96bb07_1c129559","updated":"2018-01-22 19:57:30.000000000","message":"oops! no, good catch.","commit_id":"8453c45975840dfbc70b5ba989cf779b7e7066f2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"19b82dcec3f054d877f3ab99a4f5b241b44afa75","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    conf \u003d setup_conf()"},{"line_number":83,"context_line":"    conf()"},{"line_number":84,"context_line":"    config.setup_logging()"},{"line_number":85,"context_line":"    do_main(conf)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def do_main(conf):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_3e9bb366","line":85,"updated":"2018-01-23 08:45:27.000000000","message":"why You need to add additional function?","commit_id":"fef374131b5df33ab0e5516ba3f03c90089726dc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"29ede76e90b04f8af226ec802a0950f6c75e5471","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    conf \u003d setup_conf()"},{"line_number":83,"context_line":"    conf()"},{"line_number":84,"context_line":"    config.setup_logging()"},{"line_number":85,"context_line":"    do_main(conf)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def do_main(conf):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_fe1eab72","line":85,"in_reply_to":"7f96bb07_3e9bb366","updated":"2018-01-23 08:55:41.000000000","message":"I guess it was split to simplify testing.","commit_id":"fef374131b5df33ab0e5516ba3f03c90089726dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2f7fa6c4f87ba1db4c0152f71fda8e262884abf1","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    conf \u003d setup_conf()"},{"line_number":83,"context_line":"    conf()"},{"line_number":84,"context_line":"    config.setup_logging()"},{"line_number":85,"context_line":"    do_main(conf)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def do_main(conf):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_99bea1fd","line":85,"in_reply_to":"7f96bb07_fe1eab72","updated":"2018-01-23 09:04:00.000000000","message":"ok, I see now. Thanks to this change config is just prepared in test and passed to tested method and there is no need to patch it","commit_id":"fef374131b5df33ab0e5516ba3f03c90089726dc"}],"neutron/tests/functional/cmd/test_ovs_cleanup.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"622729bf0f93cef88ebf1e3b73aa810fdf8d55a4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.conf.reset()"},{"line_number":33,"context_line":"        self.conf.unregister_opts(cmd.ovs_opts)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_main_default_options(self):"},{"line_number":36,"context_line":"        int_br \u003d self.useFixture(net_helpers.OVSBridgeFixture()).bridge"},{"line_number":37,"context_line":"        ext_br \u003d self.useFixture(net_helpers.OVSBridgeFixture()).bridge"},{"line_number":38,"context_line":"        self.conf.set_override(\"ovs_integration_bridge\", int_br.br_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_9976c53e","line":35,"range":{"start_line":35,"start_character":13,"end_line":35,"end_character":17},"updated":"2018-01-22 10:47:00.000000000","message":"nit: do_main","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"622729bf0f93cef88ebf1e3b73aa810fdf8d55a4","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        noskip \u003d collections.defaultdict(list)"},{"line_number":43,"context_line":"        skip \u003d collections.defaultdict(list)"},{"line_number":44,"context_line":"        # add two noskip and a non-vif port to int_br and ext_br"},{"line_number":45,"context_line":"        for br in (int_br, ext_br):"},{"line_number":46,"context_line":"            for collection in (noskip, skip):"},{"line_number":47,"context_line":"                collection[br].append("}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_f9510964","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":64},"updated":"2018-01-22 10:47:00.000000000","message":"So it\u0027s two ports in skip - one with SKIP_CLEANUP and one non-vif port. And then one port in noskip that will be deleted, is that correct?","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"85bd8a36c914973dede99d7f76f4a7fe8b9297a8","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        noskip \u003d collections.defaultdict(list)"},{"line_number":43,"context_line":"        skip \u003d collections.defaultdict(list)"},{"line_number":44,"context_line":"        # add two noskip and a non-vif port to int_br and ext_br"},{"line_number":45,"context_line":"        for br in (int_br, ext_br):"},{"line_number":46,"context_line":"            for collection in (noskip, skip):"},{"line_number":47,"context_line":"                collection[br].append("}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_d793b1a2","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":64},"in_reply_to":"7f96bb07_f9510964","updated":"2018-01-22 13:42:13.000000000","message":"Yes. Added the skip_value testing and didn\u0027t update the comment.","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"622729bf0f93cef88ebf1e3b73aa810fdf8d55a4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            for collection in (noskip, skip):"},{"line_number":47,"context_line":"                collection[br].append("},{"line_number":48,"context_line":"                    self.useFixture(net_helpers.OVSPortFixture(br)).port.name)"},{"line_number":49,"context_line":"            # set the last vif to ve skipped"},{"line_number":50,"context_line":"            br.ovsdb.db_set("},{"line_number":51,"context_line":"                \u0027Interface\u0027, skip[br][0],"},{"line_number":52,"context_line":"                (\u0027external_ids\u0027, {constants.SKIP_CLEANUP: \"True\"})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_59c6fd18","line":49,"range":{"start_line":49,"start_character":22,"end_line":49,"end_character":26},"updated":"2018-01-22 10:47:00.000000000","message":"It took me a while to understand this as it accesses the first port, so technically it is the last port as there is the only port in the collection, right? It\u0027s both the first and the last :)","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"622729bf0f93cef88ebf1e3b73aa810fdf8d55a4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            for collection in (noskip, skip):"},{"line_number":47,"context_line":"                collection[br].append("},{"line_number":48,"context_line":"                    self.useFixture(net_helpers.OVSPortFixture(br)).port.name)"},{"line_number":49,"context_line":"            # set the last vif to ve skipped"},{"line_number":50,"context_line":"            br.ovsdb.db_set("},{"line_number":51,"context_line":"                \u0027Interface\u0027, skip[br][0],"},{"line_number":52,"context_line":"                (\u0027external_ids\u0027, {constants.SKIP_CLEANUP: \"True\"})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_19e635ea","line":49,"range":{"start_line":49,"start_character":34,"end_line":49,"end_character":36},"updated":"2018-01-22 10:47:00.000000000","message":"be","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"85bd8a36c914973dede99d7f76f4a7fe8b9297a8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            for collection in (noskip, skip):"},{"line_number":47,"context_line":"                collection[br].append("},{"line_number":48,"context_line":"                    self.useFixture(net_helpers.OVSPortFixture(br)).port.name)"},{"line_number":49,"context_line":"            # set the last vif to ve skipped"},{"line_number":50,"context_line":"            br.ovsdb.db_set("},{"line_number":51,"context_line":"                \u0027Interface\u0027, skip[br][0],"},{"line_number":52,"context_line":"                (\u0027external_ids\u0027, {constants.SKIP_CLEANUP: \"True\"})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_97e2092f","line":49,"range":{"start_line":49,"start_character":22,"end_line":49,"end_character":26},"in_reply_to":"7f96bb07_59c6fd18","updated":"2018-01-22 13:42:13.000000000","message":"Yeah, another confusing change. originally it was vifs/nonvifs and I added both vifs to \u0027vifs\u0027 and set the second one to be skipable. Ended up being easier to put the second one in nonvifs. Then renamed noskip/skip. So yeah. I can see why that would be confusing. :)","commit_id":"45ecdc7dcb99d2cc4d03697fc92bdcda9bb33750"}]}
