)]}'
{"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"979008022bbb23e656508504844e78cbcf29a68b","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"                self.read_floatingip()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"                self.read_qoses()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            self.sync_finished \u003d True"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_13528ddd","line":146,"range":{"start_line":146,"start_character":21,"end_line":146,"end_character":31},"updated":"2016-09-24 03:51:12.000000000","message":"read_qoses should get qos from df_db other than from dbstore, when startup, dbstore is empty","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"                self.read_floatingip()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"                self.read_qoses()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            self.sync_finished \u003d True"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_557acbbd","line":146,"range":{"start_line":146,"start_character":21,"end_line":146,"end_character":31},"in_reply_to":"5a8bc5a2_13528ddd","updated":"2016-09-27 12:09:32.000000000","message":"here,it gets qos from df_db.","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"68092c352ec54be88f33e397fc753a436a01ab0f","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        self.open_flow_app.notify_update_qos(qos)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def qos_deleted(self, qos_id):"},{"line_number":401,"context_line":"        self.db_store.delete_qos(qos_id)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def register_chassis(self):"},{"line_number":404,"context_line":"        chassis \u003d self.nb_api.get_chassis(self.chassis_name)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a8bc5a2_d66ce638","line":401,"range":{"start_line":401,"start_character":0,"end_line":401,"end_character":40},"updated":"2016-09-28 10:59:51.000000000","message":"The qos might be delete with rules, maybe you should also notify delete qos","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dd5ba5c1857784cbafc52afc2e58b11778c694c4","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        self.open_flow_app.notify_update_qos(qos)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def qos_deleted(self, qos_id):"},{"line_number":401,"context_line":"        self.db_store.delete_qos(qos_id)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def register_chassis(self):"},{"line_number":404,"context_line":"        chassis \u003d self.nb_api.get_chassis(self.chassis_name)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_f212a8b3","line":401,"range":{"start_line":401,"start_character":0,"end_line":401,"end_character":40},"in_reply_to":"3a98d1f4_aa4cfa42","updated":"2016-11-16 02:07:52.000000000","message":"Ok, sounds reasonable","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"9dfe16e70d76ec7b80970d3b56c3f7f6e5428be2","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        self.open_flow_app.notify_update_qos(qos)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def qos_deleted(self, qos_id):"},{"line_number":401,"context_line":"        self.db_store.delete_qos(qos_id)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def register_chassis(self):"},{"line_number":404,"context_line":"        chassis \u003d self.nb_api.get_chassis(self.chassis_name)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a98d1f4_aa4cfa42","line":401,"range":{"start_line":401,"start_character":0,"end_line":401,"end_character":40},"in_reply_to":"5a8bc5a2_d66ce638","updated":"2016-09-30 09:54:05.000000000","message":"Currently, if a qos could be deleted, there are no lport associate with it, so there are no qos config on the data plane.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"68092c352ec54be88f33e397fc753a436a01ab0f","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        for secgroup_to_remove in secgroups_to_remove:"},{"line_number":531,"context_line":"            self.security_group_deleted(secgroup_to_remove)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def read_qoses(self):"},{"line_number":534,"context_line":"        qoses_to_remove \u003d self.db_store.get_qos_keys()"},{"line_number":535,"context_line":"        for qos in self.nb_api.get_qoses():"},{"line_number":536,"context_line":"            self.db_store.set_qos(qos.get_id(), qos)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a8bc5a2_f6cac26d","line":533,"range":{"start_line":533,"start_character":8,"end_line":533,"end_character":18},"updated":"2016-09-28 10:59:51.000000000","message":"This is for sync up qos. I think you should do more job than just update the qos in db_store. For example, if the df controller just starts up, and nb db has a qos with rules. The sync should apply the rules to local, not just store the qos in db_store, because the df controller might not have the qos rules in local env.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dd5ba5c1857784cbafc52afc2e58b11778c694c4","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        for secgroup_to_remove in secgroups_to_remove:"},{"line_number":531,"context_line":"            self.security_group_deleted(secgroup_to_remove)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def read_qoses(self):"},{"line_number":534,"context_line":"        qoses_to_remove \u003d self.db_store.get_qos_keys()"},{"line_number":535,"context_line":"        for qos in self.nb_api.get_qoses():"},{"line_number":536,"context_line":"            self.db_store.set_qos(qos.get_id(), qos)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_f288e824","line":533,"range":{"start_line":533,"start_character":8,"end_line":533,"end_character":18},"in_reply_to":"3a98d1f4_0ad88e1c","updated":"2016-11-16 02:07:52.000000000","message":"What if the qos and lport are both new to local controller? If we just apply it in db store, the lport will not be updated with new qos, according to [1] and the sync position of qos. So, if we want to just set qos in db store when sync nb db with loca, we should move read_qoses at line 147 before port_mappings(line 141), is that correct?\n\n\n[1] https://review.openstack.org/#/c/337497/21/dragonflow/controller/portqos_app.py@51","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"9dfe16e70d76ec7b80970d3b56c3f7f6e5428be2","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        for secgroup_to_remove in secgroups_to_remove:"},{"line_number":531,"context_line":"            self.security_group_deleted(secgroup_to_remove)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def read_qoses(self):"},{"line_number":534,"context_line":"        qoses_to_remove \u003d self.db_store.get_qos_keys()"},{"line_number":535,"context_line":"        for qos in self.nb_api.get_qoses():"},{"line_number":536,"context_line":"            self.db_store.set_qos(qos.get_id(), qos)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a98d1f4_0ad88e1c","line":533,"range":{"start_line":533,"start_character":8,"end_line":533,"end_character":18},"in_reply_to":"5a8bc5a2_f6cac26d","updated":"2016-09-30 09:54:05.000000000","message":"qos create and delete will not trigger config qos rules on the data plane.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                        self.security_group_updated,"},{"line_number":158,"context_line":"                        self.security_group_deleted),"},{"line_number":159,"context_line":"                    df_db_objects_refresh.DfObjectRefresher("},{"line_number":160,"context_line":"                        \u0027QoSes\u0027,"},{"line_number":161,"context_line":"                        self.db_store.get_qos_keys,"},{"line_number":162,"context_line":"                        self.nb_api.get_qoses,"},{"line_number":163,"context_line":"                        self.qos_updated,"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_74a97623","line":160,"range":{"start_line":160,"start_character":25,"end_line":160,"end_character":30},"updated":"2016-11-20 08:27:54.000000000","message":"maybe QoS Policies?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                        self.security_group_updated,"},{"line_number":158,"context_line":"                        self.security_group_deleted),"},{"line_number":159,"context_line":"                    df_db_objects_refresh.DfObjectRefresher("},{"line_number":160,"context_line":"                        \u0027QoSes\u0027,"},{"line_number":161,"context_line":"                        self.db_store.get_qos_keys,"},{"line_number":162,"context_line":"                        self.nb_api.get_qoses,"},{"line_number":163,"context_line":"                        self.qos_updated,"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_cf1d5374","line":160,"range":{"start_line":160,"start_character":25,"end_line":160,"end_character":30},"in_reply_to":"7a77a97e_74a97623","updated":"2016-11-20 10:31:49.000000000","message":"It chould be, I think it is better","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"533ac3e9d7a2c3fe3cceacc7387923533d093252","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        self.open_flow_app.notify_update_qos_policy(qos)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def qos_policy_deleted(self, qos_id):"},{"line_number":461,"context_line":"        self.db_store.delete_qos_policy(qos_id)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def register_chassis(self):"},{"line_number":464,"context_line":"        chassis \u003d self.nb_api.get_chassis(self.chassis_name)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_3b3242f2","line":461,"updated":"2016-12-02 08:27:56.000000000","message":"Maybe send a notification to the applications? So that the application can verify that the qos policy was completely removed?","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e3e6ac6f8d37471ffac0df52b3af82349ff7f651","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        self.open_flow_app.notify_update_qos_policy(qos)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def qos_policy_deleted(self, qos_id):"},{"line_number":461,"context_line":"        self.db_store.delete_qos_policy(qos_id)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def register_chassis(self):"},{"line_number":464,"context_line":"        chassis \u003d self.nb_api.get_chassis(self.chassis_name)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_adc5fc8e","line":461,"in_reply_to":"3a71b18c_3b3242f2","updated":"2016-12-04 11:32:08.000000000","message":"Neutron api will not allow delete qos if it is still associated with any port/network. So when code hits here, the qos is actually cleared by previous operations. So, I don\u0027t think it is necessary to notify apps here. Maybe we can do it later when it is necessary.","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9827b8957bbf79afd6620450fed1ae39ec32d98f","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            return"},{"line_number":392,"context_line":"        self._delete_old_security_group(old_secgroup)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def qos_policy_created(self, qos):"},{"line_number":395,"context_line":"        self.db_store.set_qos_policy(qos.get_id(), qos)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def qos_policy_updated(self, qos):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_c5b10103","line":394,"range":{"start_line":394,"start_character":8,"end_line":394,"end_character":26},"updated":"2016-12-05 20:02:07.000000000","message":"There is work being done to unify create and update methods. Perhaps do that here in advance?","commit_id":"c86d13d7b2a98746e137eed91b07f706fb717bdc"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0677f385745b68438da300cedfb425b1f31e037d","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            return"},{"line_number":392,"context_line":"        self._delete_old_security_group(old_secgroup)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def qos_policy_created(self, qos):"},{"line_number":395,"context_line":"        self.db_store.set_qos_policy(qos.get_id(), qos)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def qos_policy_updated(self, qos):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_010cbfeb","line":394,"range":{"start_line":394,"start_character":8,"end_line":394,"end_character":26},"in_reply_to":"3a71b18c_c0748837","updated":"2016-12-06 07:58:36.000000000","message":"You might mean the patch to eliminate the *create* method. That could be done in this patch.","commit_id":"c86d13d7b2a98746e137eed91b07f706fb717bdc"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1297ace770e044c514ad30ac4b71a7f86334bc09","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            return"},{"line_number":392,"context_line":"        self._delete_old_security_group(old_secgroup)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def qos_policy_created(self, qos):"},{"line_number":395,"context_line":"        self.db_store.set_qos_policy(qos.get_id(), qos)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def qos_policy_updated(self, qos):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_c0748837","line":394,"range":{"start_line":394,"start_character":8,"end_line":394,"end_character":26},"in_reply_to":"3a71b18c_c5b10103","updated":"2016-12-06 02:35:32.000000000","message":"I tried, but I found that changes would involve code before this patch(qos methods in api_nb/ml2). And that refactor just starts, I think it is ok to do it latter for qos.","commit_id":"c86d13d7b2a98746e137eed91b07f706fb717bdc"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1297ace770e044c514ad30ac4b71a7f86334bc09","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        self.open_flow_app.notify_update_qos_policy(qos)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def qos_policy_deleted(self, qos_id):"},{"line_number":402,"context_line":"        self.db_store.delete_qos_policy(qos_id)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def register_chassis(self):"},{"line_number":405,"context_line":"        # Get all chassis from nb db to db store."}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_6fc63f9b","line":402,"range":{"start_line":402,"start_character":0,"end_line":402,"end_character":47},"updated":"2016-12-06 02:35:32.000000000","message":"Considering the situation of db consistency, it is necessary to notify the qos_delete event here so that apps can clear the qos.","commit_id":"c86d13d7b2a98746e137eed91b07f706fb717bdc"}],"dragonflow/controller/portqos_app.py":[{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1a9d6637ea14185eebec1c741f4a1be24bb0eb70","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        qos \u003d self.db_store.get_qos(qos_id)\r"},{"line_number":39,"context_line":"        if qos is None:\r"},{"line_number":40,"context_line":"            LOG.error(_LE(\"Get qos %s from db store when adding \\\r"},{"line_number":41,"context_line":"                       local port, but it is none\" % qos_id))\r"},{"line_number":42,"context_line":"            return\r"},{"line_number":43,"context_line":"\r"},{"line_number":44,"context_line":"        ovs_port_id \u003d lport.get_ovs_port_id()\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_ae3e45b5","line":41,"range":{"start_line":41,"start_character":51,"end_line":41,"end_character":53},"updated":"2016-07-13 01:34:16.000000000","message":"%  -\u003e ,","commit_id":"fd20212adbcd14ce788448df0785ee221314c6f0"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1a9d6637ea14185eebec1c741f4a1be24bb0eb70","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                       local port, but it is none\" % new_qos_id)\r"},{"line_number":62,"context_line":"                return\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"            if old_qos_id:\r"},{"line_number":65,"context_line":"                if old_qos_id \u003d\u003d new_qos_id:\r"},{"line_number":66,"context_line":"                    return\r"},{"line_number":67,"context_line":"                self.vswitch_api.del_port_qos(ovs_port_id)\r"},{"line_number":68,"context_line":"            self.vswitch_api.add_port_qos(ovs_port_id, qos)\r"},{"line_number":69,"context_line":"        return\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_2eeed521","line":66,"range":{"start_line":64,"start_character":8,"end_line":66,"end_character":26},"updated":"2016-07-13 01:34:16.000000000","message":"It\u0027s better to move these code up about 4 lines.","commit_id":"fd20212adbcd14ce788448df0785ee221314c6f0"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1a9d6637ea14185eebec1c741f4a1be24bb0eb70","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.vswitch_api.del_port_qos(ovs_port_id)\r"},{"line_number":78,"context_line":"        return\r"},{"line_number":79,"context_line":"\r"},{"line_number":80,"context_line":"    def update_qos(self, qos):\r"},{"line_number":81,"context_line":"        local_ports \u003d self.db_store.get_local_ports()\r"},{"line_number":82,"context_line":"        for value in local_ports:\r"},{"line_number":83,"context_line":"            if value[\u0027qos_policy_id\u0027] \u003d\u003d qos.get_id():\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_ee2ded8f","line":80,"range":{"start_line":80,"start_character":8,"end_line":80,"end_character":30},"updated":"2016-07-13 01:34:16.000000000","message":"if port is assigned a new qos policy, the old one will be overriden?\nOr else, you need to know the old qos when update qos policy.","commit_id":"fd20212adbcd14ce788448df0785ee221314c6f0"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"94aef95100a957b24894fcfded7e87633d95ddc2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                              \"when updating local port, but it\""},{"line_number":60,"context_line":"                              \"is none\"), new_qos_id)"},{"line_number":61,"context_line":"                return"},{"line_number":62,"context_line":"            if old_qos_id:"},{"line_number":63,"context_line":"                if old_qos_id \u003d\u003d new_qos_id:"},{"line_number":64,"context_line":"                    return"},{"line_number":65,"context_line":"                self.vswitch_api.del_port_qos(lport.get_id())"},{"line_number":66,"context_line":"            self.vswitch_api.add_port_qos(lport.get_id(), qos)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_a94b702a","line":64,"range":{"start_line":62,"start_character":0,"end_line":64,"end_character":26},"updated":"2016-07-25 07:00:46.000000000","message":"It\u0027s better to move these lines up to line 63.","commit_id":"1d29bf10d064f31507e8ca160269b400b09bdfc1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"302e50e043814972bda11cfc8b98fa587ea188d9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                              \"when updating local port, but it\""},{"line_number":60,"context_line":"                              \"is none\"), new_qos_id)"},{"line_number":61,"context_line":"                return"},{"line_number":62,"context_line":"            if old_qos_id:"},{"line_number":63,"context_line":"                if old_qos_id \u003d\u003d new_qos_id:"},{"line_number":64,"context_line":"                    return"},{"line_number":65,"context_line":"                self.vswitch_api.del_port_qos(lport.get_id())"},{"line_number":66,"context_line":"            self.vswitch_api.add_port_qos(lport.get_id(), qos)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_7ffdaa3a","line":64,"range":{"start_line":62,"start_character":0,"end_line":64,"end_character":26},"in_reply_to":"dada55a8_a94b702a","updated":"2016-07-25 07:55:38.000000000","message":"ok","commit_id":"1d29bf10d064f31507e8ca160269b400b09bdfc1"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"ee172f249dbfb8c049bb343647d1712cb567865b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_d3c3c555","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2016-07-26 00:41:04.000000000","message":"2016","commit_id":"eb9b072bcfcf84e98ea442865327f00253faf565"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"3c67886be77234cd06b5cd445c583f58b7f5bc88","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from dragonflow._i18n import _LE"},{"line_number":17,"context_line":"from dragonflow.controller.common.utils import get_aging_cookie"},{"line_number":18,"context_line":"from dragonflow.controller.df_base_app import DFlowApp"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron.agent.common import config"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_7135def5","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":54},"updated":"2016-09-20 01:59:51.000000000","message":"please follow this patch import principle","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from dragonflow._i18n import _LE"},{"line_number":17,"context_line":"from dragonflow.controller.common.utils import get_aging_cookie"},{"line_number":18,"context_line":"from dragonflow.controller.df_base_app import DFlowApp"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron.agent.common import config"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_e8093a96","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":54},"in_reply_to":"7a8ec9b2_7135def5","updated":"2016-09-27 12:09:32.000000000","message":"Done","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"8c07ccf82a82647b96bb1c979ba8c640e5efdc5c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                              \"is none\"), new_qos_id)"},{"line_number":72,"context_line":"                return"},{"line_number":73,"context_line":"            if old_qos_id:"},{"line_number":74,"context_line":"                self.vswitch_api.del_port_qos(lport.get_id())"},{"line_number":75,"context_line":"            self.vswitch_api.add_port_qos("},{"line_number":76,"context_line":"                    lport.get_id(), qos, self.qos_version)"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_a9330261","line":74,"range":{"start_line":74,"start_character":46,"end_line":74,"end_character":51},"updated":"2016-09-26 10:47:16.000000000","message":"it should be original_lport","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                              \"is none\"), new_qos_id)"},{"line_number":72,"context_line":"                return"},{"line_number":73,"context_line":"            if old_qos_id:"},{"line_number":74,"context_line":"                self.vswitch_api.del_port_qos(lport.get_id())"},{"line_number":75,"context_line":"            self.vswitch_api.add_port_qos("},{"line_number":76,"context_line":"                    lport.get_id(), qos, self.qos_version)"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_48994ec3","line":74,"range":{"start_line":74,"start_character":46,"end_line":74,"end_character":51},"in_reply_to":"5a8bc5a2_a9330261","updated":"2016-09-27 12:09:32.000000000","message":"the old port id and  new port id is same","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"68092c352ec54be88f33e397fc753a436a01ab0f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from dragonflow._i18n import _LE"},{"line_number":17,"context_line":"from dragonflow.controller.common import utils"},{"line_number":18,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron.agent.common import config"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_log import log"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"config.setup_logging()"},{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a8bc5a2_d6da26e9","line":22,"range":{"start_line":16,"start_character":0,"end_line":22,"end_character":24},"updated":"2016-09-28 10:59:51.000000000","message":"Usually, tools import should be before local import, so the right import order should be:\n\nfrom neutron.agent.common import config\nfrom oslo_log import log\n\nfrom dragonflow._i18n import _LE\nfrom dragonflow.controller.common import utils\nfrom dragonflow.controller import df_base_app","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"68092c352ec54be88f33e397fc753a436a01ab0f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_log import log"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"config.setup_logging()"},{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"5a8bc5a2_d68866c9","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":22},"updated":"2016-09-28 10:59:51.000000000","message":"I don\u0027t think this is required.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"68092c352ec54be88f33e397fc753a436a01ab0f","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(PortQosApp, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":"        self.vswitch_api \u003d kwargs[\u0027vswitch_api\u0027]"},{"line_number":33,"context_line":"        self.db_store \u003d kwargs[\u0027db_store\u0027]"},{"line_number":34,"context_line":"        self.qos_version \u003d 0"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def ovs_sync_started(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a8bc5a2_96b5fe7f","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":42},"updated":"2016-09-28 10:59:51.000000000","message":"This should not be required, as it is already defined in df_base_app.DFlowApp","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"9dfe16e70d76ec7b80970d3b56c3f7f6e5428be2","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(PortQosApp, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":"        self.vswitch_api \u003d kwargs[\u0027vswitch_api\u0027]"},{"line_number":33,"context_line":"        self.db_store \u003d kwargs[\u0027db_store\u0027]"},{"line_number":34,"context_line":"        self.qos_version \u003d 0"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def ovs_sync_started(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a98d1f4_6a0d928f","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":42},"in_reply_to":"5a8bc5a2_96b5fe7f","updated":"2016-09-30 09:54:05.000000000","message":"+1","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"68092c352ec54be88f33e397fc753a436a01ab0f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.db_store \u003d kwargs[\u0027db_store\u0027]"},{"line_number":34,"context_line":"        self.qos_version \u003d 0"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def ovs_sync_started(self):"},{"line_number":37,"context_line":"        cur_version \u003d utils.get_aging_cookie()"},{"line_number":38,"context_line":"        if not cur_version:"},{"line_number":39,"context_line":"            return"},{"line_number":40,"context_line":"        self.qos_version \u003d cur_version"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def ovs_sync_finished(self):"},{"line_number":43,"context_line":"        old_version \u003d self.qos_version ^ 1"},{"line_number":44,"context_line":"        self.vswitch_api.del_all_qos(old_version)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def add_local_port(self, lport):"},{"line_number":47,"context_line":"        qos_id \u003d lport.get_qos()"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a8bc5a2_b63f5ad5","line":44,"range":{"start_line":36,"start_character":0,"end_line":44,"end_character":49},"updated":"2016-09-28 10:59:51.000000000","message":"Do you need to explicitly do these? I think the aging.Aging will do the job","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dd5ba5c1857784cbafc52afc2e58b11778c694c4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.db_store \u003d kwargs[\u0027db_store\u0027]"},{"line_number":34,"context_line":"        self.qos_version \u003d 0"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def ovs_sync_started(self):"},{"line_number":37,"context_line":"        cur_version \u003d utils.get_aging_cookie()"},{"line_number":38,"context_line":"        if not cur_version:"},{"line_number":39,"context_line":"            return"},{"line_number":40,"context_line":"        self.qos_version \u003d cur_version"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def ovs_sync_finished(self):"},{"line_number":43,"context_line":"        old_version \u003d self.qos_version ^ 1"},{"line_number":44,"context_line":"        self.vswitch_api.del_all_qos(old_version)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def add_local_port(self, lport):"},{"line_number":47,"context_line":"        qos_id \u003d lport.get_qos()"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_921c1415","line":44,"range":{"start_line":36,"start_character":0,"end_line":44,"end_character":49},"in_reply_to":"3a98d1f4_ca086630","updated":"2016-11-16 02:07:52.000000000","message":"Another thought, I think it is needed here, as the qos might be deleted from neutron during the ovsdb disconnection. We need to clear such qos in ovsdb. But it might go hujie\u0027s way to just use ovs_sync_finished  here.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"9dfe16e70d76ec7b80970d3b56c3f7f6e5428be2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.db_store \u003d kwargs[\u0027db_store\u0027]"},{"line_number":34,"context_line":"        self.qos_version \u003d 0"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def ovs_sync_started(self):"},{"line_number":37,"context_line":"        cur_version \u003d utils.get_aging_cookie()"},{"line_number":38,"context_line":"        if not cur_version:"},{"line_number":39,"context_line":"            return"},{"line_number":40,"context_line":"        self.qos_version \u003d cur_version"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def ovs_sync_finished(self):"},{"line_number":43,"context_line":"        old_version \u003d self.qos_version ^ 1"},{"line_number":44,"context_line":"        self.vswitch_api.del_all_qos(old_version)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def add_local_port(self, lport):"},{"line_number":47,"context_line":"        qos_id \u003d lport.get_qos()"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a98d1f4_ca086630","line":44,"range":{"start_line":36,"start_character":0,"end_line":44,"end_character":49},"in_reply_to":"5a8bc5a2_b63f5ad5","updated":"2016-09-30 09:54:05.000000000","message":"I think we should just implement ovs_sync_finished method and get the newest cookie and delete the old qos by old cookie.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dd5ba5c1857784cbafc52afc2e58b11778c694c4","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        qos \u003d self.db_store.get_qos(qos_id)"},{"line_number":52,"context_line":"        if not qos:"},{"line_number":53,"context_line":"            LOG.error(_LE(\"Get qos %s from db store when \""},{"line_number":54,"context_line":"                          \"adding local port, but it is none\"), qos_id)"},{"line_number":55,"context_line":"            return"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.vswitch_api.add_port_qos(lport.get_id(), qos, self.qos_version)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_7203f842","line":54,"range":{"start_line":53,"start_character":26,"end_line":54,"end_character":61},"updated":"2016-11-16 02:07:52.000000000","message":"nit: this could simplify to \"Unable to get QoS %s from db store when adding local port\"","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"68092c352ec54be88f33e397fc753a436a01ab0f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        if new_qos_id \u003d\u003d old_qos_id:"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":"        if not new_qos_id:"},{"line_number":65,"context_line":"            self.vswitch_api.del_port_qos(lport.get_id())"},{"line_number":66,"context_line":"        else:"},{"line_number":67,"context_line":"            qos \u003d self.db_store.get_qos(new_qos_id)"},{"line_number":68,"context_line":"            if not qos:"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a8bc5a2_0ab61e3d","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":57},"updated":"2016-09-28 10:59:51.000000000","message":"You may want to delete the old_qos whenever the old_qos_id is not none. So, you might just:\n\nif not old_qos_id:\n    # delete port qos\n\nif new_qos_id:\n    # get qos and update port\n\nI think this will make the code more clear here.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dd5ba5c1857784cbafc52afc2e58b11778c694c4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        if new_qos_id \u003d\u003d old_qos_id:"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":"        if not new_qos_id:"},{"line_number":65,"context_line":"            self.vswitch_api.del_port_qos(lport.get_id())"},{"line_number":66,"context_line":"        else:"},{"line_number":67,"context_line":"            qos \u003d self.db_store.get_qos(new_qos_id)"},{"line_number":68,"context_line":"            if not qos:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_b204b0c0","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":57},"in_reply_to":"5a8bc5a2_0ab61e3d","updated":"2016-11-16 02:07:52.000000000","message":"I meant \n\nif old_qos_id:\n    # delete port qos\nif new_qos_id:\n    # get qos and update port","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dd5ba5c1857784cbafc52afc2e58b11778c694c4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        else:"},{"line_number":67,"context_line":"            qos \u003d self.db_store.get_qos(new_qos_id)"},{"line_number":68,"context_line":"            if not qos:"},{"line_number":69,"context_line":"                LOG.error(_LE(\"Get new qos %s from db store \""},{"line_number":70,"context_line":"                              \"when updating local port, but it \""},{"line_number":71,"context_line":"                              \"is none\"), new_qos_id)"},{"line_number":72,"context_line":"                return"},{"line_number":73,"context_line":"            if old_qos_id:"},{"line_number":74,"context_line":"                self.vswitch_api.del_port_qos(lport.get_id())"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_cd1c2dc4","line":71,"range":{"start_line":69,"start_character":30,"end_line":71,"end_character":41},"updated":"2016-11-16 02:07:52.000000000","message":"nit: this could simplify to \"Unable to get QoS %s from db store when updating local port\"","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3d02b6f9d1ebbad07328ac02e6089aca88fe491b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        super(PortQosApp, self).__init__(*args, **kwargs)"},{"line_number":30,"context_line":"        # qos_version will change in different lifecycle of df controller."},{"line_number":31,"context_line":"        # So that the old qos in ovs db from last connection can be identified."},{"line_number":32,"context_line":"        self.qos_version \u003d 0"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def ovs_sync_finished(self):"},{"line_number":35,"context_line":"        # REVISIT(xiaohhui): what if aging app is not enabled?"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_c79e2862","line":32,"range":{"start_line":32,"start_character":13,"end_line":32,"end_character":24},"updated":"2016-11-18 23:31:39.000000000","message":"it might be good to rename to cookie, as version will make other think it will increase","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"724df1d97fc575ba389f44633b5081dba8ef1815","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        super(PortQosApp, self).__init__(*args, **kwargs)"},{"line_number":30,"context_line":"        # qos_version will change in different lifecycle of df controller."},{"line_number":31,"context_line":"        # So that the old qos in ovs db from last connection can be identified."},{"line_number":32,"context_line":"        self.qos_version \u003d 0"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def ovs_sync_finished(self):"},{"line_number":35,"context_line":"        # REVISIT(xiaohhui): what if aging app is not enabled?"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_12aa1d85","line":32,"range":{"start_line":32,"start_character":13,"end_line":32,"end_character":24},"in_reply_to":"7a77a97e_c79e2862","updated":"2016-11-19 05:38:45.000000000","message":"+1","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3d02b6f9d1ebbad07328ac02e6089aca88fe491b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.qos_version \u003d 0"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def ovs_sync_finished(self):"},{"line_number":35,"context_line":"        # REVISIT(xiaohhui): what if aging app is not enabled?"},{"line_number":36,"context_line":"        self.qos_version \u003d utils.get_aging_cookie()"},{"line_number":37,"context_line":"        old_version \u003d self.qos_version ^ 1"},{"line_number":38,"context_line":"        self.vswitch_api.del_all_qos(old_version)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_4759388d","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":62},"updated":"2016-11-18 23:31:39.000000000","message":"When aging app is not enabled, the aging cookie will always be 0, and old_version will always be 1. So, there is no old version qos to be deleted, and there will always new qos to be added.\n\nAs a result, every restart of df controller, duplicated qos/queue will be created.","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"724df1d97fc575ba389f44633b5081dba8ef1815","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        qos \u003d self.db_store.get_qos(qos_id)"},{"line_number":46,"context_line":"        if not qos:"},{"line_number":47,"context_line":"            LOG.error(_LE(\"Unable to get QoS %s from db store when \""},{"line_number":48,"context_line":"                          \"adding local port\"), qos_id)"},{"line_number":49,"context_line":"            return"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.vswitch_api.add_port_qos(lport.get_id(), qos, self.qos_version)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_d2918548","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":55},"updated":"2016-11-19 05:38:45.000000000","message":"It will be helpful to log the port id","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f66869e94bbd3bc711bece3a931a44751cde3e23","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        qos \u003d self.db_store.get_qos(qos_id)"},{"line_number":46,"context_line":"        if not qos:"},{"line_number":47,"context_line":"            LOG.error(_LE(\"Unable to get QoS %s from db store when \""},{"line_number":48,"context_line":"                          \"adding local port\"), qos_id)"},{"line_number":49,"context_line":"            return"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.vswitch_api.add_port_qos(lport.get_id(), qos, self.qos_version)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_83925af4","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":55},"in_reply_to":"7a77a97e_d2918548","updated":"2016-11-20 02:07:05.000000000","message":"Done","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"724df1d97fc575ba389f44633b5081dba8ef1815","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        if new_qos_id:"},{"line_number":63,"context_line":"            qos \u003d self.db_store.get_qos(new_qos_id)"},{"line_number":64,"context_line":"            if not qos:"},{"line_number":65,"context_line":"                LOG.error(_LE(\"Unable to get QoS %s from db store when \""},{"line_number":66,"context_line":"                              \"updating local port\"), new_qos_id)"},{"line_number":67,"context_line":"                return"},{"line_number":68,"context_line":"            self.vswitch_api.add_port_qos("},{"line_number":69,"context_line":"                    lport.get_id(), qos, self.qos_version)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_f294c137","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":65},"updated":"2016-11-19 05:38:45.000000000","message":"ditto","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f66869e94bbd3bc711bece3a931a44751cde3e23","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        if new_qos_id:"},{"line_number":63,"context_line":"            qos \u003d self.db_store.get_qos(new_qos_id)"},{"line_number":64,"context_line":"            if not qos:"},{"line_number":65,"context_line":"                LOG.error(_LE(\"Unable to get QoS %s from db store when \""},{"line_number":66,"context_line":"                              \"updating local port\"), new_qos_id)"},{"line_number":67,"context_line":"                return"},{"line_number":68,"context_line":"            self.vswitch_api.add_port_qos("},{"line_number":69,"context_line":"                    lport.get_id(), qos, self.qos_version)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_a38d96d4","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":65},"in_reply_to":"7a77a97e_f294c137","updated":"2016-11-20 02:07:05.000000000","message":"Done","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            LOG.error(_LE(\"Unable to get QoS %(qos)s from db store when \""},{"line_number":46,"context_line":"                          \"adding/updating local port %(port)s\"),"},{"line_number":47,"context_line":"                      {\u0027qos\u0027: qos_id, \u0027port\u0027: lport.get_id()})"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.vswitch_api.update_port_qos(lport.get_id(), qos)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_7480968b","line":48,"updated":"2016-11-20 08:27:54.000000000","message":"In case there was qos profile previously associated with the port, its going to be there, even though new profile was not fetched. Is this the intended behavior?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            LOG.error(_LE(\"Unable to get QoS %(qos)s from db store when \""},{"line_number":46,"context_line":"                          \"adding/updating local port %(port)s\"),"},{"line_number":47,"context_line":"                      {\u0027qos\u0027: qos_id, \u0027port\u0027: lport.get_id()})"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.vswitch_api.update_port_qos(lport.get_id(), qos)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_fa1e4f5d","line":48,"in_reply_to":"7a77a97e_7480968b","updated":"2016-11-20 10:31:49.000000000","message":"If the qos associated with port, and it is still associating(line 35), I think there no good desicion to make here, except log an error.","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5d321086f5176e5bd457a84f2ad2ffb1ba297749","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            LOG.error(_LE(\"Unable to get QoS %(qos)s from db store when \""},{"line_number":46,"context_line":"                          \"adding/updating local port %(port)s\"),"},{"line_number":47,"context_line":"                      {\u0027qos\u0027: qos_id, \u0027port\u0027: lport.get_id()})"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.vswitch_api.update_port_qos(lport.get_id(), qos)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_ec36924f","line":48,"in_reply_to":"7a77a97e_baf05768","updated":"2016-11-21 02:44:12.000000000","message":"Thanks, will follow neutron implementation.","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"57f53f2708cdf8891e11f21984969fa1629da231","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            LOG.error(_LE(\"Unable to get QoS %(qos)s from db store when \""},{"line_number":46,"context_line":"                          \"adding/updating local port %(port)s\"),"},{"line_number":47,"context_line":"                      {\u0027qos\u0027: qos_id, \u0027port\u0027: lport.get_id()})"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        self.vswitch_api.update_port_qos(lport.get_id(), qos)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_baf05768","line":48,"in_reply_to":"7a77a97e_fa1e4f5d","updated":"2016-11-20 11:14:58.000000000","message":"I think it is preferable to keep alignment with neutron reference implementation, https://github.com/openstack/neutron/blob/master/neutron/agent/l2/extensions/qos.py#L257","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"533ac3e9d7a2c3fe3cceacc7387923533d093252","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self._update_local_port_qos(lport, original_lport)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _update_local_port_qos(self, lport, original_lport\u003dNone):"},{"line_number":34,"context_line":"        if (original_lport"},{"line_number":35,"context_line":"                and lport.get_qos_policy_id()"},{"line_number":36,"context_line":"                \u003d\u003d original_lport.get_qos_policy_id()):"},{"line_number":37,"context_line":"            # Do nothing, if the port\u0027s qos is the same as db store."},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        qos_id \u003d lport.get_qos_policy_id()"},{"line_number":41,"context_line":"        if not qos_id:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_fb3e0ab7","line":38,"range":{"start_line":34,"start_character":0,"end_line":38,"end_character":18},"updated":"2016-12-02 08:27:56.000000000","message":"nit: I think it would have been better to place this in update_local_port, since it is not relevant for that add_local_port case.","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e3e6ac6f8d37471ffac0df52b3af82349ff7f651","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self._update_local_port_qos(lport, original_lport)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _update_local_port_qos(self, lport, original_lport\u003dNone):"},{"line_number":34,"context_line":"        if (original_lport"},{"line_number":35,"context_line":"                and lport.get_qos_policy_id()"},{"line_number":36,"context_line":"                \u003d\u003d original_lport.get_qos_policy_id()):"},{"line_number":37,"context_line":"            # Do nothing, if the port\u0027s qos is the same as db store."},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        qos_id \u003d lport.get_qos_policy_id()"},{"line_number":41,"context_line":"        if not qos_id:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_edbff4f8","line":38,"range":{"start_line":34,"start_character":0,"end_line":38,"end_character":18},"in_reply_to":"3a71b18c_fb3e0ab7","updated":"2016-12-04 11:32:08.000000000","message":"Done","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"533ac3e9d7a2c3fe3cceacc7387923533d093252","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        qos \u003d self._get_qos_policy(qos_id)"},{"line_number":50,"context_line":"        if not qos:"},{"line_number":51,"context_line":"            LOG.error(_LE(\"Unable to get QoS %(qos)s when adding/updating \""},{"line_number":52,"context_line":"                          \"local port %(port)s. It may has been deleted.\"),"},{"line_number":53,"context_line":"                      {\u0027qos\u0027: qos_id, \u0027port\u0027: lport.get_id()})"},{"line_number":54,"context_line":"            self.vswitch_api.clear_port_qos(lport.get_id())"},{"line_number":55,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_5b745e9b","line":52,"range":{"start_line":52,"start_character":57,"end_line":52,"end_character":58},"updated":"2016-12-02 08:27:56.000000000","message":"nit: have been","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e3e6ac6f8d37471ffac0df52b3af82349ff7f651","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        qos \u003d self._get_qos_policy(qos_id)"},{"line_number":50,"context_line":"        if not qos:"},{"line_number":51,"context_line":"            LOG.error(_LE(\"Unable to get QoS %(qos)s when adding/updating \""},{"line_number":52,"context_line":"                          \"local port %(port)s. It may has been deleted.\"),"},{"line_number":53,"context_line":"                      {\u0027qos\u0027: qos_id, \u0027port\u0027: lport.get_id()})"},{"line_number":54,"context_line":"            self.vswitch_api.clear_port_qos(lport.get_id())"},{"line_number":55,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_0dbb500f","line":52,"range":{"start_line":52,"start_character":57,"end_line":52,"end_character":58},"in_reply_to":"3a71b18c_5b745e9b","updated":"2016-12-04 11:32:08.000000000","message":"Done","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"}],"dragonflow/controller/topology.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        for sg_group in sg_groups:"},{"line_number":262,"context_line":"            self.controller.security_group_updated(sg_group)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        qoses \u003d self.nb_api.get_qoses(tenant_id)"},{"line_number":265,"context_line":"        for qos in qoses:"},{"line_number":266,"context_line":"            self.controller.qos_updated(qos)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_1446827a","line":264,"range":{"start_line":264,"start_character":8,"end_line":264,"end_character":13},"updated":"2016-11-20 08:27:54.000000000","message":"qos_policies?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        for sg_group in sg_groups:"},{"line_number":262,"context_line":"            self.controller.security_group_updated(sg_group)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        qoses \u003d self.nb_api.get_qoses(tenant_id)"},{"line_number":265,"context_line":"        for qos in qoses:"},{"line_number":266,"context_line":"            self.controller.qos_updated(qos)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_5ae58306","line":264,"range":{"start_line":264,"start_character":8,"end_line":264,"end_character":13},"in_reply_to":"7a77a97e_1446827a","updated":"2016-11-20 10:31:49.000000000","message":"Done","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1a9d6637ea14185eebec1c741f4a1be24bb0eb70","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        if \u0027qos\u0027 \u003d\u003d table:"},{"line_number":215,"context_line":"            if action \u003d\u003d \u0027create\u0027:"},{"line_number":216,"context_line":"                qos \u003d QosPolicy(value)"},{"line_number":217,"context_line":"                self.controller.qos_created(qos)"},{"line_number":218,"context_line":"            elif action \u003d\u003d \u0027set\u0027:"},{"line_number":219,"context_line":"                qos \u003d QosPolicy(value)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_54f88b7c","line":216,"range":{"start_line":216,"start_character":21,"end_line":216,"end_character":38},"updated":"2016-07-13 01:34:16.000000000","message":"What\u0027s QosPolicy?\nYou need to define it and import it.","commit_id":"fd20212adbcd14ce788448df0785ee221314c6f0"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"ee172f249dbfb8c049bb343647d1712cb567865b","unresolved":false,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1216,"context_line":"        for rule in rules:"},{"line_number":1217,"context_line":"            if rule[\u0027type\u0027] is \u0027bandwidth_limit\u0027:"},{"line_number":1218,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027, None)"},{"line_number":1219,"context_line":"                break"},{"line_number":1220,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_535d1578","line":1217,"range":{"start_line":1217,"start_character":15,"end_line":1217,"end_character":48},"updated":"2016-07-26 00:41:04.000000000","message":"I suggest to use \u0027\u003d\u003d\u0027 instead of \u0027is\u0027 to prevent potential bug in the future.\nThink about \n\u003e\u003e\u003e a \u003d \u0027pub\u0027\n\u003e\u003e\u003e b \u003d \u0027\u0027.join([\u0027p\u0027, \u0027u\u0027, \u0027b\u0027])\n\u003e\u003e\u003e a \u003d\u003d b\nTrue\n\u003e\u003e\u003e a is b\nFalse","commit_id":"eb9b072bcfcf84e98ea442865327f00253faf565"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"fe0ece9470af0e68e3639794c66a3f1d1c98e86f","unresolved":false,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1216,"context_line":"        for rule in rules:"},{"line_number":1217,"context_line":"            if rule[\u0027type\u0027] is \u0027bandwidth_limit\u0027:"},{"line_number":1218,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027, None)"},{"line_number":1219,"context_line":"                break"},{"line_number":1220,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_e9db7619","line":1217,"range":{"start_line":1217,"start_character":15,"end_line":1217,"end_character":48},"in_reply_to":"dada55a8_535d1578","updated":"2016-07-26 01:32:22.000000000","message":"yes, I also found the same error in my environment last night, it\u0027s not a potiential bug, it\u0027s a currently bug!! I\u0027ll modify it, thx:)","commit_id":"eb9b072bcfcf84e98ea442865327f00253faf565"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"ee172f249dbfb8c049bb343647d1712cb567865b","unresolved":false,"context_lines":[{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"        max_kbps \u003d None"},{"line_number":1229,"context_line":"        for rule in rules:"},{"line_number":1230,"context_line":"            if rule[\u0027type\u0027] is \u0027bandwidth_limit\u0027:"},{"line_number":1231,"context_line":"                max_kbps \u003d rule.get(\u0027max_kbps\u0027, None)"},{"line_number":1232,"context_line":"                break"},{"line_number":1233,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_f34ec9bf","line":1230,"range":{"start_line":1230,"start_character":12,"end_line":1230,"end_character":49},"updated":"2016-07-26 00:41:04.000000000","message":"ditto","commit_id":"eb9b072bcfcf84e98ea442865327f00253faf565"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"ee172f249dbfb8c049bb343647d1712cb567865b","unresolved":false,"context_lines":[{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        dscp_mark \u003d None"},{"line_number":1242,"context_line":"        for rule in rules:"},{"line_number":1243,"context_line":"            if rule[\u0027type\u0027] is \u0027dscp_mark\u0027:"},{"line_number":1244,"context_line":"                dscp_mark \u003d rule.get(\u0027dscp_mark\u0027, None)"},{"line_number":1245,"context_line":"                break"},{"line_number":1246,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_33c7c113","line":1243,"range":{"start_line":1243,"start_character":12,"end_line":1243,"end_character":43},"updated":"2016-07-26 00:41:04.000000000","message":"ditto","commit_id":"eb9b072bcfcf84e98ea442865327f00253faf565"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"3c67886be77234cd06b5cd445c583f58b7f5bc88","unresolved":false,"context_lines":[{"line_number":1228,"context_line":""},{"line_number":1229,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1230,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1231,"context_line":"        if not rules or len(rules) \u003d\u003d 0:"},{"line_number":1232,"context_line":"            return None"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        max_burst_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_bca9fde1","line":1231,"range":{"start_line":1231,"start_character":7,"end_line":1231,"end_character":40},"updated":"2016-09-20 01:59:51.000000000","message":"maybe if not rules is enough","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":1228,"context_line":""},{"line_number":1229,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1230,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1231,"context_line":"        if not rules or len(rules) \u003d\u003d 0:"},{"line_number":1232,"context_line":"            return None"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        max_burst_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_080bc67d","line":1231,"range":{"start_line":1231,"start_character":7,"end_line":1231,"end_character":40},"in_reply_to":"7a8ec9b2_bca9fde1","updated":"2016-09-27 12:09:32.000000000","message":"this class implement in patch \" Add QoS North Bound Functionality\", i will sync it","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"8c07ccf82a82647b96bb1c979ba8c640e5efdc5c","unresolved":false,"context_lines":[{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1235,"context_line":"        for rule in rules:"},{"line_number":1236,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1237,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027, None)"},{"line_number":1238,"context_line":"                break"},{"line_number":1239,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_29c7f264","line":1236,"range":{"start_line":1236,"start_character":32,"end_line":1236,"end_character":47},"updated":"2016-09-26 10:47:16.000000000","message":"you should consider use constants","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1235,"context_line":"        for rule in rules:"},{"line_number":1236,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1237,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027, None)"},{"line_number":1238,"context_line":"                break"},{"line_number":1239,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_48706e0b","line":1236,"range":{"start_line":1236,"start_character":32,"end_line":1236,"end_character":47},"in_reply_to":"5a8bc5a2_29c7f264","updated":"2016-09-27 12:09:32.000000000","message":"ditto","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"3c67886be77234cd06b5cd445c583f58b7f5bc88","unresolved":false,"context_lines":[{"line_number":1241,"context_line":""},{"line_number":1242,"context_line":"    def get_max_kbps(self):"},{"line_number":1243,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1244,"context_line":"        if not rules or len(rules) \u003d\u003d 0:"},{"line_number":1245,"context_line":"            return None"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        max_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_fcab85d4","line":1244,"range":{"start_line":1244,"start_character":8,"end_line":1244,"end_character":40},"updated":"2016-09-20 01:59:51.000000000","message":"ditto","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":1241,"context_line":""},{"line_number":1242,"context_line":"    def get_max_kbps(self):"},{"line_number":1243,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1244,"context_line":"        if not rules or len(rules) \u003d\u003d 0:"},{"line_number":1245,"context_line":"            return None"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        max_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_48578e57","line":1244,"range":{"start_line":1244,"start_character":8,"end_line":1244,"end_character":40},"in_reply_to":"7a8ec9b2_fcab85d4","updated":"2016-09-27 12:09:32.000000000","message":"i will sync it","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"3c67886be77234cd06b5cd445c583f58b7f5bc88","unresolved":false,"context_lines":[{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":"    def get_dscp_marking(self):"},{"line_number":1256,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1257,"context_line":"        if not rules or len(rules) \u003d\u003d 0:"},{"line_number":1258,"context_line":"            return None"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"        dscp_mark \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_3cb6cd3d","line":1257,"range":{"start_line":1257,"start_character":8,"end_line":1257,"end_character":40},"updated":"2016-09-20 01:59:51.000000000","message":"ditto","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":"    def get_dscp_marking(self):"},{"line_number":1256,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1257,"context_line":"        if not rules or len(rules) \u003d\u003d 0:"},{"line_number":1258,"context_line":"            return None"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"        dscp_mark \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_e8ccda36","line":1257,"range":{"start_line":1257,"start_character":8,"end_line":1257,"end_character":40},"in_reply_to":"7a8ec9b2_3cb6cd3d","updated":"2016-09-27 12:09:32.000000000","message":"i will sync it","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            res.append(SecurityGroup(secgroup_value))"},{"line_number":624,"context_line":"        return res"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    def get_qoses(self, topic\u003dNone):"},{"line_number":627,"context_line":"        res \u003d []"},{"line_number":628,"context_line":"        for qos in self.driver.get_all_entries(\u0027qospolicy\u0027, topic):"},{"line_number":629,"context_line":"            res.append(QosPolicy(qos))"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_3461be05","line":626,"range":{"start_line":626,"start_character":12,"end_line":626,"end_character":16},"updated":"2016-11-20 08:27:54.000000000","message":"suggestion: get_qos_policies","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            res.append(SecurityGroup(secgroup_value))"},{"line_number":624,"context_line":"        return res"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    def get_qoses(self, topic\u003dNone):"},{"line_number":627,"context_line":"        res \u003d []"},{"line_number":628,"context_line":"        for qos in self.driver.get_all_entries(\u0027qospolicy\u0027, topic):"},{"line_number":629,"context_line":"            res.append(QosPolicy(qos))"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_7af07fc9","line":626,"range":{"start_line":626,"start_character":12,"end_line":626,"end_character":16},"in_reply_to":"7a77a97e_3461be05","updated":"2016-11-20 10:31:49.000000000","message":"Done","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"}],"dragonflow/db/db_store.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.floatingips \u003d {}"},{"line_number":31,"context_line":"        self.secgroups \u003d {}"},{"line_number":32,"context_line":"        self.publishers \u003d {}"},{"line_number":33,"context_line":"        self.qoses \u003d {}"},{"line_number":34,"context_line":"        self.lock \u003d threading.Lock()"},{"line_number":35,"context_line":"        self._table_name_mapping \u003d {"},{"line_number":36,"context_line":"            \u0027lswitchs\u0027: self.lswitchs,"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_545c7a4a","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":18},"updated":"2016-11-20 08:27:54.000000000","message":"suggestion: qospolicies","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.floatingips \u003d {}"},{"line_number":31,"context_line":"        self.secgroups \u003d {}"},{"line_number":32,"context_line":"        self.publishers \u003d {}"},{"line_number":33,"context_line":"        self.qoses \u003d {}"},{"line_number":34,"context_line":"        self.lock \u003d threading.Lock()"},{"line_number":35,"context_line":"        self._table_name_mapping \u003d {"},{"line_number":36,"context_line":"            \u0027lswitchs\u0027: self.lswitchs,"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_babcd7dc","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":18},"in_reply_to":"7a77a97e_545c7a4a","updated":"2016-11-20 10:31:49.000000000","message":"Done","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"}],"dragonflow/db/drivers/ovsdb_vswitch_impl.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ca78b0a551c363b148e47d0cb53586f489fe7dd8","unresolved":false,"context_lines":[{"line_number":514,"context_line":"        self._delete_rows_by_version(\u0027Queue\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"class AddPortQos(commands.BaseCommand):"},{"line_number":518,"context_line":"    def __init__(self, api, port_id, qos, version):"},{"line_number":519,"context_line":"        super(AddPortQos, self).__init__(api)"},{"line_number":520,"context_line":"        self.port_id \u003d port_id"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a98d1f4_005f8d0e","line":517,"updated":"2016-09-30 10:00:22.000000000","message":"The ovs refactor code has been merged, maybe you want to use the ovsdb interface from neutron, it can save lots of code, according to neutron qos implementation.","commit_id":"4aaf73363b672e950fc44506747fd30afd1d429b"}],"dragonflow/ovsdb/commands.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3d02b6f9d1ebbad07328ac02e6089aca88fe491b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        bridge.ports \u003d ports"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class DelAllQos(commands.BaseCommand):"},{"line_number":99,"context_line":"    def __init__(self, api, version):"},{"line_number":100,"context_line":"        super(DelAllQos, self).__init__(api)"},{"line_number":101,"context_line":"        self.version \u003d version"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _delete_rows_by_version(self, table_name):"},{"line_number":104,"context_line":"        rows \u003d self.api.idl.tables[table_name].rows"},{"line_number":105,"context_line":"        delete_rows \u003d []"},{"line_number":106,"context_line":"        for row in six.itervalues(rows):"},{"line_number":107,"context_line":"            external_dict \u003d row.external_ids"},{"line_number":108,"context_line":"            version \u003d external_dict.get(\u0027version\u0027)"},{"line_number":109,"context_line":"            if not version or version \u003d\u003d str(self.version):"},{"line_number":110,"context_line":"                delete_rows.append(row)"},{"line_number":111,"context_line":"        for row in delete_rows:"},{"line_number":112,"context_line":"            row.delete()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def run_idl(self, txn):"},{"line_number":115,"context_line":"        self._delete_rows_by_version(\u0027QoS\u0027)"},{"line_number":116,"context_line":"        self._delete_rows_by_version(\u0027Queue\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class AddPortQos(commands.BaseCommand):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_67b8f475","line":116,"range":{"start_line":98,"start_character":0,"end_line":116,"end_character":45},"updated":"2016-11-18 23:31:39.000000000","message":"The command here should be more atomic, instead of one command for one scenario. The command aggregation should be implemented in vswitch_impl.py","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        bridge.ports \u003d ports"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"class CreateQos(commands.BaseCommand):"},{"line_number":94,"context_line":"    def __init__(self, api, port_id, qos):"},{"line_number":95,"context_line":"        super(CreateQos, self).__init__(api)"},{"line_number":96,"context_line":"        self.port_id \u003d port_id"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_b4330e13","line":93,"range":{"start_line":93,"start_character":6,"end_line":93,"end_character":15},"updated":"2016-11-20 08:27:54.000000000","message":"There will be other QoS rule types to be supported. Do you plan to modify the existing method (command) to support them all or have dedicated methods (commands)?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        bridge.ports \u003d ports"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"class CreateQos(commands.BaseCommand):"},{"line_number":94,"context_line":"    def __init__(self, api, port_id, qos):"},{"line_number":95,"context_line":"        super(CreateQos, self).__init__(api)"},{"line_number":96,"context_line":"        self.port_id \u003d port_id"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_da527312","line":93,"range":{"start_line":93,"start_character":6,"end_line":93,"end_character":15},"in_reply_to":"7a77a97e_b4330e13","updated":"2016-11-20 10:31:49.000000000","message":"I think modifying existing command can work.","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"533ac3e9d7a2c3fe3cceacc7387923533d093252","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        other_config[\u0027min-rate\u0027] \u003d str(max_bps)"},{"line_number":152,"context_line":"        queue.other_config \u003d other_config"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        qos \u003d txn.insert(self.api.idl.tables[\u0027QoS\u0027])"},{"line_number":155,"context_line":"        qos.type \u003d \u0027linux-htb\u0027"},{"line_number":156,"context_line":"        qos_external_ids \u003d {}"},{"line_number":157,"context_line":"        qos_external_ids[\u0027version\u0027] \u003d str(self.qos.get_version())"},{"line_number":158,"context_line":"        qos_external_ids[\u0027qos-id\u0027] \u003d self.qos.get_id()"},{"line_number":159,"context_line":"        qos_external_ids[\u0027iface-id\u0027] \u003d self.port_id"},{"line_number":160,"context_line":"        qos.external_ids \u003d qos_external_ids"},{"line_number":161,"context_line":"        qos.verify(\u0027queues\u0027)"},{"line_number":162,"context_line":"        qos.queues \u003d {0: queue.uuid}"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.result \u003d qos.uuid"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_3b5322e3","line":162,"range":{"start_line":154,"start_character":0,"end_line":162,"end_character":36},"updated":"2016-12-02 08:27:56.000000000","message":"Can\u0027t you re-use the qos object, and have a single QoS object with multiple queues?","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e3e6ac6f8d37471ffac0df52b3af82349ff7f651","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        other_config[\u0027min-rate\u0027] \u003d str(max_bps)"},{"line_number":152,"context_line":"        queue.other_config \u003d other_config"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        qos \u003d txn.insert(self.api.idl.tables[\u0027QoS\u0027])"},{"line_number":155,"context_line":"        qos.type \u003d \u0027linux-htb\u0027"},{"line_number":156,"context_line":"        qos_external_ids \u003d {}"},{"line_number":157,"context_line":"        qos_external_ids[\u0027version\u0027] \u003d str(self.qos.get_version())"},{"line_number":158,"context_line":"        qos_external_ids[\u0027qos-id\u0027] \u003d self.qos.get_id()"},{"line_number":159,"context_line":"        qos_external_ids[\u0027iface-id\u0027] \u003d self.port_id"},{"line_number":160,"context_line":"        qos.external_ids \u003d qos_external_ids"},{"line_number":161,"context_line":"        qos.verify(\u0027queues\u0027)"},{"line_number":162,"context_line":"        qos.queues \u003d {0: queue.uuid}"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.result \u003d qos.uuid"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_4d62a8ae","line":162,"range":{"start_line":154,"start_character":0,"end_line":162,"end_character":36},"in_reply_to":"3a71b18c_3b5322e3","updated":"2016-12-04 11:32:08.000000000","message":"Port will use qos to connect queue. If one qos maps with multiple queues, the port could not find which queue is its.\n\nMaybe you mean one pair of qos/queue for multiple ports.  It might be feasible, @xuxiaojie, what do you think?","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e814ab7b45777a7dfbce685693afa3d3530a8d99","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        other_config[\u0027min-rate\u0027] \u003d str(max_bps)"},{"line_number":152,"context_line":"        queue.other_config \u003d other_config"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        qos \u003d txn.insert(self.api.idl.tables[\u0027QoS\u0027])"},{"line_number":155,"context_line":"        qos.type \u003d \u0027linux-htb\u0027"},{"line_number":156,"context_line":"        qos_external_ids \u003d {}"},{"line_number":157,"context_line":"        qos_external_ids[\u0027version\u0027] \u003d str(self.qos.get_version())"},{"line_number":158,"context_line":"        qos_external_ids[\u0027qos-id\u0027] \u003d self.qos.get_id()"},{"line_number":159,"context_line":"        qos_external_ids[\u0027iface-id\u0027] \u003d self.port_id"},{"line_number":160,"context_line":"        qos.external_ids \u003d qos_external_ids"},{"line_number":161,"context_line":"        qos.verify(\u0027queues\u0027)"},{"line_number":162,"context_line":"        qos.queues \u003d {0: queue.uuid}"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.result \u003d qos.uuid"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_4dae2182","line":162,"range":{"start_line":154,"start_character":0,"end_line":162,"end_character":36},"in_reply_to":"3a71b18c_4d62a8ae","updated":"2016-12-05 02:41:47.000000000","message":"After discussion with @xuxiaojie, qos can have multiple queues, which is for sophisticating QoS case for one Port.\n\nQos(and its queue) might be shared between ports, the but shared queue might influence the actual QoS(100K queue shared by 2 ports might not end with 100K for each port)\n\nThe safest way for now it still one qos one port.","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"533ac3e9d7a2c3fe3cceacc7387923533d093252","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        self.port_id \u003d port_id"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def run_idl(self, txn):"},{"line_number":173,"context_line":"        conditions \u003d [(\u0027external_ids\u0027, \u0027\u003d\u0027, {\u0027iface-id\u0027: self.port_id})]"},{"line_number":174,"context_line":"        rows_to_delete \u003d []"},{"line_number":175,"context_line":"        for table in [\u0027QoS\u0027, \u0027Queue\u0027]:"},{"line_number":176,"context_line":"            for r in six.itervalues(self.api._tables[table].rows):"},{"line_number":177,"context_line":"                if idlutils.row_match(r, conditions):"},{"line_number":178,"context_line":"                    rows_to_delete.append(r)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        for r in rows_to_delete:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_7b8d9a30","line":177,"range":{"start_line":173,"start_character":0,"end_line":177,"end_character":53},"updated":"2016-12-02 08:27:56.000000000","message":"Could you have used api.db_find here?","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e3e6ac6f8d37471ffac0df52b3af82349ff7f651","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        self.port_id \u003d port_id"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def run_idl(self, txn):"},{"line_number":173,"context_line":"        conditions \u003d [(\u0027external_ids\u0027, \u0027\u003d\u0027, {\u0027iface-id\u0027: self.port_id})]"},{"line_number":174,"context_line":"        rows_to_delete \u003d []"},{"line_number":175,"context_line":"        for table in [\u0027QoS\u0027, \u0027Queue\u0027]:"},{"line_number":176,"context_line":"            for r in six.itervalues(self.api._tables[table].rows):"},{"line_number":177,"context_line":"                if idlutils.row_match(r, conditions):"},{"line_number":178,"context_line":"                    rows_to_delete.append(r)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        for r in rows_to_delete:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_ed6d3499","line":177,"range":{"start_line":173,"start_character":0,"end_line":177,"end_character":53},"in_reply_to":"3a71b18c_7b8d9a30","updated":"2016-12-04 11:32:08.000000000","message":"It is inside the ovs command, I don\u0027t think api.db_find can be used. The logic here is actually the same as api.db_find","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"}],"dragonflow/ovsdb/vswitch_impl.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            if self._check_ofport(iface[\u0027name\u0027], iface[\u0027ofport\u0027]):"},{"line_number":141,"context_line":"                return iface[\u0027ofport\u0027]"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def _get_port_name_by_id(self, port_id):"},{"line_number":144,"context_line":"        ifaces \u003d self.ovsdb.db_find("},{"line_number":145,"context_line":"            \u0027Interface\u0027, (\u0027external_ids\u0027, \u0027\u003d\u0027, {\u0027iface-id\u0027: port_id}),"},{"line_number":146,"context_line":"            columns\u003d[\u0027external_ids\u0027, \u0027name\u0027]).execute()"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_742ed6a5","line":143,"updated":"2016-11-20 08:27:54.000000000","message":"is this method in scope of the patch?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            if self._check_ofport(iface[\u0027name\u0027], iface[\u0027ofport\u0027]):"},{"line_number":141,"context_line":"                return iface[\u0027ofport\u0027]"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def _get_port_name_by_id(self, port_id):"},{"line_number":144,"context_line":"        ifaces \u003d self.ovsdb.db_find("},{"line_number":145,"context_line":"            \u0027Interface\u0027, (\u0027external_ids\u0027, \u0027\u003d\u0027, {\u0027iface-id\u0027: port_id}),"},{"line_number":146,"context_line":"            columns\u003d[\u0027external_ids\u0027, \u0027name\u0027]).execute()"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_1a430b14","line":143,"in_reply_to":"7a77a97e_742ed6a5","updated":"2016-11-20 10:31:49.000000000","message":"yes, it is used at line 172 and line 226","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"57f53f2708cdf8891e11f21984969fa1629da231","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def update_port_qos(self, port_id, qos):"},{"line_number":172,"context_line":"        port_name \u003d self._get_port_name_by_id(port_id)"},{"line_number":173,"context_line":"        if not port_name:"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        max_kbps \u003d qos.get_max_kbps()"},{"line_number":177,"context_line":"        max_burst_kbps \u003d qos.get_max_burst_kbps()"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_1aea2b74","line":174,"range":{"start_line":173,"start_character":7,"end_line":174,"end_character":18},"updated":"2016-11-20 11:14:58.000000000","message":"is this valid case?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5d321086f5176e5bd457a84f2ad2ffb1ba297749","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def update_port_qos(self, port_id, qos):"},{"line_number":172,"context_line":"        port_name \u003d self._get_port_name_by_id(port_id)"},{"line_number":173,"context_line":"        if not port_name:"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        max_kbps \u003d qos.get_max_kbps()"},{"line_number":177,"context_line":"        max_burst_kbps \u003d qos.get_max_burst_kbps()"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_6c4362af","line":174,"range":{"start_line":173,"start_character":7,"end_line":174,"end_character":18},"in_reply_to":"7a77a97e_1aea2b74","updated":"2016-11-21 02:44:12.000000000","message":"yeah, the port might been deleted without awareness. Anyway, we should do nothing if the port is not present in ovs.","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"533ac3e9d7a2c3fe3cceacc7387923533d093252","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        return self._db_get_val(\u0027Interface\u0027, port, \u0027ofport\u0027,"},{"line_number":187,"context_line":"                                check_error\u003dFalse, log_errors\u003dFalse)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def update_port_qos(self, port_id, qos):"},{"line_number":190,"context_line":"        port_name \u003d self._get_port_name_by_id(port_id)"},{"line_number":191,"context_line":"        if not port_name:"},{"line_number":192,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_65033443","line":189,"updated":"2016-12-02 08:27:56.000000000","message":"I am considering whether most of this code should sit in the QoS app, and only the code in ovsdb transactions should be here. What do you think?","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e3e6ac6f8d37471ffac0df52b3af82349ff7f651","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        return self._db_get_val(\u0027Interface\u0027, port, \u0027ofport\u0027,"},{"line_number":187,"context_line":"                                check_error\u003dFalse, log_errors\u003dFalse)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def update_port_qos(self, port_id, qos):"},{"line_number":190,"context_line":"        port_name \u003d self._get_port_name_by_id(port_id)"},{"line_number":191,"context_line":"        if not port_name:"},{"line_number":192,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_0deef0eb","line":189,"in_reply_to":"3a71b18c_65033443","updated":"2016-12-04 11:32:08.000000000","message":"The logic here is a bit complex for ovs interface.  I think it is reasonable to move some logic to qos app.","commit_id":"497e767a570416bb06210fb2b5b7170b86004e1d"}],"dragonflow/tests/common/utils.py":[{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"8c07ccf82a82647b96bb1c979ba8c640e5efdc5c","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        full_args \u003d [\"ovs-vsctl\", \"list\", \"port\"]"},{"line_number":175,"context_line":"        if specify_port:"},{"line_number":176,"context_line":"            full_args.append(specify_port)"},{"line_number":177,"context_line":"        ports_info \u003d utils.execute(full_args, run_as_root\u003dTrue,"},{"line_number":178,"context_line":"                                   process_input\u003dNone)"},{"line_number":179,"context_line":"        return ports_info"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_67720b4b","line":177,"range":{"start_line":177,"start_character":27,"end_line":177,"end_character":34},"updated":"2016-09-26 10:47:16.000000000","message":"here you should better add try exception","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        full_args \u003d [\"ovs-vsctl\", \"list\", \"port\"]"},{"line_number":175,"context_line":"        if specify_port:"},{"line_number":176,"context_line":"            full_args.append(specify_port)"},{"line_number":177,"context_line":"        ports_info \u003d utils.execute(full_args, run_as_root\u003dTrue,"},{"line_number":178,"context_line":"                                   process_input\u003dNone)"},{"line_number":179,"context_line":"        return ports_info"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_6b38c4d3","line":177,"range":{"start_line":177,"start_character":27,"end_line":177,"end_character":34},"in_reply_to":"5a8bc5a2_67720b4b","updated":"2016-09-27 12:09:32.000000000","message":"can it raise exception?","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"8c07ccf82a82647b96bb1c979ba8c640e5efdc5c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            ports_as_dicts.append(res)"},{"line_number":195,"context_line":"        return ports_as_dicts"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _ovsdb_list_qoss(self, qos\u003dNone):"},{"line_number":198,"context_line":"        full_args \u003d [\"ovs-vsctl\", \"list\", \"qos\"]"},{"line_number":199,"context_line":"        if qos:"},{"line_number":200,"context_line":"            full_args.append(qos)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_7d629c3f","line":197,"updated":"2016-09-26 10:47:16.000000000","message":"keep consistent with the name qoses","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"6c28dcb05cecf4e67b16a07cc64e428217a311ff","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            ports_as_dicts.append(res)"},{"line_number":195,"context_line":"        return ports_as_dicts"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _ovsdb_list_qoss(self, qos\u003dNone):"},{"line_number":198,"context_line":"        full_args \u003d [\"ovs-vsctl\", \"list\", \"qos\"]"},{"line_number":199,"context_line":"        if qos:"},{"line_number":200,"context_line":"            full_args.append(qos)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_abb80c12","line":197,"in_reply_to":"5a8bc5a2_7d629c3f","updated":"2016-09-27 12:09:32.000000000","message":"Done","commit_id":"5f0dfe833832ea3199a0e2cd9606f23276314572"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3d02b6f9d1ebbad07328ac02e6089aca88fe491b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            res \u003d {}"},{"line_number":146,"context_line":"            for item in fs:"},{"line_number":147,"context_line":"                item_obj \u003d self._parse_one_item(item)"},{"line_number":148,"context_line":"                if item_obj:"},{"line_number":149,"context_line":"                    res.update(item_obj)"},{"line_number":150,"context_line":"            interfaces_as_dicts.append(res)"},{"line_number":151,"context_line":"        return interfaces_as_dicts"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_876b50b6","line":148,"range":{"start_line":148,"start_character":0,"end_line":148,"end_character":28},"updated":"2016-11-18 23:31:39.000000000","message":"The \u0027if\u0027 is not needed here.","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3d02b6f9d1ebbad07328ac02e6089aca88fe491b","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            res \u003d {}"},{"line_number":203,"context_line":"            for item in fs:"},{"line_number":204,"context_line":"                item_obj \u003d self._parse_one_item(item)"},{"line_number":205,"context_line":"                if item_obj:"},{"line_number":206,"context_line":"                    res.update(item_obj)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"            ports_as_dicts.append(res)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_e7e1642b","line":205,"range":{"start_line":205,"start_character":0,"end_line":205,"end_character":28},"updated":"2016-11-18 23:31:39.000000000","message":"ditto","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3d02b6f9d1ebbad07328ac02e6089aca88fe491b","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            res \u003d {}"},{"line_number":227,"context_line":"            for item in fs:"},{"line_number":228,"context_line":"                item_obj \u003d self._parse_one_item(item)"},{"line_number":229,"context_line":"                if item_obj:"},{"line_number":230,"context_line":"                    res.update(item_obj)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"            qoses_as_dicts.append(res)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_47c938ab","line":229,"range":{"start_line":229,"start_character":0,"end_line":229,"end_character":28},"updated":"2016-11-18 23:31:39.000000000","message":"ditto","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3d02b6f9d1ebbad07328ac02e6089aca88fe491b","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            res \u003d {}"},{"line_number":251,"context_line":"            for item in fs:"},{"line_number":252,"context_line":"                item_obj \u003d self._parse_one_item(item)"},{"line_number":253,"context_line":"                if item_obj:"},{"line_number":254,"context_line":"                    res.update(item_obj)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"            queues_as_dicts.append(res)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_67cc74bb","line":253,"range":{"start_line":253,"start_character":0,"end_line":253,"end_character":28},"updated":"2016-11-18 23:31:39.000000000","message":"ditto","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from dragonflow.tests.common import constants as const"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# TODO(xiaohhui): This should be removed, once the DFPlugin has been removed."},{"line_number":20,"context_line":"DF_PLUGIN \u003d \u0027dragonflow.neutron.plugin.DFPlugin\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_4f3863d3","line":19,"updated":"2016-11-20 08:27:54.000000000","message":"Why is this code needed?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from dragonflow.tests.common import constants as const"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# TODO(xiaohhui): This should be removed, once the DFPlugin has been removed."},{"line_number":20,"context_line":"DF_PLUGIN \u003d \u0027dragonflow.neutron.plugin.DFPlugin\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_5a490330","line":19,"in_reply_to":"7a77a97e_4f3863d3","updated":"2016-11-20 10:31:49.000000000","message":"to make the fullstack of dfplugin don\u0027t fail, some functionality is not supported in dfplugin.","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9827b8957bbf79afd6620450fed1ae39ec32d98f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.common import exceptions"},{"line_number":18,"context_line":"from dragonflow.tests.common import constants as const"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# TODO(xiaohhui): This should be removed, once the DFPlugin has been removed."},{"line_number":21,"context_line":"DF_PLUGIN \u003d \u0027dragonflow.neutron.plugin.DFPlugin\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"WAIT_UNTIL_TRUE_DEFAULT_TIMEOUT \u003d 60"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_85ef0986","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":48},"updated":"2016-12-05 20:02:07.000000000","message":"Shouldn\u0027t this be removed?","commit_id":"c86d13d7b2a98746e137eed91b07f706fb717bdc"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1297ace770e044c514ad30ac4b71a7f86334bc09","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.common import exceptions"},{"line_number":18,"context_line":"from dragonflow.tests.common import constants as const"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# TODO(xiaohhui): This should be removed, once the DFPlugin has been removed."},{"line_number":21,"context_line":"DF_PLUGIN \u003d \u0027dragonflow.neutron.plugin.DFPlugin\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"WAIT_UNTIL_TRUE_DEFAULT_TIMEOUT \u003d 60"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_e0718445","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":48},"in_reply_to":"3a71b18c_85ef0986","updated":"2016-12-06 02:35:32.000000000","message":"Done","commit_id":"c86d13d7b2a98746e137eed91b07f706fb717bdc"}],"dragonflow/tests/fullstack/test_portqos.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"724df1d97fc575ba389f44633b5081dba8ef1815","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        vm \u003d self.store(objects.VMTestObj(self, self.neutron))"},{"line_number":38,"context_line":"        vm_id \u003d vm.create(network\u003dnetwork)"},{"line_number":39,"context_line":"        time.sleep(const.DEFAULT_RESOURCE_READY_TIMEOUT)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        ovsdb \u003d utils.OvsDBParser()"},{"line_number":42,"context_line":"        vm_port_id \u003d ovsdb.get_port_id_by_vm_id(vm_id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_d22d05ff","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":56},"updated":"2016-11-19 05:38:45.000000000","message":"why it is needed? vm.create does not return util the vm is ready","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f66869e94bbd3bc711bece3a931a44751cde3e23","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        vm \u003d self.store(objects.VMTestObj(self, self.neutron))"},{"line_number":38,"context_line":"        vm_id \u003d vm.create(network\u003dnetwork)"},{"line_number":39,"context_line":"        time.sleep(const.DEFAULT_RESOURCE_READY_TIMEOUT)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        ovsdb \u003d utils.OvsDBParser()"},{"line_number":42,"context_line":"        vm_port_id \u003d ovsdb.get_port_id_by_vm_id(vm_id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_e3c14ee5","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":56},"in_reply_to":"7a77a97e_d22d05ff","updated":"2016-11-20 02:07:05.000000000","message":"You are right","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"724df1d97fc575ba389f44633b5081dba8ef1815","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        qospolicy \u003d self.store(objects.QosPolicyTestObj(self.neutron,"},{"line_number":48,"context_line":"                                                        self.nb_api))"},{"line_number":49,"context_line":"        qos_policy_id \u003d qospolicy.create()"},{"line_number":50,"context_line":"        self.assertTrue(qospolicy.exists())"},{"line_number":51,"context_line":"        qospolicy.create_rule(qos_policy_id,"},{"line_number":52,"context_line":"                              {\u0027max_kbps\u0027: \u00271000\u0027, \u0027max_burst_kbps\u0027: \u0027100\u0027},"},{"line_number":53,"context_line":"                              \u0027bandwidth_limit\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_120bfd7d","line":50,"range":{"start_line":50,"start_character":1,"end_line":50,"end_character":43},"updated":"2016-11-19 05:38:45.000000000","message":"It need to wait for some time before doing assert","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f66869e94bbd3bc711bece3a931a44751cde3e23","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        qospolicy \u003d self.store(objects.QosPolicyTestObj(self.neutron,"},{"line_number":48,"context_line":"                                                        self.nb_api))"},{"line_number":49,"context_line":"        qos_policy_id \u003d qospolicy.create()"},{"line_number":50,"context_line":"        self.assertTrue(qospolicy.exists())"},{"line_number":51,"context_line":"        qospolicy.create_rule(qos_policy_id,"},{"line_number":52,"context_line":"                              {\u0027max_kbps\u0027: \u00271000\u0027, \u0027max_burst_kbps\u0027: \u0027100\u0027},"},{"line_number":53,"context_line":"                              \u0027bandwidth_limit\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_63ae1e2f","line":50,"range":{"start_line":50,"start_character":1,"end_line":50,"end_character":43},"in_reply_to":"7a77a97e_120bfd7d","updated":"2016-11-20 02:07:05.000000000","message":"Done","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"724df1d97fc575ba389f44633b5081dba8ef1815","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                              {\u0027dscp_mark\u0027: \u002710\u0027},"},{"line_number":56,"context_line":"                              \u0027dscp_marking\u0027)"},{"line_number":57,"context_line":"        port_param \u003d {\u0027qos_policy_id\u0027: qos_policy_id}"},{"line_number":58,"context_line":"        port.update(port_param)"},{"line_number":59,"context_line":"        logical_port \u003d port.get_logical_port()"},{"line_number":60,"context_line":"        ovsdb \u003d utils.OvsDBParser()"},{"line_number":61,"context_line":"        self.assertEqual(qos_policy_id, logical_port.get_qos_policy_id())"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_921f0db6","line":58,"range":{"start_line":58,"start_character":7,"end_line":58,"end_character":31},"updated":"2016-11-19 05:38:45.000000000","message":"You may need to wait before going down. The lport in df-db intf in ovs may be not ready yet","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f66869e94bbd3bc711bece3a931a44751cde3e23","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                              {\u0027dscp_mark\u0027: \u002710\u0027},"},{"line_number":56,"context_line":"                              \u0027dscp_marking\u0027)"},{"line_number":57,"context_line":"        port_param \u003d {\u0027qos_policy_id\u0027: qos_policy_id}"},{"line_number":58,"context_line":"        port.update(port_param)"},{"line_number":59,"context_line":"        logical_port \u003d port.get_logical_port()"},{"line_number":60,"context_line":"        ovsdb \u003d utils.OvsDBParser()"},{"line_number":61,"context_line":"        self.assertEqual(qos_policy_id, logical_port.get_qos_policy_id())"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_43b3e297","line":58,"range":{"start_line":58,"start_character":7,"end_line":58,"end_character":31},"in_reply_to":"7a77a97e_921f0db6","updated":"2016-11-20 02:07:05.000000000","message":"Done","commit_id":"d6a044311ddb1622f73050203eb49cf91041ccd1"}],"dragonflow/tests/fullstack/test_remote_port.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"90b21bd71d6db06ffea49504971e80eef5ae76f6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class TestRemotePort(test_base.DFTestBase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def test_remote_port(self):"},{"line_number":24,"context_line":"        if cfg.CONF.core_plugin \u003d\u003d utils.DF_PLUGIN:"},{"line_number":25,"context_line":"            return"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        network \u003d self.store(objects.NetworkTestObj(self.neutron, self.nb_api))"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_6f543fc9","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":51},"updated":"2016-11-20 08:27:54.000000000","message":"Cannot you check the ML2 plugin and then perform the tests?","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d54f4fe4090f005b754e35a1bd8f3137496fe95c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class TestRemotePort(test_base.DFTestBase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def test_remote_port(self):"},{"line_number":24,"context_line":"        if cfg.CONF.core_plugin \u003d\u003d utils.DF_PLUGIN:"},{"line_number":25,"context_line":"            return"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        network \u003d self.store(objects.NetworkTestObj(self.neutron, self.nb_api))"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a77a97e_fa564fcc","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":51},"in_reply_to":"7a77a97e_6f543fc9","updated":"2016-11-20 10:31:49.000000000","message":"I kind of prefer current way, as when the time comes and we decide to remove dfplugin, it will be easy to find here.","commit_id":"3c429a0fb226da141f47b9f6dcce089e50450329"}]}
