)]}'
{"dragonflow/db/drivers/ovsdb_vswitch_impl.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b19c4158d9a9b49af8b53fd3c4dbc5114861fe1e","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def start(self):"},{"line_number":140,"context_line":"        DFOvsdbApi.ovsdb_connection.start()"},{"line_number":141,"context_line":"        self.idl \u003d DFOvsdbApi.ovsdb_connection.idl"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def add_tunnel_port(self, chassis):"},{"line_number":144,"context_line":"        return AddTunnelPort(self, chassis)"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_97aa7c6f","line":142,"updated":"2016-09-22 07:49:49.000000000","message":"Why not push the execute() calls here? You always call ovsdb.add_tunnel_port(...).execute()?","commit_id":"ce60f2ba457897544c6f575c5df3ee0d36596038"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b9b84f505033cab04b1f4d77b1ae4c429cf487f3","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def start(self):"},{"line_number":140,"context_line":"        DFOvsdbApi.ovsdb_connection.start()"},{"line_number":141,"context_line":"        self.idl \u003d DFOvsdbApi.ovsdb_connection.idl"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def add_tunnel_port(self, chassis):"},{"line_number":144,"context_line":"        return AddTunnelPort(self, chassis)"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_b236a6b2","line":142,"in_reply_to":"5a8bc5a2_97aa7c6f","updated":"2016-09-22 08:07:01.000000000","message":"This is to keep consistent with impl_idl.OvsdbIdl, if I push execute() here. OvsdbSwitchApi will add execute to self.ovsdb sometimes(methods in super class), and not add execute othertimes(methods in this class). I think that is not good.","commit_id":"ce60f2ba457897544c6f575c5df3ee0d36596038"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"981dc8b41ca16ddde0bd5e64ce84908dd6aa8f2d","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def start(self):"},{"line_number":140,"context_line":"        DFOvsdbApi.ovsdb_connection.start()"},{"line_number":141,"context_line":"        self.idl \u003d DFOvsdbApi.ovsdb_connection.idl"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def add_tunnel_port(self, chassis):"},{"line_number":144,"context_line":"        return AddTunnelPort(self, chassis)"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_dcfae942","line":142,"in_reply_to":"5a8bc5a2_b236a6b2","updated":"2016-09-25 06:45:12.000000000","message":"All right. Then let\u0027s keep it like this (without the execute)","commit_id":"ce60f2ba457897544c6f575c5df3ee0d36596038"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b19c4158d9a9b49af8b53fd3c4dbc5114861fe1e","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.ovsdb_monitor.initialize()"},{"line_number":186,"context_line":"        self.nb_api.db_change_callback(table, None, \u0027sync_finished\u0027, None)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def db_get_val(self, table, record, column, check_error\u003dFalse,"},{"line_number":189,"context_line":"                   log_errors\u003dTrue):"},{"line_number":190,"context_line":"        return self.ovsdb.db_get(table, record, column).execute("},{"line_number":191,"context_line":"            check_error\u003dcheck_error, log_errors\u003dlog_errors)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_975fdc0d","line":188,"updated":"2016-09-22 07:49:49.000000000","message":"I think this method should be private.","commit_id":"ce60f2ba457897544c6f575c5df3ee0d36596038"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b9b84f505033cab04b1f4d77b1ae4c429cf487f3","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.ovsdb_monitor.initialize()"},{"line_number":186,"context_line":"        self.nb_api.db_change_callback(table, None, \u0027sync_finished\u0027, None)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def db_get_val(self, table, record, column, check_error\u003dFalse,"},{"line_number":189,"context_line":"                   log_errors\u003dTrue):"},{"line_number":190,"context_line":"        return self.ovsdb.db_get(table, record, column).execute("},{"line_number":191,"context_line":"            check_error\u003dcheck_error, log_errors\u003dlog_errors)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_928d2a7e","line":188,"in_reply_to":"5a8bc5a2_975fdc0d","updated":"2016-09-22 08:07:01.000000000","message":"Done","commit_id":"ce60f2ba457897544c6f575c5df3ee0d36596038"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"659481881fa783b54f80e2fa37319f06547a98e3","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        self.ovsdb.set_controller(bridge, targets).execute()"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def set_controller_fail_mode(self, bridge, fail_mode):"},{"line_number":197,"context_line":"        self.ovsdb.set_fail_mode(bridge, fail_mode).execute()"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def check_controller(self, target):"},{"line_number":200,"context_line":"        controllers \u003d self.ovsdb.get_controller("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_5a21829e","line":197,"range":{"start_line":197,"start_character":60,"end_line":197,"end_character":60},"updated":"2016-09-24 13:11:55.000000000","message":"maybe you could add execute(check_error\u003dTrue)","commit_id":"ce60f2ba457897544c6f575c5df3ee0d36596038"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"4d65434b069cfe4668a5ce0227fa713dc580eb12","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        self.ovsdb.set_controller(bridge, targets).execute()"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def set_controller_fail_mode(self, bridge, fail_mode):"},{"line_number":197,"context_line":"        self.ovsdb.set_fail_mode(bridge, fail_mode).execute()"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def check_controller(self, target):"},{"line_number":200,"context_line":"        controllers \u003d self.ovsdb.get_controller("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_797ac278","line":197,"range":{"start_line":197,"start_character":60,"end_line":197,"end_character":60},"in_reply_to":"5a8bc5a2_5a21829e","updated":"2016-09-25 13:33:15.000000000","message":"I am just mirroring the original logic, and I think keeping it unchaged is good to make the goal of this patch be clear.","commit_id":"ce60f2ba457897544c6f575c5df3ee0d36596038"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"44ed4ba15b2ab057998d6b91a7d57590868470ec","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            self.thread.start()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class DFOvsdbApi(impl_idl.OvsdbIdl):"},{"line_number":119,"context_line":"    \"\"\"The command generator of OVS DB operation"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    This is a sub-class of OvsdbIdl, which is defined in neutron. The super"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_ba7a6a75","line":118,"range":{"start_line":118,"start_character":6,"end_line":118,"end_character":16},"updated":"2016-09-27 03:29:27.000000000","message":"name of this class looks very similar to OvsdbSwitchApi Why split it out from OvsdbSwitchApi?","commit_id":"d3699d1c30d417bbf7e97d902608a657fff6d952"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"114927f74ef72807d3601f5905f0b2186d476de7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            self.thread.start()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class DFOvsdbApi(impl_idl.OvsdbIdl):"},{"line_number":119,"context_line":"    \"\"\"The command generator of OVS DB operation"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    This is a sub-class of OvsdbIdl, which is defined in neutron. The super"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_88de09db","line":118,"range":{"start_line":118,"start_character":6,"end_line":118,"end_character":16},"in_reply_to":"5a8bc5a2_ba7a6a75","updated":"2016-09-27 06:29:40.000000000","message":"This is only for the ovs db interface, and OvsdbSwitchApi will wrap it as interface to ovs. Normally, other code don\u0027t need to consider the detail of ovsdb, and just need to care about how to interact with ovs by using OvsdbSwitchApi","commit_id":"d3699d1c30d417bbf7e97d902608a657fff6d952"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"44ed4ba15b2ab057998d6b91a7d57590868470ec","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        self.ovsdb.del_port(switch_port.get_name(),"},{"line_number":218,"context_line":"                            self.integration_bridge).execute()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def get_local_ports_to_ofport_mapping(self):"},{"line_number":221,"context_line":"        lport_to_ofport \u003d {}"},{"line_number":222,"context_line":"        chassis_to_ofport \u003d {}"},{"line_number":223,"context_line":"        ports \u003d self.ovsdb.get_bridge_ports(self.integration_bridge).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_7ce987b6","line":220,"range":{"start_line":220,"start_character":8,"end_line":220,"end_character":41},"updated":"2016-09-27 03:29:27.000000000","message":"this method is called very frequently. Can we optimize it?","commit_id":"d3699d1c30d417bbf7e97d902608a657fff6d952"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"114927f74ef72807d3601f5905f0b2186d476de7","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        self.ovsdb.del_port(switch_port.get_name(),"},{"line_number":218,"context_line":"                            self.integration_bridge).execute()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def get_local_ports_to_ofport_mapping(self):"},{"line_number":221,"context_line":"        lport_to_ofport \u003d {}"},{"line_number":222,"context_line":"        chassis_to_ofport \u003d {}"},{"line_number":223,"context_line":"        ports \u003d self.ovsdb.get_bridge_ports(self.integration_bridge).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_a88745b3","line":220,"range":{"start_line":220,"start_character":8,"end_line":220,"end_character":41},"in_reply_to":"5a8bc5a2_7ce987b6","updated":"2016-09-27 06:29:40.000000000","message":"I have this plan to optimize it based on this patch. This method is usually called for either one local port or one remote port, however, it returns all chassis and all local port for the code to use it. It is not necessary, especially when the topology is huge.","commit_id":"d3699d1c30d417bbf7e97d902608a657fff6d952"}],"dragonflow/tests/fullstack/test_ovsdb_monitor.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"793593f13af4ea891bc4d2be3f4514d459d4af3c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.set_wanted_vms \u003d set()"},{"line_number":25,"context_line":"        # Reset the ovsdb connection, as we want a new idl connection to"},{"line_number":26,"context_line":"        # notify event to the nb_api of current test case."},{"line_number":27,"context_line":"        ovsdb_vswitch_impl.DFOvsdbApi.ovsdb_connection \u003d None"},{"line_number":28,"context_line":"        self.vswitch_api \u003d ovsdb_vswitch_impl.OvsdbSwitchApi(self.local_ip)"},{"line_number":29,"context_line":"        self.vswitch_api.initialize(self.nb_api)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_2f68df86","line":27,"updated":"2016-09-26 07:19:05.000000000","message":"Maybe also manually stop the thread inside ovsdb_connection? I want to make sure that we don\u0027t get non-deterministic behavior due to garbage collection, or that a dangling thread keeps running forever.","commit_id":"d3699d1c30d417bbf7e97d902608a657fff6d952"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0a2009212c19e96f8a7633f08f2d628e740d4b50","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.set_wanted_vms \u003d set()"},{"line_number":25,"context_line":"        # Reset the ovsdb connection, as we want a new idl connection to"},{"line_number":26,"context_line":"        # notify event to the nb_api of current test case."},{"line_number":27,"context_line":"        ovsdb_vswitch_impl.DFOvsdbApi.ovsdb_connection \u003d None"},{"line_number":28,"context_line":"        self.vswitch_api \u003d ovsdb_vswitch_impl.OvsdbSwitchApi(self.local_ip)"},{"line_number":29,"context_line":"        self.vswitch_api.initialize(self.nb_api)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_ea4a6525","line":27,"in_reply_to":"5a8bc5a2_2f68df86","updated":"2016-09-26 07:47:23.000000000","message":"It is true that a the tread in DFConnection is left behind. Let me figure out how to handle it.","commit_id":"d3699d1c30d417bbf7e97d902608a657fff6d952"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"09bd3aa201f2edce6fa9600fbefd944f93566d52","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.set_wanted_vms \u003d set()"},{"line_number":25,"context_line":"        # Reset the ovsdb connection, as we want a new idl connection to"},{"line_number":26,"context_line":"        # notify event to the nb_api of current test case."},{"line_number":27,"context_line":"        ovsdb_vswitch_impl.DFOvsdbApi.ovsdb_connection \u003d None"},{"line_number":28,"context_line":"        self.vswitch_api \u003d ovsdb_vswitch_impl.OvsdbSwitchApi(self.local_ip)"},{"line_number":29,"context_line":"        self.vswitch_api.initialize(self.nb_api)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_dadb3b20","line":27,"in_reply_to":"5a8bc5a2_ea4a6525","updated":"2016-09-28 03:25:49.000000000","message":"I re-think about this part these days. And I think this is a potential issue in the fullstack test. Every fullstack testcase create an nb_api, while a single-ton should be used. If a single nb_api is used across all the fullstack tests, then we should not do this trick here.","commit_id":"d3699d1c30d417bbf7e97d902608a657fff6d952"}]}
