)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"3a4e352b9136ce9d48cb3e654b7fc01dc991cf4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9a629dbe_66f04492","updated":"2016-11-10 09:02:09.000000000","message":"Could you add more information about the design ? or Any BP?","commit_id":"2bccfc3a1bc0d84cb2d62e7c3ef8a15b68707042"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"886002b33d7a8192148e412094c4b2bc582a0ba4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Support VM live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie0942cc5d1f447dc455d6c78ec01156a022b3ea0"},{"line_number":10,"context_line":"Implements: blueprint vm-live-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"da36d5c6_5cdd4a13","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":39},"updated":"2017-02-21 01:37:12.000000000","message":"I see there are todos in the code. So, can this patch be considered as implements the bp?","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b634061f6e4c0b186e5ade0b1b3ae49f48570233","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Support VM live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie0942cc5d1f447dc455d6c78ec01156a022b3ea0"},{"line_number":10,"context_line":"Implements: blueprint vm-live-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"da36d5c6_5f88dc22","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":39},"in_reply_to":"da36d5c6_5cdd4a13","updated":"2017-02-21 07:03:34.000000000","message":"yes, the TODOs will be considered as alternative to enhance the flows be installed if pub/sub event lost occurs","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"}],"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"11e81a155e93d34b48c25e1a771e73266dd0458f","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":265,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":266,"context_line":"        original_lport \u003d lport"},{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_fe31900c","line":267,"range":{"start_line":267,"start_character":23,"end_line":267,"end_character":43},"updated":"2016-11-08 15:38:04.000000000","message":"What if \u0027-\u0027 appears in chassis name?","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"9882647ddaa7b645976f74a0feed441240a3c297","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":265,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":266,"context_line":"        original_lport \u003d lport"},{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_7d9f26b4","line":267,"range":{"start_line":267,"start_character":23,"end_line":267,"end_character":43},"in_reply_to":"9a629dbe_64e23ca1","updated":"2016-11-09 08:11:27.000000000","message":"Then you need to make sure you\u0027re splitting only once. If chassis name is someithing like my-chassis then\n\u0027migrating-my-chassis\u0027.split(\u0027-\u0027)[-1] yields \u0027chassis\u0027.\n\nI would suggest using a dictionary instead of encoding status into strings:\n\n{\n    \u0027status\u0027: \u0027migration/...\u0027,\n   [\u0027destination\u0027: \u0027chassis-name\u0027]    \u003c- optional\n}","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"b29ba50881ee64a4f5a39781fd0c734c127aa17e","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":265,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":266,"context_line":"        original_lport \u003d lport"},{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_8ed76222","line":267,"range":{"start_line":267,"start_character":23,"end_line":267,"end_character":43},"in_reply_to":"9a629dbe_7d9f26b4","updated":"2016-11-09 09:34:40.000000000","message":"+1, you can not split by \u0027-\u0027 directly.","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b8980dfcd0c6682076b88cff3d79241c32701011","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":265,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":266,"context_line":"        original_lport \u003d lport"},{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_275f540f","line":267,"range":{"start_line":267,"start_character":23,"end_line":267,"end_character":43},"in_reply_to":"9a629dbe_8ed76222","updated":"2016-11-09 12:05:57.000000000","message":"Done","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"4faa4b45456a4aff1601973ce9a8cc6b60ec455b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":265,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":266,"context_line":"        original_lport \u003d lport"},{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_64e23ca1","line":267,"range":{"start_line":267,"start_character":23,"end_line":267,"end_character":43},"in_reply_to":"9a629dbe_fe31900c","updated":"2016-11-09 02:50:53.000000000","message":"here the whole string should be like \"migrating-chassisname\" which has been edited in _vm_port_updated to indicate the port is in migration, so we need parse the string and get chassis name.","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"b29ba50881ee64a4f5a39781fd0c734c127aa17e","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"},{"line_number":271,"context_line":"        )"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        local_network_id \u003d self.get_network_id("}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_aed266d0","line":270,"range":{"start_line":270,"start_character":29,"end_line":270,"end_character":63},"updated":"2016-11-09 09:34:40.000000000","message":"this method is not exist","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b8980dfcd0c6682076b88cff3d79241c32701011","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"},{"line_number":271,"context_line":"        )"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        local_network_id \u003d self.get_network_id("}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_87a6600e","line":270,"range":{"start_line":270,"start_character":29,"end_line":270,"end_character":63},"in_reply_to":"9a629dbe_aed266d0","updated":"2016-11-09 12:05:57.000000000","message":"Done","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"11e81a155e93d34b48c25e1a771e73266dd0458f","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        original_lport \u003d lport"},{"line_number":267,"context_line":"        dest_chassis \u003d state.split(\u0027-\u0027)[-1]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        chassis_to_ofport, lport_to_ofport \u003d ("},{"line_number":270,"context_line":"            self.vswitch_api.get_local_ports_to_ofport_mappping()"},{"line_number":271,"context_line":"        )"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        local_network_id \u003d self.get_network_id("},{"line_number":274,"context_line":"            lport.get_lswitch_id()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_5eafdc93","line":271,"range":{"start_line":269,"start_character":45,"end_line":271,"end_character":9},"updated":"2016-11-08 15:38:04.000000000","message":"unneeded parenthesis","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"b29ba50881ee64a4f5a39781fd0c734c127aa17e","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if dest_chassis \u003d\u003d chassis_name:"},{"line_number":280,"context_line":"            # destination node"},{"line_number":281,"context_line":"            ofport \u003d lport_to_ofport.get(port_id, 0)"},{"line_number":282,"context_line":"            lport.set_external_value(\u0027ofport\u0027, ofport)"},{"line_number":283,"context_line":"            lport.set_external_value(\u0027is_local\u0027, True)"},{"line_number":284,"context_line":"            self.db_store.set_port(lport.get_id, lport, True)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"            LOG.info(_LI(\"dest process migration event port \u003d %(port)s\""},{"line_number":287,"context_line":"                         \"\\n original_port \u003d %(original_port)s\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_4ee2aaa0","line":284,"range":{"start_line":280,"start_character":12,"end_line":284,"end_character":61},"updated":"2016-11-09 09:34:40.000000000","message":"where is the network_type and segment_id?","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b8980dfcd0c6682076b88cff3d79241c32701011","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if dest_chassis \u003d\u003d chassis_name:"},{"line_number":280,"context_line":"            # destination node"},{"line_number":281,"context_line":"            ofport \u003d lport_to_ofport.get(port_id, 0)"},{"line_number":282,"context_line":"            lport.set_external_value(\u0027ofport\u0027, ofport)"},{"line_number":283,"context_line":"            lport.set_external_value(\u0027is_local\u0027, True)"},{"line_number":284,"context_line":"            self.db_store.set_port(lport.get_id, lport, True)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"            LOG.info(_LI(\"dest process migration event port \u003d %(port)s\""},{"line_number":287,"context_line":"                         \"\\n original_port \u003d %(original_port)s\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_a7a9a4e1","line":284,"range":{"start_line":280,"start_character":12,"end_line":284,"end_character":61},"in_reply_to":"9a629dbe_4ee2aaa0","updated":"2016-11-09 12:05:57.000000000","message":"Done","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"11e81a155e93d34b48c25e1a771e73266dd0458f","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        if lport.get_chassis() \u003d\u003d chassis_name:"},{"line_number":311,"context_line":"            # source node"},{"line_number":312,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            # other node"},{"line_number":315,"context_line":"            self.open_flow_app.notify_remove_remote_port(original_lport)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_bee638b2","line":312,"range":{"start_line":312,"start_character":12,"end_line":312,"end_character":60},"updated":"2016-11-08 15:38:04.000000000","message":"Maybe we need to remove local port?","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"4faa4b45456a4aff1601973ce9a8cc6b60ec455b","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        if lport.get_chassis() \u003d\u003d chassis_name:"},{"line_number":311,"context_line":"            # source node"},{"line_number":312,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            # other node"},{"line_number":315,"context_line":"            self.open_flow_app.notify_remove_remote_port(original_lport)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_641ddcbc","line":312,"range":{"start_line":312,"start_character":12,"end_line":312,"end_character":60},"in_reply_to":"9a629dbe_bee638b2","updated":"2016-11-09 02:50:53.000000000","message":"local port flows has been removed in logical_port_deleted with VM port offline","commit_id":"0d02b8a0be238ff2c5949dff37feeacd93ef9531"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"fba28c910f0b86ce2833bf6982a0dae0fa6e9202","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":264,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":265,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":266,"context_line":"        original_lport \u003d lport"},{"line_number":267,"context_line":"        dest_chassis \u003d state[\u0027state\u0027]"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        local_network_id \u003d self.get_network_id("}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_56ff73a9","line":266,"range":{"start_line":266,"start_character":8,"end_line":266,"end_character":30},"updated":"2016-11-10 06:40:26.000000000","message":"I do not see you give the lport new value, otherwise any modification will infect original_lport too.","commit_id":"2bccfc3a1bc0d84cb2d62e7c3ef8a15b68707042"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"fba28c910f0b86ce2833bf6982a0dae0fa6e9202","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        lswitch \u003d self.db_store.get_lswitch(lport.get_lswitch_id())"},{"line_number":274,"context_line":"        if lswitch is not None:"},{"line_number":275,"context_line":"            lport.set_external_value(\u0027network_type\u0027,"},{"line_number":276,"context_line":"                                     lswitch.get_type())"},{"line_number":277,"context_line":"            segmentation_id \u003d lswitch.get_segmentation()"},{"line_number":278,"context_line":"            if segmentation_id is not None:"},{"line_number":279,"context_line":"                lport.set_external_value(\u0027segmentation_id\u0027,"},{"line_number":280,"context_line":"                                         int(segmentation_id))"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        lport.set_external_value(\u0027local_network_id\u0027, local_network_id)"},{"line_number":283,"context_line":"        chassis_name \u003d self.get_chassis_name()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_b6db6f4e","line":280,"range":{"start_line":275,"start_character":12,"end_line":280,"end_character":62},"updated":"2016-11-10 06:40:26.000000000","message":"where is physical_network? I think you can follow the _logical_port_process and if much code is same, you can merge it.","commit_id":"2bccfc3a1bc0d84cb2d62e7c3ef8a15b68707042"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b641c07e3e3939555b377c089a866689a6d1d299","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            return False"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    # update migration flows for VM migration"},{"line_number":264,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":265,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":266,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":267,"context_line":"        original_lport \u003d copy.deepcopy(lport)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_7ebf4cd0","line":264,"updated":"2016-11-15 21:14:03.000000000","message":"This method requires a docstring. For instance, are we handling VM migrating to this node, or away from this node? (Or both?)","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0765ba1cc09ad99a1f6eb8aaacfb3c86648b0748","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            return False"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    # update migration flows for VM migration"},{"line_number":264,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":265,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":266,"context_line":"        state \u003d self.nb_api.get_lport_state(port_id)"},{"line_number":267,"context_line":"        original_lport \u003d copy.deepcopy(lport)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_34afe9e4","line":264,"range":{"start_line":264,"start_character":8,"end_line":264,"end_character":30},"updated":"2016-11-23 04:50:00.000000000","message":"there are many duplicated code between this method and _logical_port_process, could you do some combination?","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0765ba1cc09ad99a1f6eb8aaacfb3c86648b0748","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        original_lport \u003d copy.deepcopy(lport)"},{"line_number":268,"context_line":"        dest_chassis \u003d state[\u0027state\u0027]"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        local_network_id \u003d self.get_network_id("},{"line_number":271,"context_line":"            lport.get_lswitch_id()"},{"line_number":272,"context_line":"        )"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        lswitch \u003d self.db_store.get_lswitch(lport.get_lswitch_id())"},{"line_number":275,"context_line":"        if lswitch is not None:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_546545df","line":272,"range":{"start_line":270,"start_character":8,"end_line":272,"end_character":9},"updated":"2016-11-23 04:50:00.000000000","message":"there are no get_network_id() method currently.","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d17ff1ddd48b80788eca60d9dd930cf3b60ae6c2","unresolved":false,"context_lines":[{"line_number":305,"context_line":""},{"line_number":306,"context_line":"            self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":307,"context_line":"            self.open_flow_app.notify_add_local_port(lport)"},{"line_number":308,"context_line":"            self.nb_api.clear_lport_state(port_id)"},{"line_number":309,"context_line":"            return"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        ofport \u003d self.vswitch_api.get_chassis_ofport(dest_chassis)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_7aa3f89e","line":308,"range":{"start_line":308,"start_character":12,"end_line":308,"end_character":50},"updated":"2016-11-15 09:39:18.000000000","message":"There is a racing condition, when a new migration is issued. Because there is no lock, you may clear the state of a new migration","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b641c07e3e3939555b377c089a866689a6d1d299","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                else:"},{"line_number":360,"context_line":"                    if lport.get_chassis() !\u003d original_lport.get_chassis():"},{"line_number":361,"context_line":"                        LOG.info(_LI(\"migrating original chassis %(original)s\""},{"line_number":362,"context_line":"                                     \"\\n current chassis %(current)s\") %"},{"line_number":363,"context_line":"                                 {\u0027original\u0027:"},{"line_number":364,"context_line":"                                  str(original_lport.get_chassis()),"},{"line_number":365,"context_line":"                                  \u0027current\u0027: str(lport.get_chassis())})"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_9ee7c8e3","line":362,"range":{"start_line":362,"start_character":0,"end_line":362,"end_character":72},"updated":"2016-11-15 21:14:03.000000000","message":"Please do not use \u0027\\n\u0027 in log messages. Additionally, please postpone string formatting to LOG method (i.e. replace % with ,)","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b641c07e3e3939555b377c089a866689a6d1d299","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                                 {\u0027original\u0027:"},{"line_number":364,"context_line":"                                  str(original_lport.get_chassis()),"},{"line_number":365,"context_line":"                                  \u0027current\u0027: str(lport.get_chassis())})"},{"line_number":366,"context_line":"                        # Here should update flow if necessary for dest node"},{"line_number":367,"context_line":"                        return"},{"line_number":368,"context_line":"                    LOG.info(_LI(\"Updating local logical port \u003d %(port)s, \""},{"line_number":369,"context_line":"                                 \"original port \u003d %(original_port)s\") %"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_beec84c8","line":366,"range":{"start_line":366,"start_character":0,"end_line":366,"end_character":76},"updated":"2016-11-15 21:14:03.000000000","message":"Is this a TODO?","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b641c07e3e3939555b377c089a866689a6d1d299","unresolved":false,"context_lines":[{"line_number":386,"context_line":"                    self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":387,"context_line":"                else:"},{"line_number":388,"context_line":"                    if lport.get_chassis() !\u003d original_lport.get_chassis():"},{"line_number":389,"context_line":"                        # Here should update flow if necessary for other node"},{"line_number":390,"context_line":"                        return"},{"line_number":391,"context_line":"                    LOG.info(_LI(\"Updating remote logical port \u003d %(port)s, \""},{"line_number":392,"context_line":"                                 \"original port \u003d %(original_port)s\") %"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_3ed95422","line":389,"range":{"start_line":389,"start_character":0,"end_line":389,"end_character":77},"updated":"2016-11-15 21:14:03.000000000","message":"Is this a TODO?","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"ad679c810c0e98bd5dab4bd3caca2b64301a9bb4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            return False"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    # update migration flows for VM migration"},{"line_number":217,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":218,"context_line":"        # This method processes the migration event sent from source node."},{"line_number":219,"context_line":"        # There are three parts for event process, source node, destination"},{"line_number":220,"context_line":"        # node, other node which related to topic of migrating VM, according"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_b0534f38","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":30},"updated":"2016-12-06 07:01:58.000000000","message":"I do not find the place invoke this method, do this patch still WIP??","commit_id":"b1643111430d0185b8c3609eda28c1fa526532f7"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"175a0dd5f5209e489d1f00afc17ada1bccaffe35","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            return False"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    # update migration flows for VM migration"},{"line_number":217,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":218,"context_line":"        # This method processes the migration event sent from source node."},{"line_number":219,"context_line":"        # There are three parts for event process, source node, destination"},{"line_number":220,"context_line":"        # node, other node which related to topic of migrating VM, according"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_9f3f8024","line":217,"range":{"start_line":217,"start_character":8,"end_line":217,"end_character":30},"in_reply_to":"3a71b18c_b0534f38","updated":"2016-12-21 04:40:07.000000000","message":"it will be invoked in apply_db_change","commit_id":"b1643111430d0185b8c3609eda28c1fa526532f7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3bde6978c31a6aeb779261a1c2cd79f8d986d57e","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        migration \u003d self.nb_api.get_lport_migration(port_id)"},{"line_number":256,"context_line":"        original_lport \u003d self.db_store.get_port(port_id)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        if migration:"},{"line_number":259,"context_line":"            dest_chassis \u003d migration[\u0027migration\u0027]"},{"line_number":260,"context_line":"        else:"},{"line_number":261,"context_line":"            LOG.info(_LI(\"last lport deleted of this topic, do nothing %s\"),"},{"line_number":262,"context_line":"                     lport)"},{"line_number":263,"context_line":"            return"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lswitch \u003d self.db_store.get_lswitch(lport.get_lswitch_id())"},{"line_number":266,"context_line":"        if lswitch is not None:"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_ac44f81a","line":263,"range":{"start_line":258,"start_character":0,"end_line":263,"end_character":18},"updated":"2017-01-05 02:38:45.000000000","message":"What if the destination node receive the event first, and other nodes receive the event latter? Given the code at line 299, the data in nb db will be deleted. So other nodes will not update their local flows, right?","commit_id":"916c3e9a2f266237c47bdbcdce90e9c65955b410"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3bde6978c31a6aeb779261a1c2cd79f8d986d57e","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            return"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        ofport \u003d self.vswitch_api.get_chassis_ofport(dest_chassis)"},{"line_number":303,"context_line":"        lport.set_external_value(\u0027ofport\u0027, ofport)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        LOG.info(_LI(\"src process migration event port \u003d %(port)s\""},{"line_number":306,"context_line":"                     \"original_port \u003d %(original_port)s\""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_f18897c7","line":303,"range":{"start_line":303,"start_character":0,"end_line":303,"end_character":50},"updated":"2017-01-05 02:38:45.000000000","message":"Will the lport be updated in db store in this code path?","commit_id":"916c3e9a2f266237c47bdbcdce90e9c65955b410"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3bde6978c31a6aeb779261a1c2cd79f8d986d57e","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        if lport.get_chassis() \u003d\u003d chassis_name:"},{"line_number":313,"context_line":"            # source node"},{"line_number":314,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            # other node"},{"line_number":317,"context_line":"            if original_lport:"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_b1eb6f77","line":314,"range":{"start_line":314,"start_character":0,"end_line":314,"end_character":60},"updated":"2017-01-05 02:38:45.000000000","message":"Does the source node need to remove local port for lport?","commit_id":"916c3e9a2f266237c47bdbcdce90e9c65955b410"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3bde6978c31a6aeb779261a1c2cd79f8d986d57e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            # other node"},{"line_number":317,"context_line":"            if original_lport:"},{"line_number":318,"context_line":"                self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":319,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def _logical_port_process(self, lport, original_lport\u003dNone):"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_f1017739","line":318,"range":{"start_line":318,"start_character":35,"end_line":318,"end_character":60},"updated":"2017-01-05 02:38:45.000000000","message":"Why not just call update remote port here?","commit_id":"916c3e9a2f266237c47bdbcdce90e9c65955b410"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9ccb8fc0ab33c6e7de82396522d4cb7a32b0c228","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            if physical_network:"},{"line_number":243,"context_line":"                lport.set_external_value(\u0027physical_network\u0027, physical_network)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        lport.set_external_value(\u0027local_network_id\u0027, lswitch.get_unique_key())"},{"line_number":246,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        if dest_chassis \u003d\u003d chassis_name:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5201f7_4f16bb4c","line":245,"range":{"start_line":245,"start_character":0,"end_line":245,"end_character":78},"updated":"2017-01-08 14:48:59.000000000","message":"This line should be moved inside the \u0027if lswitch is not None\u0027 block.","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1c0e8c6cb73e6fdc0edd9a36b216d4d05893f512","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            if physical_network:"},{"line_number":243,"context_line":"                lport.set_external_value(\u0027physical_network\u0027, physical_network)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        lport.set_external_value(\u0027local_network_id\u0027, lswitch.get_unique_key())"},{"line_number":246,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        if dest_chassis \u003d\u003d chassis_name:"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa31d9ce_8a73204d","line":245,"range":{"start_line":245,"start_character":0,"end_line":245,"end_character":78},"in_reply_to":"ba5201f7_4f16bb4c","updated":"2017-02-13 09:06:42.000000000","message":"Done","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9ccb8fc0ab33c6e7de82396522d4cb7a32b0c228","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            LOG.info(_LI(\"dest process migration event port \u003d %(port)s\""},{"line_number":256,"context_line":"                         \"original_port \u003d %(original_port)s\""},{"line_number":257,"context_line":"                         \"chassis \u003d %(chassis)s\""},{"line_number":258,"context_line":"                         \"self_chassis \u003d %(self_chassis)s\") %"},{"line_number":259,"context_line":"                     {\u0027port\u0027: str(lport),"},{"line_number":260,"context_line":"                      \u0027original_port\u0027: str(original_lport),"},{"line_number":261,"context_line":"                      \u0027chassis\u0027: dest_chassis,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5201f7_ef2bef7f","line":258,"range":{"start_line":258,"start_character":60,"end_line":258,"end_character":61},"updated":"2017-01-08 14:48:59.000000000","message":"When using LOG framework, let the framework format the string. i.e. replace \u0027%\u0027 with \u0027,\u0027.","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1c0e8c6cb73e6fdc0edd9a36b216d4d05893f512","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            LOG.info(_LI(\"dest process migration event port \u003d %(port)s\""},{"line_number":256,"context_line":"                         \"original_port \u003d %(original_port)s\""},{"line_number":257,"context_line":"                         \"chassis \u003d %(chassis)s\""},{"line_number":258,"context_line":"                         \"self_chassis \u003d %(self_chassis)s\") %"},{"line_number":259,"context_line":"                     {\u0027port\u0027: str(lport),"},{"line_number":260,"context_line":"                      \u0027original_port\u0027: str(original_lport),"},{"line_number":261,"context_line":"                      \u0027chassis\u0027: dest_chassis,"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa31d9ce_ca93584e","line":258,"range":{"start_line":258,"start_character":60,"end_line":258,"end_character":61},"in_reply_to":"ba5201f7_ef2bef7f","updated":"2017-02-13 09:06:42.000000000","message":"Done","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9ccb8fc0ab33c6e7de82396522d4cb7a32b0c228","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                  \u0027original_port\u0027: str(original_lport),"},{"line_number":277,"context_line":"                  \u0027chassis\u0027: dest_chassis})"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if lport.get_chassis() \u003d\u003d chassis_name:"},{"line_number":280,"context_line":"            # source node"},{"line_number":281,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            # other node"},{"line_number":284,"context_line":"            if original_lport:"},{"line_number":285,"context_line":"                self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":286,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def _logical_port_process(self, lport, original_lport\u003dNone):"},{"line_number":289,"context_line":"        lswitch \u003d self.db_store.get_lswitch(lport.get_lswitch_id())"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5201f7_8f3343f5","line":286,"range":{"start_line":279,"start_character":0,"end_line":286,"end_character":60},"updated":"2017-01-08 14:48:59.000000000","message":"This code can be made smaller by changing it to:\n    if original_port and lport.get_chassis() !\u003d chassis_name:\n        self.open_flow_app.notify_remove_remote_port(original_lport)\n    self.open_flow_app.notify_add_remote_port(lport)","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1c0e8c6cb73e6fdc0edd9a36b216d4d05893f512","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                  \u0027original_port\u0027: str(original_lport),"},{"line_number":277,"context_line":"                  \u0027chassis\u0027: dest_chassis})"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if lport.get_chassis() \u003d\u003d chassis_name:"},{"line_number":280,"context_line":"            # source node"},{"line_number":281,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            # other node"},{"line_number":284,"context_line":"            if original_lport:"},{"line_number":285,"context_line":"                self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":286,"context_line":"            self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def _logical_port_process(self, lport, original_lport\u003dNone):"},{"line_number":289,"context_line":"        lswitch \u003d self.db_store.get_lswitch(lport.get_lswitch_id())"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa31d9ce_6ac42c40","line":286,"range":{"start_line":279,"start_character":0,"end_line":286,"end_character":60},"in_reply_to":"ba5201f7_8f3343f5","updated":"2017-02-13 09:06:42.000000000","message":"Done","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":217,"context_line":"        # This method processes the migration event sent from source node."},{"line_number":218,"context_line":"        # There are three parts for event process, source node, destination"},{"line_number":219,"context_line":"        # node, other node which related to topic of migrating VM, according"},{"line_number":220,"context_line":"        # to the chassis ID in lport, and local chassis.."},{"line_number":221,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":222,"context_line":"        migration \u003d self.nb_api.get_lport_migration(port_id)"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_4e4a95ad","line":219,"range":{"start_line":219,"start_character":22,"end_line":219,"end_character":26},"updated":"2017-02-14 07:31:47.000000000","message":"nodes","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":217,"context_line":"        # This method processes the migration event sent from source node."},{"line_number":218,"context_line":"        # There are three parts for event process, source node, destination"},{"line_number":219,"context_line":"        # node, other node which related to topic of migrating VM, according"},{"line_number":220,"context_line":"        # to the chassis ID in lport, and local chassis.."},{"line_number":221,"context_line":"        port_id \u003d lport.get_id()"},{"line_number":222,"context_line":"        migration \u003d self.nb_api.get_lport_migration(port_id)"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_afd78849","line":219,"range":{"start_line":219,"start_character":22,"end_line":219,"end_character":26},"in_reply_to":"fa31d9ce_4e4a95ad","updated":"2017-02-14 10:37:54.000000000","message":"Done","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        if migration:"},{"line_number":226,"context_line":"            dest_chassis \u003d migration[\u0027migration\u0027]"},{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            LOG.info(_LI(\"last lport deleted of this topic, do nothing %s\"),"},{"line_number":229,"context_line":"                     lport)"},{"line_number":230,"context_line":"            return"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_b1a374ff","line":228,"range":{"start_line":228,"start_character":16,"end_line":228,"end_character":20},"updated":"2017-02-14 07:31:47.000000000","message":"should be warning. It\u0027s abnormal when the port is deleted during migrating.","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        if migration:"},{"line_number":226,"context_line":"            dest_chassis \u003d migration[\u0027migration\u0027]"},{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            LOG.info(_LI(\"last lport deleted of this topic, do nothing %s\"),"},{"line_number":229,"context_line":"                     lport)"},{"line_number":230,"context_line":"            return"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_4fc7ec63","line":228,"range":{"start_line":228,"start_character":16,"end_line":228,"end_character":20},"in_reply_to":"fa31d9ce_b1a374ff","updated":"2017-02-14 10:37:54.000000000","message":"Done","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self.nb_api.delete_lport_migration(port_id)"},{"line_number":269,"context_line":"            return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        ofport \u003d self.vswitch_api.get_chassis_ofport(dest_chassis)"},{"line_number":272,"context_line":"        lport.set_external_value(\u0027ofport\u0027, ofport)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        LOG.info(_LI(\"src process migration event port \u003d %(port)s\""}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_f1c6cc98","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":14},"updated":"2017-02-14 07:31:47.000000000","message":"here, means this node is either the destination node or the source node right? some comments will help the code being more readable.","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self.nb_api.delete_lport_migration(port_id)"},{"line_number":269,"context_line":"            return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        ofport \u003d self.vswitch_api.get_chassis_ofport(dest_chassis)"},{"line_number":272,"context_line":"        lport.set_external_value(\u0027ofport\u0027, ofport)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        LOG.info(_LI(\"src process migration event port \u003d %(port)s\""}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_6f4af0ad","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":14},"in_reply_to":"fa31d9ce_f1c6cc98","updated":"2017-02-14 10:37:54.000000000","message":"here mean remote port, It could be either source node or other nodes. I will add some comments","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        # source node and other related nodes"},{"line_number":282,"context_line":"        if original_lport and lport.get_chassis() \u003d\u003d chassis_name:"},{"line_number":283,"context_line":"            self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_51edd8ed","line":283,"range":{"start_line":283,"start_character":45,"end_line":283,"end_character":51},"updated":"2017-02-14 07:31:47.000000000","message":"remove remote port when lport\u0027s chassis name is the same with current host name? Moreover, in topology, you have called self.controller.delete_lport(lport_id) when the port in source node was deleted.","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        # source node and other related nodes"},{"line_number":282,"context_line":"        if original_lport and lport.get_chassis() \u003d\u003d chassis_name:"},{"line_number":283,"context_line":"            self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_a5d7a749","line":283,"range":{"start_line":283,"start_character":45,"end_line":283,"end_character":51},"in_reply_to":"fa31d9ce_51edd8ed","updated":"2017-02-14 10:37:54.000000000","message":"I have a mistake here, you are right there is no need for source node to delete flows\n\nThe code should be like this:\nif original_lport and lport.get_chassis() !\u003d chassis_name:\n self.open_flow_app.notify_remove_remote_port(original_lport)\nself.open_flow_app.notify_add_remote_port(lport)","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"04b19fb917e02c60ffb14b6da5e4eae21ad9ed26","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        # Here It could be either source node or other nodes, so"},{"line_number":272,"context_line":"        # get ofport from chassis."},{"line_number":273,"context_line":"        ofport \u003d self.vswitch_api.get_chassis_ofport(dest_chassis)"},{"line_number":274,"context_line":"        lport.set_external_value(\u0027ofport\u0027, ofport)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        LOG.info(_LI(\"src process migration event port \u003d %(port)s\""}],"source_content_type":"text/x-python","patch_set":43,"id":"fa31d9ce_1203c577","line":273,"range":{"start_line":273,"start_character":34,"end_line":273,"end_character":52},"updated":"2017-02-17 06:49:52.000000000","message":"I can not find this method in our df code","commit_id":"3b1ff013987eb40880000efdaf3aabccefa0979d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"24bd767a303a8ac4a5bc6125d4be40f87303c3df","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        # Here It could be either source node or other nodes, so"},{"line_number":272,"context_line":"        # get ofport from chassis."},{"line_number":273,"context_line":"        ofport \u003d self.vswitch_api.get_chassis_ofport(dest_chassis)"},{"line_number":274,"context_line":"        lport.set_external_value(\u0027ofport\u0027, ofport)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        LOG.info(_LI(\"src process migration event port \u003d %(port)s\""}],"source_content_type":"text/x-python","patch_set":43,"id":"da36d5c6_92b6fd3b","line":273,"range":{"start_line":273,"start_character":34,"end_line":273,"end_character":52},"in_reply_to":"fa31d9ce_1203c577","updated":"2017-02-18 03:03:31.000000000","message":"yes, not updated for new tunnel design","commit_id":"3b1ff013987eb40880000efdaf3aabccefa0979d"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"04b19fb917e02c60ffb14b6da5e4eae21ad9ed26","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                  \u0027chassis\u0027: dest_chassis})"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # source node and other related nodes"},{"line_number":284,"context_line":"        if original_lport and lport.get_chassis() !\u003d chassis_name:"},{"line_number":285,"context_line":"            self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"fa31d9ce_52fd3d6d","line":285,"range":{"start_line":284,"start_character":8,"end_line":285,"end_character":72},"updated":"2017-02-17 06:49:52.000000000","message":"As to the source node, the original lport should be local, not remote","commit_id":"3b1ff013987eb40880000efdaf3aabccefa0979d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"24bd767a303a8ac4a5bc6125d4be40f87303c3df","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                  \u0027chassis\u0027: dest_chassis})"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # source node and other related nodes"},{"line_number":284,"context_line":"        if original_lport and lport.get_chassis() !\u003d chassis_name:"},{"line_number":285,"context_line":"            self.open_flow_app.notify_remove_remote_port(original_lport)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        self.open_flow_app.notify_add_remote_port(lport)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"da36d5c6_f26d79cd","line":285,"range":{"start_line":284,"start_character":8,"end_line":285,"end_character":72},"in_reply_to":"fa31d9ce_52fd3d6d","updated":"2017-02-18 03:03:31.000000000","message":"here if original Port exists and chassis not equals host chassis, it should be other related host, so remote port will be deleted. Actually the local port in source node was deleted in the process of port offline.","commit_id":"3b1ff013987eb40880000efdaf3aabccefa0979d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"886002b33d7a8192148e412094c4b2bc582a0ba4","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            return False"},{"line_number":209,"context_line":"        return True"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    # update migration flows for VM migration"},{"line_number":212,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":213,"context_line":"        # This method processes the migration event sent from source node."},{"line_number":214,"context_line":"        # There are three parts for event process, source node, destination"}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_7c94ce36","line":211,"range":{"start_line":211,"start_character":0,"end_line":211,"end_character":45},"updated":"2017-02-21 01:37:12.000000000","message":"nit: This comment can be conjunct with line 213~217. And they can be organized in a triple quotation comment.","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b634061f6e4c0b186e5ade0b1b3ae49f48570233","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            return False"},{"line_number":209,"context_line":"        return True"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    # update migration flows for VM migration"},{"line_number":212,"context_line":"    def update_migration_flows(self, lport):"},{"line_number":213,"context_line":"        # This method processes the migration event sent from source node."},{"line_number":214,"context_line":"        # There are three parts for event process, source node, destination"}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_9f8254ff","line":211,"range":{"start_line":211,"start_character":0,"end_line":211,"end_character":45},"in_reply_to":"da36d5c6_7c94ce36","updated":"2017-02-21 07:03:34.000000000","message":"Done","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"886002b33d7a8192148e412094c4b2bc582a0ba4","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        lswitch \u003d self.db_store.get_lswitch(lport.get_lswitch_id())"},{"line_number":229,"context_line":"        if lswitch is not None:"},{"line_number":230,"context_line":"            network_type \u003d lswitch.get_network_type()"},{"line_number":231,"context_line":"            segment_id \u003d lswitch.get_segment_id()"},{"line_number":232,"context_line":"            physical_network \u003d lswitch.get_physical_network()"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            lport.set_external_value(\u0027network_type\u0027, network_type)"},{"line_number":235,"context_line":"            if segment_id is not None:"},{"line_number":236,"context_line":"                lport.set_external_value(\u0027segmentation_id\u0027,"},{"line_number":237,"context_line":"                                         int(segment_id))"},{"line_number":238,"context_line":"            if physical_network:"},{"line_number":239,"context_line":"                lport.set_external_value(\u0027physical_network\u0027, physical_network)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"            lport.set_external_value(\u0027local_network_id\u0027,"},{"line_number":242,"context_line":"                                     lswitch.get_unique_key())"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_1cae7285","line":242,"range":{"start_line":230,"start_character":0,"end_line":242,"end_character":62},"updated":"2017-02-21 01:37:12.000000000","message":"These code are similar to some code in _logical_port_process, and hujie has this patch to extract them out at https://review.openstack.org/#/c/433488/  Maybe you can use the method in that patch.","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b634061f6e4c0b186e5ade0b1b3ae49f48570233","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        lswitch \u003d self.db_store.get_lswitch(lport.get_lswitch_id())"},{"line_number":229,"context_line":"        if lswitch is not None:"},{"line_number":230,"context_line":"            network_type \u003d lswitch.get_network_type()"},{"line_number":231,"context_line":"            segment_id \u003d lswitch.get_segment_id()"},{"line_number":232,"context_line":"            physical_network \u003d lswitch.get_physical_network()"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            lport.set_external_value(\u0027network_type\u0027, network_type)"},{"line_number":235,"context_line":"            if segment_id is not None:"},{"line_number":236,"context_line":"                lport.set_external_value(\u0027segmentation_id\u0027,"},{"line_number":237,"context_line":"                                         int(segment_id))"},{"line_number":238,"context_line":"            if physical_network:"},{"line_number":239,"context_line":"                lport.set_external_value(\u0027physical_network\u0027, physical_network)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"            lport.set_external_value(\u0027local_network_id\u0027,"},{"line_number":242,"context_line":"                                     lswitch.get_unique_key())"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_5f637c1a","line":242,"range":{"start_line":230,"start_character":0,"end_line":242,"end_character":62},"in_reply_to":"da36d5c6_1cae7285","updated":"2017-02-21 07:03:34.000000000","message":"yes, I will change it.","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"886002b33d7a8192148e412094c4b2bc582a0ba4","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                        LOG.info(_LI(\"migrating original chassis %(original)s\""},{"line_number":318,"context_line":"                                     \"current chassis %(current)s\"),"},{"line_number":319,"context_line":"                                 {\u0027original\u0027:"},{"line_number":320,"context_line":"                                  str(original_lport.get_chassis()),"},{"line_number":321,"context_line":"                                  \u0027current\u0027: str(lport.get_chassis())})"},{"line_number":322,"context_line":"                        # TODO(jingting) Here should update flow if necessary"},{"line_number":323,"context_line":"                        # for other node"}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_5cb62add","line":320,"range":{"start_line":320,"start_character":34,"end_line":320,"end_character":38},"updated":"2017-02-21 01:37:12.000000000","message":"Is it necessary to format it to string?","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b634061f6e4c0b186e5ade0b1b3ae49f48570233","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                        LOG.info(_LI(\"migrating original chassis %(original)s\""},{"line_number":318,"context_line":"                                     \"current chassis %(current)s\"),"},{"line_number":319,"context_line":"                                 {\u0027original\u0027:"},{"line_number":320,"context_line":"                                  str(original_lport.get_chassis()),"},{"line_number":321,"context_line":"                                  \u0027current\u0027: str(lport.get_chassis())})"},{"line_number":322,"context_line":"                        # TODO(jingting) Here should update flow if necessary"},{"line_number":323,"context_line":"                        # for other node"}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_bf87180e","line":320,"range":{"start_line":320,"start_character":34,"end_line":320,"end_character":38},"in_reply_to":"da36d5c6_5cb62add","updated":"2017-02-21 07:03:34.000000000","message":"Done","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"8f430b6f67b6e7b79a6016a185f445b4e8b2fef0","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        if not self._set_lport_external_values(lport):"},{"line_number":322,"context_line":"            return"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":325,"context_line":"        if dest_chassis \u003d\u003d chassis_name:"},{"line_number":326,"context_line":"            # destination node"},{"line_number":327,"context_line":"            ofport \u003d self.vswitch_api.get_port_ofport_by_id(lport.get_id())"},{"line_number":328,"context_line":"            lport.set_external_value(\u0027ofport\u0027, ofport)"}],"source_content_type":"text/x-python","patch_set":56,"id":"5ff73747_abdc8818","line":325,"range":{"start_line":324,"start_character":0,"end_line":325,"end_character":40},"updated":"2017-04-26 02:20:24.000000000","message":"nit: you could just use self.chassis_name","commit_id":"e65b2e860526f93229463f18c5a2b67eb0f425d2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"509441495b6f2edb48253ce9a2328c74db61e2de","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        if not self._set_lport_external_values(lport):"},{"line_number":322,"context_line":"            return"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        chassis_name \u003d self.get_chassis_name()"},{"line_number":325,"context_line":"        if dest_chassis \u003d\u003d chassis_name:"},{"line_number":326,"context_line":"            # destination node"},{"line_number":327,"context_line":"            ofport \u003d self.vswitch_api.get_port_ofport_by_id(lport.get_id())"},{"line_number":328,"context_line":"            lport.set_external_value(\u0027ofport\u0027, ofport)"}],"source_content_type":"text/x-python","patch_set":56,"id":"5ff73747_bf3a3331","line":325,"range":{"start_line":324,"start_character":0,"end_line":325,"end_character":40},"in_reply_to":"5ff73747_abdc8818","updated":"2017-04-26 06:25:56.000000000","message":"Done","commit_id":"e65b2e860526f93229463f18c5a2b67eb0f425d2"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"8f430b6f67b6e7b79a6016a185f445b4e8b2fef0","unresolved":false,"context_lines":[{"line_number":428,"context_line":"                             \"original port \u003d %(original_port)s\","},{"line_number":429,"context_line":"                             {\u0027port\u0027: lport,"},{"line_number":430,"context_line":"                              \u0027original_port\u0027: original_lport})"},{"line_number":431,"context_line":"                    # update chssis"},{"line_number":432,"context_line":"                    if lport.get_chassis() !\u003d original_lport.get_chassis():"},{"line_number":433,"context_line":"                        return"},{"line_number":434,"context_line":"                    self.open_flow_app.notify_update_remote_port("}],"source_content_type":"text/x-python","patch_set":56,"id":"5ff73747_8be1ccd3","line":431,"range":{"start_line":431,"start_character":29,"end_line":431,"end_character":35},"updated":"2017-04-26 02:20:24.000000000","message":"nit: chassis","commit_id":"e65b2e860526f93229463f18c5a2b67eb0f425d2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"509441495b6f2edb48253ce9a2328c74db61e2de","unresolved":false,"context_lines":[{"line_number":428,"context_line":"                             \"original port \u003d %(original_port)s\","},{"line_number":429,"context_line":"                             {\u0027port\u0027: lport,"},{"line_number":430,"context_line":"                              \u0027original_port\u0027: original_lport})"},{"line_number":431,"context_line":"                    # update chssis"},{"line_number":432,"context_line":"                    if lport.get_chassis() !\u003d original_lport.get_chassis():"},{"line_number":433,"context_line":"                        return"},{"line_number":434,"context_line":"                    self.open_flow_app.notify_update_remote_port("}],"source_content_type":"text/x-python","patch_set":56,"id":"5ff73747_3f1863d1","line":431,"range":{"start_line":431,"start_character":29,"end_line":431,"end_character":35},"in_reply_to":"5ff73747_8be1ccd3","updated":"2017-04-26 06:25:56.000000000","message":"Done","commit_id":"e65b2e860526f93229463f18c5a2b67eb0f425d2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48ff0365e1298d3eb6691a75daa09055c14bb880","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        if migration:"},{"line_number":288,"context_line":"            dest_chassis \u003d migration[\u0027migration\u0027]"},{"line_number":289,"context_line":"        else:"},{"line_number":290,"context_line":"            LOG.warning(\"last lport deleted of this topic, do nothing %s\","},{"line_number":291,"context_line":"                        lport)"},{"line_number":292,"context_line":"            return"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3f044301_0a2c2e00","line":290,"range":{"start_line":290,"start_character":16,"end_line":290,"end_character":23},"updated":"2017-05-09 17:30:24.000000000","message":"nit: This looks like acceptable behaviour. info instead of warning?","commit_id":"7ad03d0f54c31814a235c07d0d6db2d13c663a17"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"c68a5e089646aaa563f7a6ec4569cf51f5e2252a","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        if migration:"},{"line_number":288,"context_line":"            dest_chassis \u003d migration[\u0027migration\u0027]"},{"line_number":289,"context_line":"        else:"},{"line_number":290,"context_line":"            LOG.warning(\"last lport deleted of this topic, do nothing %s\","},{"line_number":291,"context_line":"                        lport)"},{"line_number":292,"context_line":"            return"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"3f044301_5ce3eed9","line":290,"range":{"start_line":290,"start_character":16,"end_line":290,"end_character":23},"in_reply_to":"3f044301_0a2c2e00","updated":"2017-05-12 03:20:08.000000000","message":"Done","commit_id":"7ad03d0f54c31814a235c07d0d6db2d13c663a17"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48ff0365e1298d3eb6691a75daa09055c14bb880","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                                 \"current chassis %(current)s\","},{"line_number":364,"context_line":"                                 {\u0027original\u0027:"},{"line_number":365,"context_line":"                                  original_lport.get_chassis(),"},{"line_number":366,"context_line":"                                  \u0027current\u0027: str(lport.get_chassis())})"},{"line_number":367,"context_line":"                        self.nb_api.delete_lport_migration(lport.get_id())"},{"line_number":368,"context_line":"                        return"},{"line_number":369,"context_line":"                    self.open_flow_app.notify_update_local_port(lport,"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f044301_8a283ee2","line":366,"range":{"start_line":366,"start_character":45,"end_line":366,"end_character":49},"updated":"2017-05-09 17:30:24.000000000","message":"nit: Not needed","commit_id":"7ad03d0f54c31814a235c07d0d6db2d13c663a17"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"c68a5e089646aaa563f7a6ec4569cf51f5e2252a","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                                 \"current chassis %(current)s\","},{"line_number":364,"context_line":"                                 {\u0027original\u0027:"},{"line_number":365,"context_line":"                                  original_lport.get_chassis(),"},{"line_number":366,"context_line":"                                  \u0027current\u0027: str(lport.get_chassis())})"},{"line_number":367,"context_line":"                        self.nb_api.delete_lport_migration(lport.get_id())"},{"line_number":368,"context_line":"                        return"},{"line_number":369,"context_line":"                    self.open_flow_app.notify_update_local_port(lport,"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f044301_3ce4a2df","line":366,"range":{"start_line":366,"start_character":45,"end_line":366,"end_character":49},"in_reply_to":"3f044301_8a283ee2","updated":"2017-05-12 03:20:08.000000000","message":"Done","commit_id":"7ad03d0f54c31814a235c07d0d6db2d13c663a17"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48ff0365e1298d3eb6691a75daa09055c14bb880","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                             {\u0027port\u0027: lport,"},{"line_number":402,"context_line":"                              \u0027original_port\u0027: original_lport})"},{"line_number":403,"context_line":"                    # update chassis"},{"line_number":404,"context_line":"                    if lport.get_chassis() !\u003d original_lport.get_chassis():"},{"line_number":405,"context_line":"                        return"},{"line_number":406,"context_line":"                    self.open_flow_app.notify_update_remote_port("},{"line_number":407,"context_line":"                        lport, original_lport)"},{"line_number":408,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f044301_eaca2218","line":405,"range":{"start_line":404,"start_character":0,"end_line":405,"end_character":30},"updated":"2017-05-09 17:30:24.000000000","message":"Don\u0027t you need to inform the tunneling_app that the peer_vtep_address changed?","commit_id":"7ad03d0f54c31814a235c07d0d6db2d13c663a17"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"c68a5e089646aaa563f7a6ec4569cf51f5e2252a","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                             {\u0027port\u0027: lport,"},{"line_number":402,"context_line":"                              \u0027original_port\u0027: original_lport})"},{"line_number":403,"context_line":"                    # update chassis"},{"line_number":404,"context_line":"                    if lport.get_chassis() !\u003d original_lport.get_chassis():"},{"line_number":405,"context_line":"                        return"},{"line_number":406,"context_line":"                    self.open_flow_app.notify_update_remote_port("},{"line_number":407,"context_line":"                        lport, original_lport)"},{"line_number":408,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f044301_bcd792ee","line":405,"range":{"start_line":404,"start_character":0,"end_line":405,"end_character":30},"in_reply_to":"3f044301_eaca2218","updated":"2017-05-12 03:20:08.000000000","message":"In method update_migration_flows，\nnotify_remove_remote_port and notify_add_remote_port will ensure the peer_vtep_address changed as tunneling_app will get notified.","commit_id":"7ad03d0f54c31814a235c07d0d6db2d13c663a17"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"48ff0365e1298d3eb6691a75daa09055c14bb880","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        if original_lport is None:"},{"line_number":415,"context_line":"            self._notify_active_ports_updated_when_lport_created(lport)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def _set_lport_external_values(self, lport):"},{"line_number":418,"context_line":"        lswitch \u003d self.db_store2.get_one("},{"line_number":419,"context_line":"            l2.LogicalSwitch(id\u003dlport.get_lswitch_id()))"},{"line_number":420,"context_line":"        if not lswitch:"}],"source_content_type":"text/x-python","patch_set":60,"id":"3f044301_8a3f1e24","line":417,"range":{"start_line":417,"start_character":0,"end_line":417,"end_character":48},"updated":"2017-05-09 17:30:24.000000000","message":"+1","commit_id":"7ad03d0f54c31814a235c07d0d6db2d13c663a17"}],"dragonflow/controller/topology.py":[{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"fba28c910f0b86ce2833bf6982a0dae0fa6e9202","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                \u0027Failed to process logical port offline event %s\u0027) % lport_id)"},{"line_number":227,"context_line":"        finally:"},{"line_number":228,"context_line":"            state \u003d self.nb_api.get_lport_state(lport_id)"},{"line_number":229,"context_line":"            if len(state[\u0027state\u0027]) \u003e 0:"},{"line_number":230,"context_line":"                self.nb_api.notify_migration_event(lport_id, lport)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"            # publish vm port down event."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_f6fa4774","line":229,"range":{"start_line":229,"start_character":19,"end_line":229,"end_character":32},"updated":"2016-11-10 06:40:26.000000000","message":"if state is None, exception...","commit_id":"2bccfc3a1bc0d84cb2d62e7c3ef8a15b68707042"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0765ba1cc09ad99a1f6eb8aaacfb3c86648b0748","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                \u0027Failed to process logical port offline event %s\u0027) % lport_id)"},{"line_number":227,"context_line":"        finally:"},{"line_number":228,"context_line":"            state \u003d self.nb_api.get_lport_state(lport_id)"},{"line_number":229,"context_line":"            if state and len(state[\u0027state\u0027]) \u003e 0:"},{"line_number":230,"context_line":"                self.nb_api.notify_migration_event(lport_id, lport)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"            # publish vm port down event."}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_34960995","line":229,"range":{"start_line":229,"start_character":25,"end_line":229,"end_character":48},"updated":"2016-11-23 04:50:00.000000000","message":"use state.get(\u0027state\u0027) instead of len(xxx)","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"ad679c810c0e98bd5dab4bd3caca2b64301a9bb4","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        finally:"},{"line_number":236,"context_line":"            migration \u003d self.nb_api.get_lport_migration(lport_id)"},{"line_number":237,"context_line":"            if migration and migration.get(\u0027migration\u0027):"},{"line_number":238,"context_line":"                self.nb_api.notify_migration_event(lport_id, lport)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"            # publish vm port down event."},{"line_number":241,"context_line":"            if cfg.CONF.df.enable_port_status_notifier:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_f09b0716","line":238,"range":{"start_line":238,"start_character":16,"end_line":238,"end_character":67},"updated":"2016-12-06 07:01:58.000000000","message":"As you have know the destination chassis for the migrated lport, why not publish the lport which contains the destination chassis, therefore other nodes could treat it as a normal lport event to update the corresponding flows.","commit_id":"b1643111430d0185b8c3609eda28c1fa526532f7"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        chassis \u003d lport.get_chassis()"},{"line_number":195,"context_line":"        # check if migration occurs"},{"line_number":196,"context_line":"        if chassis !\u003d self.chassis_name:"},{"line_number":197,"context_line":"            self.nb_api.set_lport_migration(lport_id, self.chassis_name)"},{"line_number":198,"context_line":"            return"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        cached_lport \u003d self.db_store.get_port(lport_id)"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_ee7ee917","line":197,"range":{"start_line":197,"start_character":24,"end_line":197,"end_character":43},"updated":"2017-02-14 07:31:47.000000000","message":"Print some log here. It\u0027s a important event;","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        chassis \u003d lport.get_chassis()"},{"line_number":195,"context_line":"        # check if migration occurs"},{"line_number":196,"context_line":"        if chassis !\u003d self.chassis_name:"},{"line_number":197,"context_line":"            self.nb_api.set_lport_migration(lport_id, self.chassis_name)"},{"line_number":198,"context_line":"            return"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        cached_lport \u003d self.db_store.get_port(lport_id)"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_c5565bcd","line":197,"range":{"start_line":197,"start_character":24,"end_line":197,"end_character":43},"in_reply_to":"fa31d9ce_ee7ee917","updated":"2017-02-14 10:37:54.000000000","message":"Done","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        finally:"},{"line_number":244,"context_line":"            migration \u003d self.nb_api.get_lport_migration(lport_id)"},{"line_number":245,"context_line":"            if migration and migration.get(\u0027migration\u0027):"},{"line_number":246,"context_line":"                self.nb_api.notify_migration_event(lport_id, lport)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            # publish vm port down event."},{"line_number":249,"context_line":"            if cfg.CONF.df.enable_port_status_notifier:"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_ae331161","line":246,"range":{"start_line":246,"start_character":28,"end_line":246,"end_character":50},"updated":"2017-02-14 07:31:47.000000000","message":"log something here too.","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        finally:"},{"line_number":244,"context_line":"            migration \u003d self.nb_api.get_lport_migration(lport_id)"},{"line_number":245,"context_line":"            if migration and migration.get(\u0027migration\u0027):"},{"line_number":246,"context_line":"                self.nb_api.notify_migration_event(lport_id, lport)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            # publish vm port down event."},{"line_number":249,"context_line":"            if cfg.CONF.df.enable_port_status_notifier:"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_65684f88","line":246,"range":{"start_line":246,"start_character":28,"end_line":246,"end_character":50},"in_reply_to":"fa31d9ce_ae331161","updated":"2017-02-14 10:37:54.000000000","message":"Done","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            migration \u003d self.nb_api.get_lport_migration(lport_id)"},{"line_number":245,"context_line":"            if migration and migration.get(\u0027migration\u0027):"},{"line_number":246,"context_line":"                self.nb_api.notify_migration_event(lport_id, lport)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            # publish vm port down event."},{"line_number":249,"context_line":"            if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":250,"context_line":"                self.port_status_reporter.notify_port_status("}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_ce8685da","line":247,"updated":"2017-02-14 07:31:47.000000000","message":"do we need to return here?","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            migration \u003d self.nb_api.get_lport_migration(lport_id)"},{"line_number":245,"context_line":"            if migration and migration.get(\u0027migration\u0027):"},{"line_number":246,"context_line":"                self.nb_api.notify_migration_event(lport_id, lport)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            # publish vm port down event."},{"line_number":249,"context_line":"            if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":250,"context_line":"                self.port_status_reporter.notify_port_status("}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_257c971e","line":247,"in_reply_to":"fa31d9ce_ce8685da","updated":"2017-02-14 10:37:54.000000000","message":"we can\u0027t return here, because the latter is needed in normal port offline precedure.","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"8f430b6f67b6e7b79a6016a185f445b4e8b2fef0","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        # check if migration occurs"},{"line_number":194,"context_line":"        if chassis !\u003d self.chassis_name:"},{"line_number":195,"context_line":"            device_owner \u003d lport.get_device_owner()"},{"line_number":196,"context_line":"            if (device_owner !\u003d const.DEVICE_OWNER_ROUTER_INTF and"},{"line_number":197,"context_line":"                    device_owner !\u003d const.DEVICE_OWNER_ROUTER_DHCP):"},{"line_number":198,"context_line":"                LOG.info(\"Prepare migrate lport %(lport)s to %(chassis)s\","},{"line_number":199,"context_line":"                         {\"lport\": lport_id, \"chassis\": chassis})"},{"line_number":200,"context_line":"                self.nb_api.set_lport_migration(lport_id, self.chassis_name)"}],"source_content_type":"text/x-python","patch_set":56,"id":"5ff73747_4bebc4af","line":197,"range":{"start_line":196,"start_character":0,"end_line":197,"end_character":68},"updated":"2017-04-26 02:20:24.000000000","message":"Can this be changed to \nif DEVICE_OWNER_COMPUTE_PREFIX in device_owner:","commit_id":"e65b2e860526f93229463f18c5a2b67eb0f425d2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"509441495b6f2edb48253ce9a2328c74db61e2de","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        # check if migration occurs"},{"line_number":194,"context_line":"        if chassis !\u003d self.chassis_name:"},{"line_number":195,"context_line":"            device_owner \u003d lport.get_device_owner()"},{"line_number":196,"context_line":"            if (device_owner !\u003d const.DEVICE_OWNER_ROUTER_INTF and"},{"line_number":197,"context_line":"                    device_owner !\u003d const.DEVICE_OWNER_ROUTER_DHCP):"},{"line_number":198,"context_line":"                LOG.info(\"Prepare migrate lport %(lport)s to %(chassis)s\","},{"line_number":199,"context_line":"                         {\"lport\": lport_id, \"chassis\": chassis})"},{"line_number":200,"context_line":"                self.nb_api.set_lport_migration(lport_id, self.chassis_name)"}],"source_content_type":"text/x-python","patch_set":56,"id":"5ff73747_ff38bb3d","line":197,"range":{"start_line":196,"start_character":0,"end_line":197,"end_character":68},"in_reply_to":"5ff73747_4bebc4af","updated":"2017-04-26 06:25:56.000000000","message":"Done","commit_id":"e65b2e860526f93229463f18c5a2b67eb0f425d2"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"3a4e352b9136ce9d48cb3e654b7fc01dc991cf4d","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        elif \u0027lport_state\u0027 \u003d\u003d table:"},{"line_number":278,"context_line":"            if action \u003d\u003d \u0027create\u0027:"},{"line_number":279,"context_line":"                lport \u003d LogicalPort(value)"},{"line_number":280,"context_line":"                self.controller.update_migrating_flows(lport)"},{"line_number":281,"context_line":"        elif \u0027log\u0027 \u003d\u003d action:"},{"line_number":282,"context_line":"            message \u003d _LI("},{"line_number":283,"context_line":"                \u0027Log event (Info): \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_666a0483","line":280,"range":{"start_line":280,"start_character":32,"end_line":280,"end_character":54},"updated":"2016-11-10 09:02:09.000000000","message":"the definatino is update_migration_flows","commit_id":"2bccfc3a1bc0d84cb2d62e7c3ef8a15b68707042"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d17ff1ddd48b80788eca60d9dd930cf3b60ae6c2","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        self._send_db_change_event(\u0027lswitch\u0027, id, \u0027delete\u0027, id, topic)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    # lport process for VM migration"},{"line_number":495,"context_line":"    def set_lport_state(self, port_id, state):"},{"line_number":496,"context_line":"        port_state \u003d {\u0027state\u0027: state}"},{"line_number":497,"context_line":"        state_json \u003d jsonutils.dumps(port_state)"},{"line_number":498,"context_line":"        self.driver.create_key(\u0027lport_state\u0027, port_id, state_json)"},{"line_number":499,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_ba4e70bf","line":496,"range":{"start_line":495,"start_character":0,"end_line":496,"end_character":37},"updated":"2016-11-15 09:39:18.000000000","message":"\u0027state\u0027 is confusing, I prefer to rename it, e.g: migration, or something else.","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b641c07e3e3939555b377c089a866689a6d1d299","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        self._send_db_change_event(\u0027lswitch\u0027, id, \u0027delete\u0027, id, topic)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    # lport process for VM migration"},{"line_number":495,"context_line":"    def set_lport_state(self, port_id, state):"},{"line_number":496,"context_line":"        port_state \u003d {\u0027state\u0027: state}"},{"line_number":497,"context_line":"        state_json \u003d jsonutils.dumps(port_state)"},{"line_number":498,"context_line":"        self.driver.create_key(\u0027lport_state\u0027, port_id, state_json)"},{"line_number":499,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_5eee108c","line":496,"range":{"start_line":495,"start_character":0,"end_line":496,"end_character":37},"in_reply_to":"7a77a97e_ba4e70bf","updated":"2016-11-15 21:14:03.000000000","message":"+1. From calling code, it looks like it holds the port\u0027s chassis.","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b641c07e3e3939555b377c089a866689a6d1d299","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    def set_lport_state(self, port_id, state):"},{"line_number":496,"context_line":"        port_state \u003d {\u0027state\u0027: state}"},{"line_number":497,"context_line":"        state_json \u003d jsonutils.dumps(port_state)"},{"line_number":498,"context_line":"        self.driver.create_key(\u0027lport_state\u0027, port_id, state_json)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def get_lport_state(self, port_id):"},{"line_number":501,"context_line":"        state_json \u003d self.driver.get_key(\u0027lport_state\u0027, port_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_de02203e","line":498,"updated":"2016-11-15 21:14:03.000000000","message":"Can set_lport_state be called twice in a row, without clear_lport_state in between?","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d17ff1ddd48b80788eca60d9dd930cf3b60ae6c2","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        self.driver.delete_key(\u0027lport_state\u0027, port_id)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"    def notify_migration_event(self, port_id, lport):"},{"line_number":509,"context_line":"        lport_json \u003d jsonutils.dumps(lport.lport)"},{"line_number":510,"context_line":"        self._send_db_change_event(\u0027lport_state\u0027, port_id, \u0027create\u0027,"},{"line_number":511,"context_line":"                                   lport_json, topic\u003dlport.lport[\u0027topic\u0027])"},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_b54be158","line":509,"range":{"start_line":509,"start_character":8,"end_line":509,"end_character":49},"updated":"2016-11-15 09:39:18.000000000","message":"It is no necessary to send the whole lport object, just send port_id and the reciever can get it from df-db","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"90f26b9c1e5430a7fec7502f948c6a1331044cdd","unresolved":false,"context_lines":[{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def notify_migration_event(self, port_id, lport):"},{"line_number":511,"context_line":"        lport_json \u003d jsonutils.dumps(lport.lport)"},{"line_number":512,"context_line":"        self._send_db_change_event(\u0027lport_migration\u0027, port_id, \u0027create\u0027,"},{"line_number":513,"context_line":"                                   lport_json, topic\u003dlport.lport[\u0027topic\u0027])"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def create_lport(self, id, lswitch_id, topic, **columns):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_43ce705b","line":512,"range":{"start_line":512,"start_character":8,"end_line":512,"end_character":34},"updated":"2016-12-01 09:38:46.000000000","message":"If self.use_pubsub is False, it will do nothing, so without the pub/sub mechenism, live migration will not work. Is this what you design?","commit_id":"3e28e5fa145c8f9eb6f95d052d53a0f1bd23e76c"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"3947a37d07c4819ec20133d41088217026203349","unresolved":false,"context_lines":[{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def notify_migration_event(self, port_id, lport):"},{"line_number":511,"context_line":"        lport_json \u003d jsonutils.dumps(lport.lport)"},{"line_number":512,"context_line":"        self._send_db_change_event(\u0027lport_migration\u0027, port_id, \u0027create\u0027,"},{"line_number":513,"context_line":"                                   lport_json, topic\u003dlport.lport[\u0027topic\u0027])"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def create_lport(self, id, lswitch_id, topic, **columns):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_8e7eefac","line":512,"range":{"start_line":512,"start_character":8,"end_line":512,"end_character":34},"in_reply_to":"3a71b18c_43ce705b","updated":"2016-12-01 12:19:09.000000000","message":"I think so, but it\u0027s low probability in real time scenario.","commit_id":"3e28e5fa145c8f9eb6f95d052d53a0f1bd23e76c"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3bde6978c31a6aeb779261a1c2cd79f8d986d57e","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":551,"context_line":"        if migration_json:"},{"line_number":552,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":553,"context_line":"        return port_migration"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def clear_lport_migration(self, port_id):"},{"line_number":556,"context_line":"        self.driver.delete_key(\u0027lport_migration\u0027, port_id)"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_cc6a1cb3","line":553,"range":{"start_line":553,"start_character":0,"end_line":553,"end_character":29},"updated":"2017-01-05 02:38:45.000000000","message":"If migration_json is None, you will get an undefined error here.","commit_id":"916c3e9a2f266237c47bdbcdce90e9c65955b410"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9ccb8fc0ab33c6e7de82396522d4cb7a32b0c228","unresolved":false,"context_lines":[{"line_number":515,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":516,"context_line":"        if migration_json:"},{"line_number":517,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":518,"context_line":"        return port_migration"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def clear_lport_migration(self, port_id):"},{"line_number":521,"context_line":"        self.driver.delete_key(\u0027lport_migration\u0027, port_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5201f7_efa04ff6","line":518,"range":{"start_line":518,"start_character":0,"end_line":518,"end_character":29},"updated":"2017-01-08 14:48:59.000000000","message":"If the key doesn\u0027t exist, this code will raise an error. \nMaybe initialize port_migration to None before \u0027if\u0027 block?","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1c0e8c6cb73e6fdc0edd9a36b216d4d05893f512","unresolved":false,"context_lines":[{"line_number":515,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":516,"context_line":"        if migration_json:"},{"line_number":517,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":518,"context_line":"        return port_migration"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def clear_lport_migration(self, port_id):"},{"line_number":521,"context_line":"        self.driver.delete_key(\u0027lport_migration\u0027, port_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa31d9ce_ca16f8a6","line":518,"range":{"start_line":518,"start_character":0,"end_line":518,"end_character":29},"in_reply_to":"ba5201f7_efa04ff6","updated":"2017-02-13 09:06:42.000000000","message":"Done","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9ccb8fc0ab33c6e7de82396522d4cb7a32b0c228","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":518,"context_line":"        return port_migration"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def clear_lport_migration(self, port_id):"},{"line_number":521,"context_line":"        self.driver.delete_key(\u0027lport_migration\u0027, port_id)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def notify_migration_event(self, port_id, lport):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5201f7_4fb23b4d","line":520,"range":{"start_line":520,"start_character":8,"end_line":520,"end_character":13},"updated":"2017-01-08 14:48:59.000000000","message":"Please rename to \u0027delete_lport_migration\u0027, to maintain compatibility with the rest of this module.","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1c0e8c6cb73e6fdc0edd9a36b216d4d05893f512","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":518,"context_line":"        return port_migration"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def clear_lport_migration(self, port_id):"},{"line_number":521,"context_line":"        self.driver.delete_key(\u0027lport_migration\u0027, port_id)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def notify_migration_event(self, port_id, lport):"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa31d9ce_6a20acf8","line":520,"range":{"start_line":520,"start_character":8,"end_line":520,"end_character":13},"in_reply_to":"ba5201f7_4fb23b4d","updated":"2017-02-13 09:06:42.000000000","message":"Done","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9ccb8fc0ab33c6e7de82396522d4cb7a32b0c228","unresolved":false,"context_lines":[{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def notify_migration_event(self, port_id, lport):"},{"line_number":524,"context_line":"        lport_json \u003d jsonutils.dumps(lport.lport)"},{"line_number":525,"context_line":"        self._send_db_change_event(\u0027lport_migration\u0027, port_id, \u0027create\u0027,"},{"line_number":526,"context_line":"                                   lport_json, topic\u003dlport.lport[\u0027topic\u0027])"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def create_lport(self, id, lswitch_id, topic, **columns):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5201f7_ef876f5e","line":525,"range":{"start_line":525,"start_character":64,"end_line":525,"end_character":70},"updated":"2017-01-08 14:48:59.000000000","message":"nit: This isn\u0027t a \u0027create\u0027 event per se. Maybe rename the event to \u0027migrate\u0027?","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1c0e8c6cb73e6fdc0edd9a36b216d4d05893f512","unresolved":false,"context_lines":[{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def notify_migration_event(self, port_id, lport):"},{"line_number":524,"context_line":"        lport_json \u003d jsonutils.dumps(lport.lport)"},{"line_number":525,"context_line":"        self._send_db_change_event(\u0027lport_migration\u0027, port_id, \u0027create\u0027,"},{"line_number":526,"context_line":"                                   lport_json, topic\u003dlport.lport[\u0027topic\u0027])"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def create_lport(self, id, lswitch_id, topic, **columns):"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa31d9ce_11d555b8","line":525,"range":{"start_line":525,"start_character":64,"end_line":525,"end_character":70},"in_reply_to":"ba5201f7_ef876f5e","updated":"2017-02-13 09:06:42.000000000","message":"sounds good","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    # lport process for VM migration"},{"line_number":510,"context_line":"    def set_lport_migration(self, port_id, chassis):"},{"line_number":511,"context_line":"        port_migration \u003d {\u0027migration\u0027: chassis}"},{"line_number":512,"context_line":"        migration_json \u003d jsonutils.dumps(port_migration)"},{"line_number":513,"context_line":"        self.driver.create_key(\u0027lport_migration\u0027, port_id, migration_json)"},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_f1432c40","line":511,"range":{"start_line":511,"start_character":27,"end_line":511,"end_character":36},"updated":"2017-02-14 07:31:47.000000000","message":"considering a more specific name, for example, dest_chassis?","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        self.driver.create_key(\u0027lport_migration\u0027, port_id, migration_json)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def get_lport_migration(self, port_id):"},{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_aeaeb17e","line":516,"range":{"start_line":516,"start_character":8,"end_line":516,"end_character":22},"updated":"2017-02-14 07:31:47.000000000","message":"This statement is useless,right?","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"46351fc2585d2a4ffe39380afe94085b8184a866","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        self.driver.create_key(\u0027lport_migration\u0027, port_id, migration_json)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def get_lport_migration(self, port_id):"},{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"da36d5c6_b225c1af","line":516,"range":{"start_line":516,"start_character":8,"end_line":516,"end_character":22},"in_reply_to":"fa31d9ce_06d2ab34","updated":"2017-02-18 03:04:00.000000000","message":"Done","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"97291b9aa7266414fff3bddad029a133e1cad40f","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        self.driver.create_key(\u0027lport_migration\u0027, port_id, migration_json)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def get_lport_migration(self, port_id):"},{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_06d2ab34","line":516,"range":{"start_line":516,"start_character":8,"end_line":516,"end_character":22},"in_reply_to":"fa31d9ce_2589f7c9","updated":"2017-02-17 03:10:35.000000000","message":"Check it again","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        self.driver.create_key(\u0027lport_migration\u0027, port_id, migration_json)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def get_lport_migration(self, port_id):"},{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_2589f7c9","line":516,"range":{"start_line":516,"start_character":8,"end_line":516,"end_character":22},"in_reply_to":"fa31d9ce_aeaeb17e","updated":"2017-02-14 10:37:54.000000000","message":"the code below could not get migration_json mostly, so we need to init migration_json","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b867edd993c411603624ca4785290c767f183cf3","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"},{"line_number":520,"context_line":"        if migration_json:"},{"line_number":521,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":522,"context_line":"        return port_migration"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_2edac117","line":519,"range":{"start_line":519,"start_character":8,"end_line":519,"end_character":22},"updated":"2017-02-14 07:31:47.000000000","message":"This statement is useless too. (Move the return state inside to the \"if\" block.","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"46351fc2585d2a4ffe39380afe94085b8184a866","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"},{"line_number":520,"context_line":"        if migration_json:"},{"line_number":521,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":522,"context_line":"        return port_migration"}],"source_content_type":"text/x-python","patch_set":34,"id":"da36d5c6_f21f3959","line":519,"range":{"start_line":519,"start_character":8,"end_line":519,"end_character":22},"in_reply_to":"fa31d9ce_26a5efb4","updated":"2017-02-18 03:04:00.000000000","message":"Done","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"f3956ac6edc726a8d844d51396b0784ce34ba443","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"},{"line_number":520,"context_line":"        if migration_json:"},{"line_number":521,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":522,"context_line":"        return port_migration"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_c81e725e","line":519,"range":{"start_line":519,"start_character":8,"end_line":519,"end_character":22},"in_reply_to":"fa31d9ce_2edac117","updated":"2017-02-14 10:37:54.000000000","message":"I think we must return something so we should keep return outside if block.","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"97291b9aa7266414fff3bddad029a133e1cad40f","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        migration_json \u003d {}"},{"line_number":517,"context_line":"        migration_json \u003d self.driver.get_key(\u0027lport_migration\u0027, port_id)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        port_migration \u003d None"},{"line_number":520,"context_line":"        if migration_json:"},{"line_number":521,"context_line":"            port_migration \u003d jsonutils.loads(migration_json)"},{"line_number":522,"context_line":"        return port_migration"}],"source_content_type":"text/x-python","patch_set":34,"id":"fa31d9ce_26a5efb4","line":519,"range":{"start_line":519,"start_character":8,"end_line":519,"end_character":22},"in_reply_to":"fa31d9ce_c81e725e","updated":"2017-02-17 03:10:35.000000000","message":"check it again","commit_id":"9a812afbde4def9dc47dc8efcfbf790dd625560a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"886002b33d7a8192148e412094c4b2bc582a0ba4","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                ovs_port \u003d db_models.OvsPort(value)"},{"line_number":286,"context_line":"                self.controller.ovs_port_deleted(ovs_port)"},{"line_number":287,"context_line":"        # Added lport migration for VM migration flag"},{"line_number":288,"context_line":"        elif \u0027lport_migration\u0027 \u003d\u003d table:"},{"line_number":289,"context_line":"            if action \u003d\u003d \u0027migrate\u0027:"},{"line_number":290,"context_line":"                lport \u003d db_models.LogicalPort(value)"},{"line_number":291,"context_line":"                self.controller.update_migrating_flows(lport)"},{"line_number":292,"context_line":"        elif \u0027log\u0027 \u003d\u003d action:"},{"line_number":293,"context_line":"            message \u003d _LI("},{"line_number":294,"context_line":"                \u0027Log event (Info): \u0027"}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_3cd97622","line":291,"range":{"start_line":288,"start_character":0,"end_line":291,"end_character":61},"updated":"2017-02-21 01:37:12.000000000","message":"Instead of creating a new table, is it possible to put the migration data inside lport. For example, create a field \"migration\" in lport. And when the lport is updated with migration data, we know it is in middle of migration.","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b634061f6e4c0b186e5ade0b1b3ae49f48570233","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                ovs_port \u003d db_models.OvsPort(value)"},{"line_number":286,"context_line":"                self.controller.ovs_port_deleted(ovs_port)"},{"line_number":287,"context_line":"        # Added lport migration for VM migration flag"},{"line_number":288,"context_line":"        elif \u0027lport_migration\u0027 \u003d\u003d table:"},{"line_number":289,"context_line":"            if action \u003d\u003d \u0027migrate\u0027:"},{"line_number":290,"context_line":"                lport \u003d db_models.LogicalPort(value)"},{"line_number":291,"context_line":"                self.controller.update_migrating_flows(lport)"},{"line_number":292,"context_line":"        elif \u0027log\u0027 \u003d\u003d action:"},{"line_number":293,"context_line":"            message \u003d _LI("},{"line_number":294,"context_line":"                \u0027Log event (Info): \u0027"}],"source_content_type":"text/x-python","patch_set":45,"id":"da36d5c6_df6dac33","line":291,"range":{"start_line":288,"start_character":0,"end_line":291,"end_character":61},"in_reply_to":"da36d5c6_3cd97622","updated":"2017-02-21 07:03:34.000000000","message":"I think we can\u0027t make migration stored in lport, because the  flows update is invoked by event sent from port offline in source node. So it would be better to keep a new table to insure this event can be processed in time","commit_id":"86e6d2239a9e869f7ba4627d05ab619712093358"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"f9da2366c18c3bd7b8c9eb0645017ed937958fba","unresolved":false,"context_lines":[{"line_number":33,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"DB_ACTION_LIST \u003d [\u0027create\u0027, \u0027set\u0027, \u0027delete\u0027, \u0027log\u0027,"},{"line_number":37,"context_line":"                  \u0027sync\u0027, \u0027sync_started\u0027, \u0027sync_finished\u0027, \u0027dbrestart\u0027,"},{"line_number":38,"context_line":"                  \u0027db_sync\u0027]"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"7ffa3b31_9d8a8a67","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":14},"updated":"2017-04-21 02:06:37.000000000","message":"You add a new \u0027migrate\u0027 action. If it is not in this list, it will fail.","commit_id":"49a15d6803e524f6145a4f57bf26d82d07280106"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"cb482aadf75d03d93a5cb65fe0ab3617afd34b39","unresolved":false,"context_lines":[{"line_number":33,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"DB_ACTION_LIST \u003d [\u0027create\u0027, \u0027set\u0027, \u0027delete\u0027, \u0027log\u0027,"},{"line_number":37,"context_line":"                  \u0027sync\u0027, \u0027sync_started\u0027, \u0027sync_finished\u0027, \u0027dbrestart\u0027,"},{"line_number":38,"context_line":"                  \u0027db_sync\u0027]"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"7ffa3b31_dd4ed236","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":14},"in_reply_to":"7ffa3b31_9d8a8a67","updated":"2017-04-21 02:19:37.000000000","message":"Done","commit_id":"49a15d6803e524f6145a4f57bf26d82d07280106"}],"dragonflow/tests/unit/test_controller.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"6a23b0bfe3a3aca86afa05a2ea28db923787366c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestDfController(tests_base.BaseTestCase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        super(TestDfController, self).setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_3236e052","line":21,"range":{"start_line":21,"start_character":34,"end_line":21,"end_character":46},"updated":"2016-11-16 01:31:48.000000000","message":"You should inherit DFAppTestBase","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b641c07e3e3939555b377c089a866689a6d1d299","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.controller.vswitch_api.get_chassis_ofport.return_value \u003d 3"},{"line_number":60,"context_line":"        self.controller.vswitch_api.get_port_ofport_by_id.retrun_value \u003d 2"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.controller.update_migration_flows(self.lport1)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_de7780d2","line":62,"updated":"2016-11-15 21:14:03.000000000","message":"I don\u0027t understand what is being tested here. There are no asserts. Could you also verify the method does what it\u0027s expected to do? e.g. that it notifies applications?","commit_id":"3dfc163ea631c4d429a6667eea61c555b8dd3090"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"90f26b9c1e5430a7fec7502f948c6a1331044cdd","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from dragonflow.controller.df_local_controller import DfLocalController"},{"line_number":17,"context_line":"from dragonflow.db.api_nb import LogicalPort, LogicalSwitch"},{"line_number":18,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_83e2489e","line":17,"range":{"start_line":17,"start_character":33,"end_line":17,"end_character":59},"updated":"2016-12-01 09:38:46.000000000","message":"have been moved to models.py","commit_id":"3e28e5fa145c8f9eb6f95d052d53a0f1bd23e76c"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"90f26b9c1e5430a7fec7502f948c6a1331044cdd","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from dragonflow.controller.df_local_controller import DfLocalController"},{"line_number":17,"context_line":"from dragonflow.db.api_nb import LogicalPort, LogicalSwitch"},{"line_number":18,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestDfController(test_app_base.DFAppTestBase):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_a37824fa","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":47},"updated":"2016-12-01 09:38:46.000000000","message":"not used","commit_id":"3e28e5fa145c8f9eb6f95d052d53a0f1bd23e76c"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"90f26b9c1e5430a7fec7502f948c6a1331044cdd","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        super(TestDfController, self).setUp()"},{"line_number":25,"context_line":"        self.controller \u003d DfLocalController(\u0027chassis1\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        self.controller.db_store \u003d mock.Mock()"},{"line_number":28,"context_line":"        self.controller.nb_api \u003d mock.Mock()"},{"line_number":29,"context_line":"        self.controller.vswitch_api \u003d mock.Mock()"},{"line_number":30,"context_line":"        self.controller.open_flow_app \u003d mock.Mock()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        self.lport1_value \u003d \u0027\u0027\u0027"},{"line_number":33,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_63aa8c1b","line":30,"range":{"start_line":25,"start_character":0,"end_line":30,"end_character":51},"updated":"2016-12-01 09:38:46.000000000","message":"these have been mocked in DFAppTestBase","commit_id":"3e28e5fa145c8f9eb6f95d052d53a0f1bd23e76c"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"ad679c810c0e98bd5dab4bd3caca2b64301a9bb4","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import mock"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from dragonflow.controller.df_local_controller import DfLocalController"},{"line_number":16,"context_line":"from dragonflow.db.models import LogicalPort, LogicalSwitch"},{"line_number":17,"context_line":"from dragonflow.tests.unit import test_app_base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_30701fdc","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":59},"updated":"2016-12-06 07:01:58.000000000","message":"Do not import inner class directly","commit_id":"b1643111430d0185b8c3609eda28c1fa526532f7"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"175a0dd5f5209e489d1f00afc17ada1bccaffe35","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import mock"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from dragonflow.controller.df_local_controller import DfLocalController"},{"line_number":16,"context_line":"from dragonflow.db.models import LogicalPort, LogicalSwitch"},{"line_number":17,"context_line":"from dragonflow.tests.unit import test_app_base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_2332daa7","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":59},"in_reply_to":"3a71b18c_30701fdc","updated":"2016-12-21 04:40:07.000000000","message":"Done","commit_id":"b1643111430d0185b8c3609eda28c1fa526532f7"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"ad679c810c0e98bd5dab4bd3caca2b64301a9bb4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.lport1 \u003d LogicalPort(self.lport1_value)"},{"line_number":52,"context_line":"        self.lswitch1 \u003d LogicalSwitch(self.lswitch1_value)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_update_migration_flows(self):"},{"line_number":55,"context_line":"        self.controller.nb_api.get_lport_migration.return_value \u003d \\"},{"line_number":56,"context_line":"            {\u0027migration\u0027: \u0027chassis1\u0027}"},{"line_number":57,"context_line":"        self.controller.db_store.get_lswitch.return_value \u003d \\"},{"line_number":58,"context_line":"            self.lswitch1"},{"line_number":59,"context_line":"        self.controller.vswitch_api.get_chassis_ofport.return_value \u003d 3"},{"line_number":60,"context_line":"        self.controller.vswitch_api.get_port_ofport_by_id.retrun_value \u003d 2"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.controller.update_migration_flows(self.lport1)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_10424368","line":62,"range":{"start_line":54,"start_character":4,"end_line":62,"end_character":59},"updated":"2016-12-06 07:01:58.000000000","message":"the test seems test nothing","commit_id":"b1643111430d0185b8c3609eda28c1fa526532f7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ede48d3b91ae5f4c61556c42ce51f31f46d03ca","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    apps_list \u003d \"l2_app.L2App\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        super(TestDfController, self).setUp()"},{"line_number":26,"context_line":"        self.controller \u003d df_local_controller.DfLocalController(\u0027chassis1\u0027)"},{"line_number":27,"context_line":"        self.controller.nb_api \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5201f7_2f9b3767","line":24,"updated":"2017-01-08 15:10:24.000000000","message":"A lot of what\u0027s done here is covered by the infrastructure. Is there anything you can re-use? e.g. fake lswitch, fake lport, self.controller?","commit_id":"f2db8ffa6df50f1d1da64610f6e23966a10e2abc"}]}
