)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"00cdf6b98a61e3ed61d7154d17508e22c6502ce7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wangyongben \u003cwangyongben@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-08 16:17:16 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add a df notification driver for qos plugin."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When users add qos policy, update qos policy and delete qos policy, the"},{"line_number":10,"context_line":"driver will write the change to df db."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1aa78d24_5277fbd3","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":44},"updated":"2016-07-11 04:28:45.000000000","message":"This is not a notification driver patch, but the whole qos spec, right? I think you need to change the title to reflect the whole patch, but not what you added before.","commit_id":"e22c84429eb71031e92391d6fdf7f0140118465e"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"00cdf6b98a61e3ed61d7154d17508e22c6502ce7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add a df notification driver for qos plugin."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When users add qos policy, update qos policy and delete qos policy, the"},{"line_number":10,"context_line":"driver will write the change to df db."},{"line_number":11,"context_line":"Ml2 MechDriver support bindding qos policy when update network, create"},{"line_number":12,"context_line":"port and update port."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id:I8ebebc40248374a424a14b93f186293a708c6b70"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1aa78d24_7253173a","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":21},"updated":"2016-07-11 04:28:45.000000000","message":"This section should also be rephrased.","commit_id":"e22c84429eb71031e92391d6fdf7f0140118465e"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"2ed8498ba03856fd08933d71d6b108c110a075b2","unresolved":false,"context_lines":[{"line_number":15,"context_line":"the [qos] section of the neutron config file."},{"line_number":16,"context_line":"This patch supports QoS create/update/delete operations, it also supports"},{"line_number":17,"context_line":"a created QoS policy to associate with a neutron port or network."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id:I8ebebc40248374a424a14b93f186293a708c6b70"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"bacf61ea_b8b6fa87","line":18,"updated":"2016-08-04 07:30:27.000000000","message":"please add the corresponding spec:\nImplements: blueprint qos-app","commit_id":"aa745c9ef19d1f4c5903b218b32b0a692e90b9f6"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"eafcd5043c0fb3215dc4bd1176c9948970a2fbd9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"the [qos] section of the neutron config file."},{"line_number":16,"context_line":"This patch supports QoS create/update/delete operations, it also supports"},{"line_number":17,"context_line":"a created QoS policy to associate with a neutron port or network."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id:I8ebebc40248374a424a14b93f186293a708c6b70"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"9ad45d7e_ed0c6644","line":18,"in_reply_to":"9ad45d7e_8d116aaf","updated":"2016-08-09 08:50:04.000000000","message":"i also modified the spec qos-app, added description of qos_notification _driver in port_qos.rst\n\nplease review it:\nhttps://review.openstack.org/#/c/332662","commit_id":"aa745c9ef19d1f4c5903b218b32b0a692e90b9f6"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"edd1772f65019b7cc84fbdaccab8afd36da5fb36","unresolved":false,"context_lines":[{"line_number":15,"context_line":"the [qos] section of the neutron config file."},{"line_number":16,"context_line":"This patch supports QoS create/update/delete operations, it also supports"},{"line_number":17,"context_line":"a created QoS policy to associate with a neutron port or network."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id:I8ebebc40248374a424a14b93f186293a708c6b70"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"9ad45d7e_8d116aaf","line":18,"in_reply_to":"bacf61ea_b8b6fa87","updated":"2016-08-09 08:45:01.000000000","message":"ok, i will add it.","commit_id":"aa745c9ef19d1f4c5903b218b32b0a692e90b9f6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wangyongben \u003cwangyongben@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-10 16:14:43 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add QoS Functionality"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron\u0027s QoS framework support dragonflow as a third-party vendor to"},{"line_number":10,"context_line":"provide QoS functionality."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9ad45d7e_f8bdc268","line":7,"updated":"2016-08-11 09:49:45.000000000","message":"Please mention that the functionality is added only to North Bound, and not implemented in this patch.","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"}],"devstack/plugin.sh":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"61f2e60cea022b85595acc6653ecfeaf2ac67eea","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    Q_SERVICE_PLUGIN_CLASSES+\u003d\",qos\""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    Q_ML2_PLUGIN_EXT_DRIVERS+\u003d\",qos\""},{"line_number":119,"context_line":"    NEUTRON_ML2_CONF\u003d/etc/neutron/plugins/ml2/ml2_conf.ini"},{"line_number":120,"context_line":"    if [[ \"$USE_ML2_PLUGIN\" \u003d\u003d \"True\" ]]; then"},{"line_number":121,"context_line":"        iniset $NEUTRON_ML2_CONF ml2 extension_drivers \"$Q_ML2_PLUGIN_EXT_DRIVERS\""},{"line_number":122,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":1,"id":"5a9d85d2_3a5b3d89","line":119,"range":{"start_line":119,"start_character":4,"end_line":119,"end_character":57},"updated":"2016-06-21 07:16:47.000000000","message":"I guess there should be a variable in devstack to refer to ml2_conf.ini, we should not hard code it","commit_id":"5faebebe5fa01b17f6e0108334a241c14b488b18"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"32502eecb78f3cab29f8c66b2b5a3732428a80e0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    Q_SERVICE_PLUGIN_CLASSES+\u003d\",qos\""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    Q_ML2_PLUGIN_EXT_DRIVERS+\u003d\",qos\""},{"line_number":119,"context_line":"    NEUTRON_ML2_CONF\u003d/etc/neutron/plugins/ml2/ml2_conf.ini"},{"line_number":120,"context_line":"    if [[ \"$USE_ML2_PLUGIN\" \u003d\u003d \"True\" ]]; then"},{"line_number":121,"context_line":"        iniset $NEUTRON_ML2_CONF ml2 extension_drivers \"$Q_ML2_PLUGIN_EXT_DRIVERS\""},{"line_number":122,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":1,"id":"5a9d85d2_9127b711","line":119,"range":{"start_line":119,"start_character":4,"end_line":119,"end_character":57},"in_reply_to":"5a9d85d2_3a5b3d89","updated":"2016-06-21 07:20:20.000000000","message":"see NEUTRON_PLUGIN_CONF_FILENAME in devstack/lib/neutron","commit_id":"5faebebe5fa01b17f6e0108334a241c14b488b18"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"092f0565a84798b5ea011fc1617916845f478976","unresolved":false,"context_lines":[{"line_number":109,"context_line":"# Entry Points"},{"line_number":110,"context_line":"# ------------"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"function configure_qos {"},{"line_number":113,"context_line":"    Q_SERVICE_PLUGIN_CLASSES+\u003d\",qos\""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    if [[ \"$USE_ML2_PLUGIN\" \u003d\u003d \"True\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"3aaa91ec_6f6f3bfc","line":112,"range":{"start_line":112,"start_character":9,"end_line":112,"end_character":22},"updated":"2016-06-24 23:19:23.000000000","message":"We need to config notification_drivers in neutron.conf to use DFQosServiceNotificationDriver","commit_id":"470a7628da1d7450f2fdebf5f248f34af0c6748d"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"49df1a4f2ec495cc0631986f74d341ff8f62ba23","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        iniset $NEUTRON_ML2_CONF ml2 extension_drivers \"$Q_ML2_PLUGIN_EXT_DRIVERS\""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        NEUTRON_CONF\u003d/etc/neutron/neutron.conf"},{"line_number":121,"context_line":"        iniset $NEUTRON_CONF qos notification_drivers \"df_notification_driver\""},{"line_number":122,"context_line":"    fi"},{"line_number":123,"context_line":"}"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"3aaa91ec_f76bab83","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":78},"updated":"2016-06-28 01:44:45.000000000","message":"I think we need to add our new driver to the notification_driver list, instead of setting it to df_notification_driver, which will overwrite other drivers","commit_id":"6dffdaf9419d6d5670bc2361851e1f481c7669be"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    if [[ \"$USE_ML2_PLUGIN\" \u003d\u003d \"True\" ]]; then"},{"line_number":146,"context_line":"        Q_SERVICE_PLUGIN_CLASSES+\u003d\",qos\""},{"line_number":147,"context_line":"        Q_ML2_PLUGIN_EXT_DRIVERS+\u003d\",qos\""},{"line_number":148,"context_line":"        NEUTRON_ML2_CONF\u003d/\"$Q_PLUGIN_CONF_PATH\"/\"$Q_PLUGIN_CONF_FILENAME\""},{"line_number":149,"context_line":"        iniset $NEUTRON_ML2_CONF ml2 extension_drivers \"$Q_ML2_PLUGIN_EXT_DRIVERS\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # NOTE: QoS plugin use \"message_queue\" as default driver if no"}],"source_content_type":"text/x-sh","patch_set":40,"id":"5a8bc5a2_0c2388be","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":24},"updated":"2016-09-23 02:12:26.000000000","message":"nit: \n\nIn the devstack context, there is actually a global Q_PLUGIN_CONF_FILE which is the ml2 conf file. I guess you can just remove this line and just use Q_PLUGIN_CONF_FILE in line 149","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    if [[ \"$USE_ML2_PLUGIN\" \u003d\u003d \"True\" ]]; then"},{"line_number":146,"context_line":"        Q_SERVICE_PLUGIN_CLASSES+\u003d\",qos\""},{"line_number":147,"context_line":"        Q_ML2_PLUGIN_EXT_DRIVERS+\u003d\",qos\""},{"line_number":148,"context_line":"        NEUTRON_ML2_CONF\u003d/\"$Q_PLUGIN_CONF_PATH\"/\"$Q_PLUGIN_CONF_FILENAME\""},{"line_number":149,"context_line":"        iniset $NEUTRON_ML2_CONF ml2 extension_drivers \"$Q_ML2_PLUGIN_EXT_DRIVERS\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # NOTE: QoS plugin use \"message_queue\" as default driver if no"}],"source_content_type":"text/x-sh","patch_set":40,"id":"5a8bc5a2_7d1d9872","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":24},"in_reply_to":"5a8bc5a2_0c2388be","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        #       If ml2 has other mech driver except \"df\", we should add"},{"line_number":157,"context_line":"        #       \"message_queue,df_notification_driver\" to existing"},{"line_number":158,"context_line":"        #       notification driver"},{"line_number":159,"context_line":"        NEUTRON_CONF\u003d/etc/neutron/neutron.conf"},{"line_number":160,"context_line":"        if [[ \"$Q_ML2_PLUGIN_MECHANISM_DRIVERS\" \u003d\u003d \"df\" ]]; then"},{"line_number":161,"context_line":"            NOTIFICATION_DRIVER\u003d\"df_notification_driver\""},{"line_number":162,"context_line":"        else"}],"source_content_type":"text/x-sh","patch_set":40,"id":"5a8bc5a2_872bf381","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":20},"updated":"2016-09-23 02:12:26.000000000","message":"nit:\n\nIn devstack context, NEUTRON_CONF has already been defined. I guess you can just remove this line.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        #       If ml2 has other mech driver except \"df\", we should add"},{"line_number":157,"context_line":"        #       \"message_queue,df_notification_driver\" to existing"},{"line_number":158,"context_line":"        #       notification driver"},{"line_number":159,"context_line":"        NEUTRON_CONF\u003d/etc/neutron/neutron.conf"},{"line_number":160,"context_line":"        if [[ \"$Q_ML2_PLUGIN_MECHANISM_DRIVERS\" \u003d\u003d \"df\" ]]; then"},{"line_number":161,"context_line":"            NOTIFICATION_DRIVER\u003d\"df_notification_driver\""},{"line_number":162,"context_line":"        else"}],"source_content_type":"text/x-sh","patch_set":40,"id":"5a8bc5a2_35808846","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":20},"in_reply_to":"5a8bc5a2_872bf381","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        fi"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        if is_service_enabled q-qos ; then"},{"line_number":192,"context_line":"            configure_qos"},{"line_number":193,"context_line":"        fi"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        NEUTRON_CONF\u003d/etc/neutron/neutron.conf"}],"source_content_type":"text/x-sh","patch_set":40,"id":"5a8bc5a2_07c28385","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":25},"updated":"2016-09-23 02:12:26.000000000","message":"since qos is only for ml2, why not just move this line after line 188, and remove line 145","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        fi"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        if is_service_enabled q-qos ; then"},{"line_number":192,"context_line":"            configure_qos"},{"line_number":193,"context_line":"        fi"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        NEUTRON_CONF\u003d/etc/neutron/neutron.conf"}],"source_content_type":"text/x-sh","patch_set":40,"id":"5a8bc5a2_1559ccfe","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":25},"in_reply_to":"5a8bc5a2_07c28385","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1ebcd92a763b1f0434ff69df91e85a59989ada19","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    iniset /$Q_PLUGIN_CONF_FILE ml2 extension_drivers \"$Q_ML2_PLUGIN_EXT_DRIVERS\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    # NOTE: QoS plugin use \"message_queue\" as default driver if no"},{"line_number":150,"context_line":"    #       notification driver in neutron.conf, or it will use driver"},{"line_number":151,"context_line":"    #       assigned in neutron.conf."},{"line_number":152,"context_line":"    #       If \"df\" is the only mech driver for ml2, we use"},{"line_number":153,"context_line":"    #       \"df_notification_driver\" as notification driver."}],"source_content_type":"text/x-sh","patch_set":43,"id":"5a8bc5a2_905e9374","line":150,"range":{"start_line":150,"start_character":12,"end_line":150,"end_character":24},"updated":"2016-09-24 03:51:05.000000000","message":"what\u0027s this?","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"dd1704099bac9f45de06be32b8456b0fe23ef36b","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    iniset /$Q_PLUGIN_CONF_FILE ml2 extension_drivers \"$Q_ML2_PLUGIN_EXT_DRIVERS\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    # NOTE: QoS plugin use \"message_queue\" as default driver if no"},{"line_number":150,"context_line":"    #       notification driver in neutron.conf, or it will use driver"},{"line_number":151,"context_line":"    #       assigned in neutron.conf."},{"line_number":152,"context_line":"    #       If \"df\" is the only mech driver for ml2, we use"},{"line_number":153,"context_line":"    #       \"df_notification_driver\" as notification driver."}],"source_content_type":"text/x-sh","patch_set":43,"id":"5a8bc5a2_695bde87","line":150,"range":{"start_line":150,"start_character":12,"end_line":150,"end_character":24},"in_reply_to":"5a8bc5a2_905e9374","updated":"2016-09-24 07:31:40.000000000","message":"a driver which called by qos plugin and pass the the north api message data to DF. we add a [qos] in neutron.conf to specify the driver.","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"61f2e60cea022b85595acc6653ecfeaf2ac67eea","unresolved":false,"context_lines":[{"line_number":754,"context_line":"            policy[col] \u003d val"},{"line_number":755,"context_line":"        policy_json \u003d jsonutils.dumps(policy)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        # When delete policy, topic(tenant_id) is not provided, so we must use"},{"line_number":758,"context_line":"        # None as topic when create policy. If not, the policy can not be"},{"line_number":759,"context_line":"        # deleted."},{"line_number":760,"context_line":"        self.driver.create_key(\u0027qospolicy\u0027, policy_id, policy_json, None)"},{"line_number":761,"context_line":"        self._send_db_change_event(\u0027qospolicy\u0027, policy_id, \u0027update\u0027,"},{"line_number":762,"context_line":"                                   policy_json, topic)"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"    def delete_qos_policy(self, policy_id, topic\u003dNone):"},{"line_number":765,"context_line":"        self.driver.delete_key(\u0027qospolicy\u0027, policy_id, topic)"},{"line_number":766,"context_line":"        self._send_db_change_event(\u0027qospolicy\u0027, policy_id, \u0027delete\u0027, policy_id,"},{"line_number":767,"context_line":"                                   SEND_ALL_TOPIC)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    def get_qos_policy(self, policy_id, topic\u003dNone):"},{"line_number":770,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_2eb49ecf","line":767,"range":{"start_line":757,"start_character":0,"end_line":767,"end_character":50},"updated":"2016-06-21 07:16:47.000000000","message":"QosPolicy does contains a tenant_id, take a look at neutron/db/qos/models.py:\nclass QosPolicy(model_base.BASEV2, model_base.HasId, model_base.HasTenant)","commit_id":"5faebebe5fa01b17f6e0108334a241c14b488b18"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"83a4810de76937bd63a2e76ee4373801576ca96e","unresolved":false,"context_lines":[{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"    def get_rules(self):"},{"line_number":1214,"context_line":"        res \u003d []"},{"line_number":1215,"context_line":"        for rule in self.qospolicy.get(\u0027rules\u0027):"},{"line_number":1216,"context_line":"            res.append(QosPolicyRule(rule))"},{"line_number":1217,"context_line":"        return res"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"    def __str__(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_aad5bc43","line":1216,"range":{"start_line":1215,"start_character":8,"end_line":1216,"end_character":43},"updated":"2016-06-30 03:44:10.000000000","message":"rules are different from each other, use a same class QosPolicyRule can\u0027t work good.","commit_id":"6dffdaf9419d6d5670bc2361851e1f481c7669be"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"bec796dca1e26314f0db3450e6ca918eca4ba655","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        policy_json \u003d jsonutils.dumps(policy)"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        self.driver.set_key(\u0027qospolicy\u0027, policy_id, policy_json, topic)"},{"line_number":740,"context_line":"        self._send_db_change_event(\u0027qospolicy\u0027, policy_id, \u0027update\u0027,"},{"line_number":741,"context_line":"                                   policy_json, topic)"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"    def delete_qos_policy(self, policy_id, topic):"},{"line_number":744,"context_line":"        self.driver.delete_key(\u0027qospolicy\u0027, policy_id, topic)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_b3b27304","line":741,"range":{"start_line":740,"start_character":5,"end_line":741,"end_character":54},"updated":"2016-07-06 07:29:45.000000000","message":"the third parameter should be \u0027set\u0027","commit_id":"452e6d962d384102f95f5553f160d50f4f2cd73b"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":729,"context_line":"                                   policy_json, topic)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    def update_qos_policy(self, policy_id, topic, **columns):"},{"line_number":732,"context_line":"        policy \u003d {}"},{"line_number":733,"context_line":"        policy[\u0027id\u0027] \u003d policy_id"},{"line_number":734,"context_line":"        policy[\u0027topic\u0027] \u003d topic"},{"line_number":735,"context_line":"        for col, val in columns.items():"},{"line_number":736,"context_line":"            policy[col] \u003d val"},{"line_number":737,"context_line":"        policy_json \u003d jsonutils.dumps(policy)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_f76f59c1","line":734,"range":{"start_line":732,"start_character":7,"end_line":734,"end_character":31},"updated":"2016-07-22 03:11:55.000000000","message":"please use the following method which is similar in other update_xxx method:\nqospolicy_json \u003d self.driver.get_key(\u0027qospolicy\u0027, id, topic)\npolicy \u003d jsonutils.loads(qospolicy_json)","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0e5e50d4b59259652f40697ff5bf9757c1e4bebc","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"        dscp_marking \u003d None"},{"line_number":1257,"context_line":"        for rule in rules:"},{"line_number":1258,"context_line":"            if rule[\u0027type\u0027] is \u0027dscp_marking\u0027:"},{"line_number":1259,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_marking\u0027, None)"},{"line_number":1260,"context_line":"                break"},{"line_number":1261,"context_line":""},{"line_number":1262,"context_line":"        return dscp_marking"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_2d007e33","line":1259,"range":{"start_line":1259,"start_character":40,"end_line":1259,"end_character":54},"updated":"2016-07-22 03:38:55.000000000","message":"are you sure the key is \"dscp_marking\", I found it is dscp_mark in the Neutron api:\nhttp://developer.openstack.org/api-ref/networking/v2-ext/index.html?expanded\u003dshow-dscp-marking-rule-details-detail","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"e930b246989f96d756a04f6c479a84457e901095","unresolved":false,"context_lines":[{"line_number":730,"context_line":"                                   policy_json, topic)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    def update_qos_policy(self, policy_id, topic, **columns):"},{"line_number":733,"context_line":"        policy \u003d {}"},{"line_number":734,"context_line":"        policy[\u0027id\u0027] \u003d policy_id"},{"line_number":735,"context_line":"        policy[\u0027topic\u0027] \u003d topic"},{"line_number":736,"context_line":"        for col, val in columns.items():"},{"line_number":737,"context_line":"            policy[col] \u003d val"},{"line_number":738,"context_line":"        policy_json \u003d jsonutils.dumps(policy)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_e92096f9","line":735,"range":{"start_line":733,"start_character":8,"end_line":735,"end_character":31},"updated":"2016-07-26 01:38:45.000000000","message":"please look at other update_xxx method:)","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"f9bfe97789a4e810070fd909f086b6a6675de382","unresolved":false,"context_lines":[{"line_number":730,"context_line":"                                   policy_json, topic)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    def update_qos_policy(self, policy_id, topic, **columns):"},{"line_number":733,"context_line":"        policy \u003d {}"},{"line_number":734,"context_line":"        policy[\u0027id\u0027] \u003d policy_id"},{"line_number":735,"context_line":"        policy[\u0027topic\u0027] \u003d topic"},{"line_number":736,"context_line":"        for col, val in columns.items():"},{"line_number":737,"context_line":"            policy[col] \u003d val"},{"line_number":738,"context_line":"        policy_json \u003d jsonutils.dumps(policy)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_87120461","line":735,"range":{"start_line":733,"start_character":8,"end_line":735,"end_character":31},"in_reply_to":"dada55a8_e92096f9","updated":"2016-07-28 08:23:59.000000000","message":"Done","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"e930b246989f96d756a04f6c479a84457e901095","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        max_kbps \u003d None"},{"line_number":1248,"context_line":"        for rule in rules:"},{"line_number":1249,"context_line":"            if rule[\u0027type\u0027] is \u0027bandwidth_limit\u0027:"},{"line_number":1250,"context_line":"                max_kbps \u003d rule.get(\u0027max_kbps\u0027, None)"},{"line_number":1251,"context_line":"                break"},{"line_number":1252,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_e977f6ff","line":1249,"range":{"start_line":1249,"start_character":28,"end_line":1249,"end_character":30},"updated":"2016-07-26 01:38:45.000000000","message":"you should replace \u0027is\u0027 with \u0027\u003d\u003d\u0027, otherwise the two objects will never be equal:)","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"f9bfe97789a4e810070fd909f086b6a6675de382","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"        max_kbps \u003d None"},{"line_number":1248,"context_line":"        for rule in rules:"},{"line_number":1249,"context_line":"            if rule[\u0027type\u0027] is \u0027bandwidth_limit\u0027:"},{"line_number":1250,"context_line":"                max_kbps \u003d rule.get(\u0027max_kbps\u0027, None)"},{"line_number":1251,"context_line":"                break"},{"line_number":1252,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_0707341d","line":1249,"range":{"start_line":1249,"start_character":28,"end_line":1249,"end_character":30},"in_reply_to":"dada55a8_e977f6ff","updated":"2016-07-28 08:23:59.000000000","message":"Done","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"e930b246989f96d756a04f6c479a84457e901095","unresolved":false,"context_lines":[{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"        dscp_marking \u003d None"},{"line_number":1261,"context_line":"        for rule in rules:"},{"line_number":1262,"context_line":"            if rule[\u0027type\u0027] is \u0027dscp_marking\u0027:"},{"line_number":1263,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_marking\u0027, None)"},{"line_number":1264,"context_line":"                break"},{"line_number":1265,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_2960ee34","line":1262,"range":{"start_line":1262,"start_character":28,"end_line":1262,"end_character":30},"updated":"2016-07-26 01:38:45.000000000","message":"ditto","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"f9bfe97789a4e810070fd909f086b6a6675de382","unresolved":false,"context_lines":[{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"        dscp_marking \u003d None"},{"line_number":1261,"context_line":"        for rule in rules:"},{"line_number":1262,"context_line":"            if rule[\u0027type\u0027] is \u0027dscp_marking\u0027:"},{"line_number":1263,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_marking\u0027, None)"},{"line_number":1264,"context_line":"                break"},{"line_number":1265,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_e703000e","line":1262,"range":{"start_line":1262,"start_character":28,"end_line":1262,"end_character":30},"in_reply_to":"dada55a8_2960ee34","updated":"2016-07-28 08:23:59.000000000","message":"Done","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":720,"context_line":"    def create_qos_policy(self, policy_id, topic, **columns):"},{"line_number":721,"context_line":"        policy \u003d {}"},{"line_number":722,"context_line":"        policy[\u0027id\u0027] \u003d policy_id"},{"line_number":723,"context_line":"        policy[\u0027topic\u0027] \u003d topic"},{"line_number":724,"context_line":"        for col, val in columns.items():"},{"line_number":725,"context_line":"            policy[col] \u003d val"},{"line_number":726,"context_line":"        policy_json \u003d jsonutils.dumps(policy)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_1de088f9","line":723,"updated":"2016-08-11 09:49:45.000000000","message":"nit: policy can be created inline, i.e.:\npolicy \u003d {\u0027id\u0027: policy_id, \u0027topic\u0027: topic}","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":722,"context_line":"        policy[\u0027id\u0027] \u003d policy_id"},{"line_number":723,"context_line":"        policy[\u0027topic\u0027] \u003d topic"},{"line_number":724,"context_line":"        for col, val in columns.items():"},{"line_number":725,"context_line":"            policy[col] \u003d val"},{"line_number":726,"context_line":"        policy_json \u003d jsonutils.dumps(policy)"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        self.driver.create_key(\u0027qospolicy\u0027, policy_id, policy_json, topic)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_bdefbce7","line":725,"updated":"2016-08-11 09:49:45.000000000","message":"nit: Why not use policy.update(columns)?\n\nThese two comments are nits, since the same code repeats throughout the entire class.","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"84005e1b8f75b0b81b296e7125f807c0557e30b1","unresolved":false,"context_lines":[{"line_number":888,"context_line":"        return self.subnet.get(\u0027host_routes\u0027, [])"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"class LogicalPort(DbStoreObject):"},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"    def __init__(self, value):"},{"line_number":894,"context_line":"        self.external_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a89bdaa_9916614a","line":891,"range":{"start_line":891,"start_character":5,"end_line":891,"end_character":17},"updated":"2016-09-08 06:32:37.000000000","message":"you need to add a method in this class for getting the qos_policy_id","commit_id":"7244a98b323b32e3913293588ca969b8dccb0782"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"3bebaca2aa9b8790a20f9da537419d1101832696","unresolved":false,"context_lines":[{"line_number":888,"context_line":"        return self.subnet.get(\u0027host_routes\u0027, [])"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"class LogicalPort(DbStoreObject):"},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"    def __init__(self, value):"},{"line_number":894,"context_line":"        self.external_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a89bdaa_145e1de9","line":891,"range":{"start_line":891,"start_character":5,"end_line":891,"end_character":17},"in_reply_to":"9a89bdaa_9916614a","updated":"2016-09-10 08:15:33.000000000","message":"OK.","commit_id":"7244a98b323b32e3913293588ca969b8dccb0782"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"84005e1b8f75b0b81b296e7125f807c0557e30b1","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        dscp_marking \u003d None"},{"line_number":1276,"context_line":"        for rule in rules:"},{"line_number":1277,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027dscp_marking\u0027:"},{"line_number":1278,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_marking\u0027, None)"},{"line_number":1279,"context_line":"                break"},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"        return dscp_marking"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a89bdaa_993d81c6","line":1278,"updated":"2016-09-08 06:32:37.000000000","message":"the key should be \u0027dscp_mark\u0027","commit_id":"7244a98b323b32e3913293588ca969b8dccb0782"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"3bebaca2aa9b8790a20f9da537419d1101832696","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        dscp_marking \u003d None"},{"line_number":1276,"context_line":"        for rule in rules:"},{"line_number":1277,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027dscp_marking\u0027:"},{"line_number":1278,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_marking\u0027, None)"},{"line_number":1279,"context_line":"                break"},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"        return dscp_marking"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a89bdaa_340881d9","line":1278,"in_reply_to":"9a89bdaa_993d81c6","updated":"2016-09-10 08:15:33.000000000","message":"OK.","commit_id":"7244a98b323b32e3913293588ca969b8dccb0782"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"f7db2c9d9e62bae4c94da4bffd21cbf20b22fcab","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1248,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1249,"context_line":"        if rules is []:"},{"line_number":1250,"context_line":"            return None"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"        max_burst_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_052f3b88","line":1249,"range":{"start_line":1249,"start_character":17,"end_line":1249,"end_character":19},"updated":"2016-09-18 07:19:35.000000000","message":"\u003d\u003d","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8d6fd2ae309264cb77eba280a710014256a3119d","unresolved":false,"context_lines":[{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1248,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1249,"context_line":"        if rules is []:"},{"line_number":1250,"context_line":"            return None"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"        max_burst_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_a01ca76a","line":1249,"range":{"start_line":1249,"start_character":17,"end_line":1249,"end_character":19},"in_reply_to":"7a8ec9b2_052f3b88","updated":"2016-09-19 07:20:35.000000000","message":"Done","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"f7db2c9d9e62bae4c94da4bffd21cbf20b22fcab","unresolved":false,"context_lines":[{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"    def get_max_kbps(self):"},{"line_number":1261,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1262,"context_line":"        if rules is []:"},{"line_number":1263,"context_line":"            return None"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":"        max_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_2550b70a","line":1262,"range":{"start_line":1262,"start_character":17,"end_line":1262,"end_character":19},"updated":"2016-09-18 07:19:35.000000000","message":"ditto","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8d6fd2ae309264cb77eba280a710014256a3119d","unresolved":false,"context_lines":[{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"    def get_max_kbps(self):"},{"line_number":1261,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1262,"context_line":"        if rules is []:"},{"line_number":1263,"context_line":"            return None"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":"        max_kbps \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_c017f342","line":1262,"range":{"start_line":1262,"start_character":17,"end_line":1262,"end_character":19},"in_reply_to":"7a8ec9b2_2550b70a","updated":"2016-09-19 07:20:35.000000000","message":"Done","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"f7db2c9d9e62bae4c94da4bffd21cbf20b22fcab","unresolved":false,"context_lines":[{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"    def get_dscp_marking(self):"},{"line_number":1274,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1275,"context_line":"        if rules is []:"},{"line_number":1276,"context_line":"            return None"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"        dscp_marking \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_65563f07","line":1275,"range":{"start_line":1275,"start_character":17,"end_line":1275,"end_character":19},"updated":"2016-09-18 07:19:35.000000000","message":"ditto","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8d6fd2ae309264cb77eba280a710014256a3119d","unresolved":false,"context_lines":[{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"    def get_dscp_marking(self):"},{"line_number":1274,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1275,"context_line":"        if rules is []:"},{"line_number":1276,"context_line":"            return None"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"        dscp_marking \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_e0286f88","line":1275,"range":{"start_line":1275,"start_character":17,"end_line":1275,"end_character":19},"in_reply_to":"7a8ec9b2_65563f07","updated":"2016-09-19 07:20:35.000000000","message":"Done","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1247,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1248,"context_line":"        if rules \u003d\u003d []:"},{"line_number":1249,"context_line":"            return None"},{"line_number":1250,"context_line":""},{"line_number":1251,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1252,"context_line":"        for rule in rules:"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_c7b97beb","line":1249,"range":{"start_line":1248,"start_character":0,"end_line":1249,"end_character":23},"updated":"2016-09-23 02:12:26.000000000","message":"This is actually not required. if it is [], iteration at line 1252 will just skip and the function will return none.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1247,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1248,"context_line":"        if rules \u003d\u003d []:"},{"line_number":1249,"context_line":"            return None"},{"line_number":1250,"context_line":""},{"line_number":1251,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1252,"context_line":"        for rule in rules:"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_95f31c9e","line":1249,"range":{"start_line":1248,"start_character":0,"end_line":1249,"end_character":23},"in_reply_to":"5a8bc5a2_c7b97beb","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1252,"context_line":"        for rule in rules:"},{"line_number":1253,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1254,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027, None)"},{"line_number":1255,"context_line":"                break"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"        return max_burst_kbps"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_c7b09bf7","line":1254,"range":{"start_line":1254,"start_character":60,"end_line":1254,"end_character":64},"updated":"2016-09-23 02:12:26.000000000","message":"get will return None, by default. So, this is not required too","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1252,"context_line":"        for rule in rules:"},{"line_number":1253,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1254,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027, None)"},{"line_number":1255,"context_line":"                break"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"        return max_burst_kbps"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_15846cd2","line":1254,"range":{"start_line":1254,"start_character":60,"end_line":1254,"end_character":64},"in_reply_to":"5a8bc5a2_c7b09bf7","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"    def get_max_kbps(self):"},{"line_number":1260,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1261,"context_line":"        if rules \u003d\u003d []:"},{"line_number":1262,"context_line":"            return None"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        max_kbps \u003d None"},{"line_number":1265,"context_line":"        for rule in rules:"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_e7959740","line":1262,"range":{"start_line":1261,"start_character":0,"end_line":1262,"end_character":23},"updated":"2016-09-23 02:12:26.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"    def get_max_kbps(self):"},{"line_number":1260,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1261,"context_line":"        if rules \u003d\u003d []:"},{"line_number":1262,"context_line":"            return None"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        max_kbps \u003d None"},{"line_number":1265,"context_line":"        for rule in rules:"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_3587a8d8","line":1262,"range":{"start_line":1261,"start_character":0,"end_line":1262,"end_character":23},"in_reply_to":"5a8bc5a2_e7959740","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"        max_kbps \u003d None"},{"line_number":1265,"context_line":"        for rule in rules:"},{"line_number":1266,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1267,"context_line":"                max_kbps \u003d rule.get(\u0027max_kbps\u0027, None)"},{"line_number":1268,"context_line":"                break"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":"        return max_kbps"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_27a05f9f","line":1267,"range":{"start_line":1267,"start_character":48,"end_line":1267,"end_character":52},"updated":"2016-09-23 02:12:26.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"        max_kbps \u003d None"},{"line_number":1265,"context_line":"        for rule in rules:"},{"line_number":1266,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1267,"context_line":"                max_kbps \u003d rule.get(\u0027max_kbps\u0027, None)"},{"line_number":1268,"context_line":"                break"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":"        return max_kbps"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_95787cf4","line":1267,"range":{"start_line":1267,"start_character":48,"end_line":1267,"end_character":52},"in_reply_to":"5a8bc5a2_27a05f9f","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def get_dscp_marking(self):"},{"line_number":1273,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1274,"context_line":"        if rules \u003d\u003d []:"},{"line_number":1275,"context_line":"            return None"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"        dscp_marking \u003d None"},{"line_number":1278,"context_line":"        for rule in rules:"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_6788a723","line":1275,"range":{"start_line":1274,"start_character":0,"end_line":1275,"end_character":23},"updated":"2016-09-23 02:12:26.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def get_dscp_marking(self):"},{"line_number":1273,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1274,"context_line":"        if rules \u003d\u003d []:"},{"line_number":1275,"context_line":"            return None"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"        dscp_marking \u003d None"},{"line_number":1278,"context_line":"        for rule in rules:"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_b573b814","line":1275,"range":{"start_line":1274,"start_character":0,"end_line":1275,"end_character":23},"in_reply_to":"5a8bc5a2_6788a723","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":1277,"context_line":"        dscp_marking \u003d None"},{"line_number":1278,"context_line":"        for rule in rules:"},{"line_number":1279,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027dscp_marking\u0027:"},{"line_number":1280,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_mark\u0027, None)"},{"line_number":1281,"context_line":"                break"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"        return dscp_marking"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_878db333","line":1280,"range":{"start_line":1280,"start_character":53,"end_line":1280,"end_character":57},"updated":"2016-09-23 02:12:26.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":1277,"context_line":"        dscp_marking \u003d None"},{"line_number":1278,"context_line":"        for rule in rules:"},{"line_number":1279,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027dscp_marking\u0027:"},{"line_number":1280,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_mark\u0027, None)"},{"line_number":1281,"context_line":"                break"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"        return dscp_marking"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_d5604438","line":1280,"range":{"start_line":1280,"start_character":53,"end_line":1280,"end_character":57},"in_reply_to":"5a8bc5a2_878db333","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1ebcd92a763b1f0434ff69df91e85a59989ada19","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        except Exception:"},{"line_number":769,"context_line":"            LOG.exception(_LE(\u0027Could not get qos policy %s\u0027), policy_id)"},{"line_number":770,"context_line":"            return None"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":774,"context_line":"class DbStoreObject(object):"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_332dc946","line":771,"updated":"2016-09-24 03:51:05.000000000","message":"get_all_qos_polices() is needed when pub/sub is not enabled.","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"dd1704099bac9f45de06be32b8456b0fe23ef36b","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        except Exception:"},{"line_number":769,"context_line":"            LOG.exception(_LE(\u0027Could not get qos policy %s\u0027), policy_id)"},{"line_number":770,"context_line":"            return None"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":774,"context_line":"class DbStoreObject(object):"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_c985d2ad","line":771,"in_reply_to":"5a8bc5a2_332dc946","updated":"2016-09-24 07:31:40.000000000","message":"it Don\u0027t need this here. you can see the patch \"add port qos code\".","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1ebcd92a763b1f0434ff69df91e85a59989ada19","unresolved":false,"context_lines":[{"line_number":1243,"context_line":"    def get_version(self):"},{"line_number":1244,"context_line":"        return self.qospolicy.get(\u0027version\u0027)"},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1247,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1248,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1249,"context_line":"        for rule in rules:"},{"line_number":1250,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1251,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027)"},{"line_number":1252,"context_line":"                break"},{"line_number":1253,"context_line":""},{"line_number":1254,"context_line":"        return max_burst_kbps"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"    def get_max_kbps(self):"},{"line_number":1257,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1258,"context_line":"        max_kbps \u003d None"},{"line_number":1259,"context_line":"        for rule in rules:"},{"line_number":1260,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1261,"context_line":"                max_kbps \u003d rule.get(\u0027max_kbps\u0027)"},{"line_number":1262,"context_line":"                break"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        return max_kbps"},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"    def get_dscp_marking(self):"},{"line_number":1267,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1268,"context_line":"        dscp_marking \u003d None"},{"line_number":1269,"context_line":"        for rule in rules:"},{"line_number":1270,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027dscp_marking\u0027:"},{"line_number":1271,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_mark\u0027)"},{"line_number":1272,"context_line":"                break"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"        return dscp_marking"},{"line_number":1275,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_13aa8d70","line":1272,"range":{"start_line":1246,"start_character":0,"end_line":1272,"end_character":21},"updated":"2016-09-24 03:51:05.000000000","message":"all these 3 methods got same structure, I think you could define a common method, such as get_rule(type)","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"dd1704099bac9f45de06be32b8456b0fe23ef36b","unresolved":false,"context_lines":[{"line_number":1243,"context_line":"    def get_version(self):"},{"line_number":1244,"context_line":"        return self.qospolicy.get(\u0027version\u0027)"},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"    def get_max_burst_kbps(self):"},{"line_number":1247,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1248,"context_line":"        max_burst_kbps \u003d None"},{"line_number":1249,"context_line":"        for rule in rules:"},{"line_number":1250,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1251,"context_line":"                max_burst_kbps \u003d rule.get(\u0027max_burst_kbps\u0027)"},{"line_number":1252,"context_line":"                break"},{"line_number":1253,"context_line":""},{"line_number":1254,"context_line":"        return max_burst_kbps"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"    def get_max_kbps(self):"},{"line_number":1257,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1258,"context_line":"        max_kbps \u003d None"},{"line_number":1259,"context_line":"        for rule in rules:"},{"line_number":1260,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027bandwidth_limit\u0027:"},{"line_number":1261,"context_line":"                max_kbps \u003d rule.get(\u0027max_kbps\u0027)"},{"line_number":1262,"context_line":"                break"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        return max_kbps"},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"    def get_dscp_marking(self):"},{"line_number":1267,"context_line":"        rules \u003d self.qospolicy.get(\u0027rules\u0027)"},{"line_number":1268,"context_line":"        dscp_marking \u003d None"},{"line_number":1269,"context_line":"        for rule in rules:"},{"line_number":1270,"context_line":"            if rule[\u0027type\u0027] \u003d\u003d \u0027dscp_marking\u0027:"},{"line_number":1271,"context_line":"                dscp_marking \u003d rule.get(\u0027dscp_mark\u0027)"},{"line_number":1272,"context_line":"                break"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"        return dscp_marking"},{"line_number":1275,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_e491d59a","line":1272,"range":{"start_line":1246,"start_character":0,"end_line":1272,"end_character":21},"in_reply_to":"5a8bc5a2_13aa8d70","updated":"2016-09-24 07:31:40.000000000","message":"each method returns one attibute of qospolicy, i think is simpale and clear.","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"73db904424e0ccbcaa6137303663877bb31975b4","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"        return dscp_marking"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"    def __str__(self):"},{"line_number":1309,"context_line":"        return self.qospolicy.__str__()"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_85274cb5","line":1309,"updated":"2016-10-31 13:26:27.000000000","message":"Please use str(...) and not obj.__str__()","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1908d9cd1f89faf3cac66d7bab34b8e6030a1e4e","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"        return dscp_marking"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"    def __str__(self):"},{"line_number":1309,"context_line":"        return self.qospolicy.__str__()"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_c2276810","line":1309,"in_reply_to":"ba5da102_85274cb5","updated":"2016-11-01 02:01:22.000000000","message":"Done, and we may need to unify the use of str in this file, as I see many other objects still use __str__()","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7fbcca7b0cd23b2eb316ad2512a08c69dc073b6d","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"        return dscp_marking"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"    def __str__(self):"},{"line_number":1309,"context_line":"        return str(self.qospolicy)"}],"source_content_type":"text/x-python","patch_set":50,"id":"ba5da102_16af6d7d","line":1309,"updated":"2016-11-03 15:46:18.000000000","message":"re: __str__ -\u003e str(), yes we should. I\u0027ll prepare a patch next week.","commit_id":"85af773f41cba46f68a5792f08d61dfd5efe13c3"}],"dragonflow/db/neutron/lockedobjects_db.py":[{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    elif RESOURCE_QOS_POLICY_CREATE_OR_UPDATE \u003d\u003d type:"},{"line_number":117,"context_line":"        lock_id \u003d args[0][2][\u0027tenant_id\u0027]"},{"line_number":118,"context_line":"    elif RESOURCE_QOS_POLICY_DELETE \u003d\u003d type:"},{"line_number":119,"context_line":"        # when delete qos policy, there\u0027s no tenant_id in args."},{"line_number":120,"context_line":"        lock_id \u003d GLOBAL_LOCK_ID"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    if not lock_id:"},{"line_number":123,"context_line":"        lock_id \u003d GLOBAL_LOCK_ID"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_2a87c4b5","line":120,"range":{"start_line":119,"start_character":8,"end_line":120,"end_character":32},"updated":"2016-07-22 03:11:55.000000000","message":"Is it still lack tenant_id now, I saw you use tenant_id in delete_qos method in driver??","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"e930b246989f96d756a04f6c479a84457e901095","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    elif RESOURCE_QOS_POLICY_CREATE_OR_UPDATE \u003d\u003d type:"},{"line_number":114,"context_line":"        lock_id \u003d args[0][2][\u0027tenant_id\u0027]"},{"line_number":115,"context_line":"    elif RESOURCE_QOS_POLICY_DELETE \u003d\u003d type:"},{"line_number":116,"context_line":"        # when delete qos policy, there\u0027s no tenant_id in args."},{"line_number":117,"context_line":"        lock_id \u003d GLOBAL_LOCK_ID"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    if not lock_id:"},{"line_number":120,"context_line":"        lock_id \u003d GLOBAL_LOCK_ID"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_495d6278","line":117,"range":{"start_line":116,"start_character":8,"end_line":117,"end_character":32},"updated":"2016-07-26 01:38:45.000000000","message":"still using global lock id?","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"f9bfe97789a4e810070fd909f086b6a6675de382","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    elif RESOURCE_QOS_POLICY_CREATE_OR_UPDATE \u003d\u003d type:"},{"line_number":114,"context_line":"        lock_id \u003d args[0][2][\u0027tenant_id\u0027]"},{"line_number":115,"context_line":"    elif RESOURCE_QOS_POLICY_DELETE \u003d\u003d type:"},{"line_number":116,"context_line":"        # when delete qos policy, there\u0027s no tenant_id in args."},{"line_number":117,"context_line":"        lock_id \u003d GLOBAL_LOCK_ID"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    if not lock_id:"},{"line_number":120,"context_line":"        lock_id \u003d GLOBAL_LOCK_ID"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_81f5c984","line":117,"range":{"start_line":116,"start_character":8,"end_line":117,"end_character":32},"in_reply_to":"dada55a8_495d6278","updated":"2016-07-28 08:23:59.000000000","message":"yes, we need it. because the lock need get tenant_id from input parameters of delete_policy, but tenant_id is not contained in input parameters.","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"}],"dragonflow/neutron/ml2/mech_driver.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"61f2e60cea022b85595acc6653ecfeaf2ac67eea","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        registry.subscribe(self.delete_security_group_rule,"},{"line_number":89,"context_line":"                           resources.SECURITY_GROUP_RULE,"},{"line_number":90,"context_line":"                           events.BEFORE_DELETE)"},{"line_number":91,"context_line":"        rpc_registry.subscribe(self.handle_qos_notification,"},{"line_number":92,"context_line":"                               api_resources.QOS_POLICY)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.connection \u003d n_rpc.create_connection()"},{"line_number":95,"context_line":"        self._register_rpc_consumers(self.connection)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_0ebd6268","line":92,"range":{"start_line":91,"start_character":0,"end_line":92,"end_character":56},"updated":"2016-06-21 07:16:47.000000000","message":"Neutron-server uses RPC to communicate with l2 agent, but we don\u0027t, right? Refer to\nhttp://docs.openstack.org/developer/neutron/devref/quality_of_service.html#rpc-communication","commit_id":"5faebebe5fa01b17f6e0108334a241c14b488b18"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            subnet_dict[\u0027name\u0027] \u003d subnet[\u0027name\u0027]"},{"line_number":229,"context_line":"            subnet_dict[\u0027enable_dhcp\u0027] \u003d subnet[\u0027enable_dhcp\u0027]"},{"line_number":230,"context_line":"            subnet_dict[\u0027lswitch\u0027] \u003d subnet[\u0027network_id\u0027]"},{"line_number":231,"context_line":"            subnet_dict[\u0027dns_nameservers\u0027] \u003d subnet[\u0027dns_nameservers\u0027]"},{"line_number":232,"context_line":"            subnet_dict[\u0027gateway_ip\u0027] \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":233,"context_line":"            subnet_dict[\u0027host_routes\u0027] \u003d subnet[\u0027host_routes\u0027]"},{"line_number":234,"context_line":"            subnet_dict[\u0027cidr\u0027] \u003d subnet[\u0027cidr\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_377571ca","line":231,"range":{"start_line":231,"start_character":51,"end_line":231,"end_character":70},"updated":"2016-07-22 03:11:55.000000000","message":"optional field, consider use subnet.get(xxx, [])","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            subnet_dict[\u0027lswitch\u0027] \u003d subnet[\u0027network_id\u0027]"},{"line_number":231,"context_line":"            subnet_dict[\u0027dns_nameservers\u0027] \u003d subnet[\u0027dns_nameservers\u0027]"},{"line_number":232,"context_line":"            subnet_dict[\u0027gateway_ip\u0027] \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":233,"context_line":"            subnet_dict[\u0027host_routes\u0027] \u003d subnet[\u0027host_routes\u0027]"},{"line_number":234,"context_line":"            subnet_dict[\u0027cidr\u0027] \u003d subnet[\u0027cidr\u0027]"},{"line_number":235,"context_line":"            subnet_dict[\u0027id\u0027] \u003d subnet[\u0027id\u0027]"},{"line_number":236,"context_line":"            subnets.append(subnet_dict)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_777b69be","line":233,"range":{"start_line":233,"start_character":41,"end_line":233,"end_character":62},"updated":"2016-07-22 03:11:55.000000000","message":"ditto","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            subnet_dict[\u0027gateway_ip\u0027] \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":233,"context_line":"            subnet_dict[\u0027host_routes\u0027] \u003d subnet[\u0027host_routes\u0027]"},{"line_number":234,"context_line":"            subnet_dict[\u0027cidr\u0027] \u003d subnet[\u0027cidr\u0027]"},{"line_number":235,"context_line":"            subnet_dict[\u0027id\u0027] \u003d subnet[\u0027id\u0027]"},{"line_number":236,"context_line":"            subnets.append(subnet_dict)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        return subnets"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_d7333512","line":235,"range":{"start_line":235,"start_character":12,"end_line":235,"end_character":44},"updated":"2016-07-22 03:11:55.000000000","message":"please add topic to subnet, you can see this patch:\nhttps://review.openstack.org/#/c/343155/","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            id\u003dnetwork[\u0027id\u0027],"},{"line_number":247,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":248,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":249,"context_line":"            network_type\u003dnetwork[\u0027provider:network_type\u0027],"},{"line_number":250,"context_line":"            segmentation_id\u003dnetwork[\u0027provider:segmentation_id\u0027],"},{"line_number":251,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":252,"context_line":"            mtu\u003dnetwork[\u0027mtu\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_b71de174","line":249,"range":{"start_line":249,"start_character":25,"end_line":249,"end_character":58},"updated":"2016-07-22 03:11:55.000000000","message":"network.get() method","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":248,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":249,"context_line":"            network_type\u003dnetwork[\u0027provider:network_type\u0027],"},{"line_number":250,"context_line":"            segmentation_id\u003dnetwork[\u0027provider:segmentation_id\u0027],"},{"line_number":251,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":252,"context_line":"            mtu\u003dnetwork[\u0027mtu\u0027],"},{"line_number":253,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_17114d5d","line":250,"range":{"start_line":250,"start_character":28,"end_line":250,"end_character":64},"updated":"2016-07-22 03:11:55.000000000","message":"ditto","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            network_type\u003dnetwork[\u0027provider:network_type\u0027],"},{"line_number":250,"context_line":"            segmentation_id\u003dnetwork[\u0027provider:segmentation_id\u0027],"},{"line_number":251,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":252,"context_line":"            mtu\u003dnetwork[\u0027mtu\u0027],"},{"line_number":253,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"},{"line_number":254,"context_line":"            subnets\u003dsubnets,"},{"line_number":255,"context_line":"            qos_policy_id\u003dnetwork.get(\u0027qos_policy_id\u0027, None))"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_aaa0d4f4","line":252,"range":{"start_line":252,"start_character":12,"end_line":252,"end_character":31},"updated":"2016-07-22 03:11:55.000000000","message":"ditto","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":477,"context_line":"            LOG.debug(\"network %s is not found in DB, might have \""},{"line_number":478,"context_line":"                      \"been deleted concurrently\" % net_id)"},{"line_number":479,"context_line":"            return"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"},{"line_number":482,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_0ac920ac","line":479,"range":{"start_line":479,"start_character":12,"end_line":479,"end_character":18},"updated":"2016-07-22 03:11:55.000000000","message":"please add return in other similar places, for example, delete_network_postcommit","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"e930b246989f96d756a04f6c479a84457e901095","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            subnet_dict[\u0027gateway_ip\u0027] \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":232,"context_line":"            subnet_dict[\u0027host_routes\u0027] \u003d subnet[\u0027host_routes\u0027]"},{"line_number":233,"context_line":"            subnet_dict[\u0027cidr\u0027] \u003d subnet[\u0027cidr\u0027]"},{"line_number":234,"context_line":"            subnet_dict[\u0027id\u0027] \u003d subnet[\u0027id\u0027]"},{"line_number":235,"context_line":"            subnets.append(subnet_dict)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        return subnets"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_e94ed6bf","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":44},"updated":"2016-07-26 01:38:45.000000000","message":"add topic key please","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"f9bfe97789a4e810070fd909f086b6a6675de382","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            subnet_dict[\u0027gateway_ip\u0027] \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":232,"context_line":"            subnet_dict[\u0027host_routes\u0027] \u003d subnet[\u0027host_routes\u0027]"},{"line_number":233,"context_line":"            subnet_dict[\u0027cidr\u0027] \u003d subnet[\u0027cidr\u0027]"},{"line_number":234,"context_line":"            subnet_dict[\u0027id\u0027] \u003d subnet[\u0027id\u0027]"},{"line_number":235,"context_line":"            subnets.append(subnet_dict)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        return subnets"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_011719a4","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":44},"in_reply_to":"dada55a8_e94ed6bf","updated":"2016-07-28 08:23:59.000000000","message":"Done","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"e930b246989f96d756a04f6c479a84457e901095","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            id\u003dnetwork[\u0027id\u0027],"},{"line_number":246,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":247,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":248,"context_line":"            network_type\u003dnetwork[\u0027provider:network_type\u0027],"},{"line_number":249,"context_line":"            segmentation_id\u003dnetwork[\u0027provider:segmentation_id\u0027],"},{"line_number":250,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":251,"context_line":"            mtu\u003dnetwork[\u0027mtu\u0027],"},{"line_number":252,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_09ca4a1a","line":249,"range":{"start_line":248,"start_character":12,"end_line":249,"end_character":64},"updated":"2016-07-26 01:38:45.000000000","message":"optional fields, please use get(xxx, None) method","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"f9bfe97789a4e810070fd909f086b6a6675de382","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            id\u003dnetwork[\u0027id\u0027],"},{"line_number":246,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":247,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":248,"context_line":"            network_type\u003dnetwork[\u0027provider:network_type\u0027],"},{"line_number":249,"context_line":"            segmentation_id\u003dnetwork[\u0027provider:segmentation_id\u0027],"},{"line_number":250,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":251,"context_line":"            mtu\u003dnetwork[\u0027mtu\u0027],"},{"line_number":252,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_c11d01bf","line":249,"range":{"start_line":248,"start_character":12,"end_line":249,"end_character":64},"in_reply_to":"dada55a8_09ca4a1a","updated":"2016-07-28 08:23:59.000000000","message":"Done","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"e930b246989f96d756a04f6c479a84457e901095","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":476,"context_line":"            LOG.debug(\"network %s is not found in DB, might have \""},{"line_number":477,"context_line":"                      \"been deleted concurrently\" % net_id)"},{"line_number":478,"context_line":"            return"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_89fd9a3d","line":478,"range":{"start_line":478,"start_character":12,"end_line":478,"end_character":18},"updated":"2016-07-26 01:38:45.000000000","message":"consider add return in other similar function","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"f9bfe97789a4e810070fd909f086b6a6675de382","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":476,"context_line":"            LOG.debug(\"network %s is not found in DB, might have \""},{"line_number":477,"context_line":"                      \"been deleted concurrently\" % net_id)"},{"line_number":478,"context_line":"            return"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_017ef9e3","line":478,"range":{"start_line":478,"start_character":12,"end_line":478,"end_character":18},"in_reply_to":"dada55a8_89fd9a3d","updated":"2016-07-28 08:23:59.000000000","message":"Done","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":206,"context_line":"            LOG.debug(\"lswitch %s is not found in DF DB, might have \""},{"line_number":207,"context_line":"                      \"been deleted concurrently\" % network_id)"},{"line_number":208,"context_line":"            return"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_7da544a0","line":208,"updated":"2016-08-11 09:49:45.000000000","message":"Why is this change needed?","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"            port \u003d self._get_dhcp_port_for_subnet(plugin_context, subnet_id)"},{"line_number":232,"context_line":"            dhcp_address \u003d self._get_ip_from_port(port)"},{"line_number":233,"context_line":"            subnet_dict \u003d {}"},{"line_number":234,"context_line":"            subnet_dict[\u0027dhcp_ip\u0027] \u003d dhcp_address"},{"line_number":235,"context_line":"            subnet_dict[\u0027name\u0027] \u003d subnet[\u0027name\u0027]"},{"line_number":236,"context_line":"            subnet_dict[\u0027enable_dhcp\u0027] \u003d subnet[\u0027enable_dhcp\u0027]"},{"line_number":237,"context_line":"            subnet_dict[\u0027lswitch\u0027] \u003d subnet[\u0027network_id\u0027]"},{"line_number":238,"context_line":"            subnet_dict[\u0027dns_nameservers\u0027] \u003d subnet.get(\u0027dns_nameservers\u0027, [])"},{"line_number":239,"context_line":"            subnet_dict[\u0027gateway_ip\u0027] \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":240,"context_line":"            subnet_dict[\u0027host_routes\u0027] \u003d subnet.get(\u0027host_routes\u0027, [])"},{"line_number":241,"context_line":"            subnet_dict[\u0027cidr\u0027] \u003d subnet[\u0027cidr\u0027]"},{"line_number":242,"context_line":"            subnet_dict[\u0027id\u0027] \u003d subnet[\u0027id\u0027]"},{"line_number":243,"context_line":"            subnet_dict[\u0027topic\u0027] \u003d subnet[\u0027tenant_id\u0027]"},{"line_number":244,"context_line":"            subnets.append(subnet_dict)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        return subnets"}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_bdfa1c41","line":243,"range":{"start_line":233,"start_character":0,"end_line":243,"end_character":54},"updated":"2016-08-11 09:49:45.000000000","message":"subnet_dict should be created in line, i,e,: subnet_dict \u003d {\n...: ...,\n...: ...,\n...\n}","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"2c316313f344a149dc33abcb40434b9d3255f6cf","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        context.current[\u0027db_version\u0027] \u003d nw_version"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def _get_subnets_for_update_network(self, context, network):"},{"line_number":234,"context_line":"        subnet_id_list \u003d network.get(\u0027subnets\u0027, None)"},{"line_number":235,"context_line":"        if subnet_id_list is None:"},{"line_number":236,"context_line":"            return []"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_197a6a77","line":234,"range":{"start_line":234,"start_character":46,"end_line":234,"end_character":52},"updated":"2016-08-30 03:39:56.000000000","message":"not needed, the default value is None","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"7db37876073def4798f1210a9f517e5bb5559c4f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        context.current[\u0027db_version\u0027] \u003d nw_version"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def _get_subnets_for_update_network(self, context, network):"},{"line_number":234,"context_line":"        subnet_id_list \u003d network.get(\u0027subnets\u0027, None)"},{"line_number":235,"context_line":"        if subnet_id_list is None:"},{"line_number":236,"context_line":"            return []"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_7f1cdd13","line":234,"range":{"start_line":234,"start_character":46,"end_line":234,"end_character":52},"in_reply_to":"fa7ab95a_197a6a77","updated":"2016-08-31 09:32:58.000000000","message":"Done","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"2c316313f344a149dc33abcb40434b9d3255f6cf","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        for subnet_id in subnet_id_list:"},{"line_number":242,"context_line":"            subnet \u003d core_plugin.get_subnet(plugin_context, subnet_id)"},{"line_number":243,"context_line":"            if subnet is None:"},{"line_number":244,"context_line":"                LOG.debug(\"DFMechDriver: Could not find subnet %s\", subnet_id)"},{"line_number":245,"context_line":"                continue"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            port \u003d self._get_dhcp_port_for_subnet(plugin_context, subnet_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_79dc5673","line":244,"range":{"start_line":244,"start_character":20,"end_line":244,"end_character":25},"updated":"2016-08-30 03:39:56.000000000","message":"error log?","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"7db37876073def4798f1210a9f517e5bb5559c4f","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        for subnet_id in subnet_id_list:"},{"line_number":242,"context_line":"            subnet \u003d core_plugin.get_subnet(plugin_context, subnet_id)"},{"line_number":243,"context_line":"            if subnet is None:"},{"line_number":244,"context_line":"                LOG.debug(\"DFMechDriver: Could not find subnet %s\", subnet_id)"},{"line_number":245,"context_line":"                continue"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            port \u003d self._get_dhcp_port_for_subnet(plugin_context, subnet_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_5fa2b99b","line":244,"range":{"start_line":244,"start_character":20,"end_line":244,"end_character":25},"in_reply_to":"fa7ab95a_79dc5673","updated":"2016-08-31 09:32:58.000000000","message":"Done","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"2c316313f344a149dc33abcb40434b9d3255f6cf","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":504,"context_line":"                                      nw_version\u003dsubnet[\u0027db_version\u0027])"},{"line_number":505,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":506,"context_line":"            LOG.debug(\"network %s is not found in DB, might have \""},{"line_number":507,"context_line":"                      \"been deleted concurrently\" % net_id)"},{"line_number":508,"context_line":"            return"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_99011ab2","line":506,"range":{"start_line":506,"start_character":16,"end_line":506,"end_character":21},"updated":"2016-08-30 03:39:56.000000000","message":"exception","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"7db37876073def4798f1210a9f517e5bb5559c4f","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":504,"context_line":"                                      nw_version\u003dsubnet[\u0027db_version\u0027])"},{"line_number":505,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":506,"context_line":"            LOG.debug(\"network %s is not found in DB, might have \""},{"line_number":507,"context_line":"                      \"been deleted concurrently\" % net_id)"},{"line_number":508,"context_line":"            return"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_9f48c1ce","line":506,"range":{"start_line":506,"start_character":16,"end_line":506,"end_character":21},"in_reply_to":"fa7ab95a_99011ab2","updated":"2016-08-31 09:32:58.000000000","message":"Done","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"2c316313f344a149dc33abcb40434b9d3255f6cf","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":504,"context_line":"                                      nw_version\u003dsubnet[\u0027db_version\u0027])"},{"line_number":505,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":506,"context_line":"            LOG.debug(\"network %s is not found in DB, might have \""},{"line_number":507,"context_line":"                      \"been deleted concurrently\" % net_id)"},{"line_number":508,"context_line":"            return"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_59ccf269","line":507,"range":{"start_line":506,"start_character":54,"end_line":507,"end_character":48},"updated":"2016-08-30 03:39:56.000000000","message":"may be misleading, remove it.","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"7db37876073def4798f1210a9f517e5bb5559c4f","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":504,"context_line":"                                      nw_version\u003dsubnet[\u0027db_version\u0027])"},{"line_number":505,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":506,"context_line":"            LOG.debug(\"network %s is not found in DB, might have \""},{"line_number":507,"context_line":"                      \"been deleted concurrently\" % net_id)"},{"line_number":508,"context_line":"            return"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_bf4585b4","line":507,"range":{"start_line":506,"start_character":54,"end_line":507,"end_character":48},"in_reply_to":"fa7ab95a_59ccf269","updated":"2016-08-31 09:32:58.000000000","message":"Done","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"2c316313f344a149dc33abcb40434b9d3255f6cf","unresolved":false,"context_lines":[{"line_number":643,"context_line":"            topic \u003d port[\u0027tenant_id\u0027]"},{"line_number":644,"context_line":"            self.nb_api.delete_lport(id\u003dport_id, topic\u003dtopic)"},{"line_number":645,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":646,"context_line":"            LOG.debug(\"port %s is not found in DF DB, might have \""},{"line_number":647,"context_line":"                      \"been deleted concurrently\" % port_id)"},{"line_number":648,"context_line":"            return"},{"line_number":649,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_b9bfbea8","line":646,"range":{"start_line":646,"start_character":16,"end_line":646,"end_character":21},"updated":"2016-08-30 03:39:56.000000000","message":"do it too","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ccf1ae8ac0f4b4f7a592e596af26893ea41ba35","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def _get_subnets_for_update_network(self, context, network):"},{"line_number":233,"context_line":"        subnet_id_list \u003d network.get(\u0027subnets\u0027)"},{"line_number":234,"context_line":"        if subnet_id_list is None:"},{"line_number":235,"context_line":"            return []"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        subnets \u003d []"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_7445a915","line":234,"updated":"2016-09-06 05:39:51.000000000","message":"nit: Can be:\nif not subnet_id_list:\n    return []","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"2b164996633aaa1256a875cac367e069c25cf4ae","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def _get_subnets_for_update_network(self, context, network):"},{"line_number":233,"context_line":"        subnet_id_list \u003d network.get(\u0027subnets\u0027)"},{"line_number":234,"context_line":"        if subnet_id_list is None:"},{"line_number":235,"context_line":"            return []"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        subnets \u003d []"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_e1c61899","line":234,"in_reply_to":"9a89bdaa_7445a915","updated":"2016-09-07 07:39:44.000000000","message":"ok, i will fix it","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027),"},{"line_number":228,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":229,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027),"},{"line_number":230,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"},{"line_number":231,"context_line":"            subnets\u003d[])"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        LOG.info(_LI(\"DFMechDriver: create network %s\"), network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_42e55935","line":230,"range":{"start_line":230,"start_character":0,"end_line":230,"end_character":42},"updated":"2016-09-23 02:12:26.000000000","message":"what if I create network with qos_policy specified?","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027),"},{"line_number":228,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":229,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027),"},{"line_number":230,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"},{"line_number":231,"context_line":"            subnets\u003d[])"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        LOG.info(_LI(\"DFMechDriver: create network %s\"), network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_f815359b","line":230,"range":{"start_line":230,"start_character":0,"end_line":230,"end_character":42},"in_reply_to":"5a8bc5a2_42e55935","updated":"2016-09-23 08:42:07.000000000","message":"qos_policy_id, the qos-app of DF can\u0027t support this.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            self.nb_api.delete_lswitch(id\u003dnetwork_id,"},{"line_number":248,"context_line":"                                       topic\u003dtenant_id)"},{"line_number":249,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":250,"context_line":"            LOG.exception(_LE(\"lswitch %s is not found in DF DB\") % network_id)"},{"line_number":251,"context_line":"            return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_22c92d79","line":251,"range":{"start_line":250,"start_character":0,"end_line":251,"end_character":18},"updated":"2016-09-23 02:12:26.000000000","message":"I think the original code is more reasonable.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            self.nb_api.delete_lswitch(id\u003dnetwork_id,"},{"line_number":248,"context_line":"                                       topic\u003dtenant_id)"},{"line_number":249,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":250,"context_line":"            LOG.exception(_LE(\"lswitch %s is not found in DF DB\") % network_id)"},{"line_number":251,"context_line":"            return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_f8ca9519","line":251,"range":{"start_line":250,"start_character":0,"end_line":251,"end_character":18},"in_reply_to":"5a8bc5a2_22c92d79","updated":"2016-09-23 08:42:07.000000000","message":"the reason maybe not only one","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def update_network_precommit(self, context):"},{"line_number":256,"context_line":"        nw_version \u003d version_db._update_db_version_row("},{"line_number":257,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"},{"line_number":258,"context_line":"        context.current[\u0027db_version\u0027] \u003d nw_version"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def _get_subnets_for_update_network(self, context, network):"},{"line_number":261,"context_line":"        subnet_id_list \u003d network.get(\u0027subnets\u0027)"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_6704277e","line":258,"range":{"start_line":255,"start_character":0,"end_line":258,"end_character":50},"updated":"2016-09-23 02:12:26.000000000","message":"try to use revision number from neutron, you can take \n\nhttps://review.openstack.org/#/c/374698/\n\nas example.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def update_network_precommit(self, context):"},{"line_number":256,"context_line":"        nw_version \u003d version_db._update_db_version_row("},{"line_number":257,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"},{"line_number":258,"context_line":"        context.current[\u0027db_version\u0027] \u003d nw_version"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def _get_subnets_for_update_network(self, context, network):"},{"line_number":261,"context_line":"        subnet_id_list \u003d network.get(\u0027subnets\u0027)"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_bbbac708","line":258,"range":{"start_line":255,"start_character":0,"end_line":258,"end_character":50},"in_reply_to":"5a8bc5a2_6704277e","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":268,"context_line":"        for subnet_id in subnet_id_list:"},{"line_number":269,"context_line":"            subnet \u003d core_plugin.get_subnet(plugin_context, subnet_id)"},{"line_number":270,"context_line":"            if subnet is None:"},{"line_number":271,"context_line":"                LOG.error(_LE(\"DFMechDriver: Could not find subnet %s\"),"},{"line_number":272,"context_line":"                          subnet_id)"},{"line_number":273,"context_line":"                continue"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"            port \u003d self._get_dhcp_port_for_subnet(plugin_context, subnet_id)"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_87f3f372","line":273,"range":{"start_line":270,"start_character":0,"end_line":273,"end_character":24},"updated":"2016-09-23 02:12:26.000000000","message":"This code will never be touched, as neutron will raise exception if you get a non-exist subnet.\n\nhttps://github.com/openstack/neutron/blob/2be2d97d11719db88537a9664c95f1b6b11d3707/neutron/db/db_base_plugin_common.py#L205-L210","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":268,"context_line":"        for subnet_id in subnet_id_list:"},{"line_number":269,"context_line":"            subnet \u003d core_plugin.get_subnet(plugin_context, subnet_id)"},{"line_number":270,"context_line":"            if subnet is None:"},{"line_number":271,"context_line":"                LOG.error(_LE(\"DFMechDriver: Could not find subnet %s\"),"},{"line_number":272,"context_line":"                          subnet_id)"},{"line_number":273,"context_line":"                continue"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"            port \u003d self._get_dhcp_port_for_subnet(plugin_context, subnet_id)"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_db8f9321","line":273,"range":{"start_line":270,"start_character":0,"end_line":273,"end_character":24},"in_reply_to":"5a8bc5a2_87f3f372","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)"},{"line_number":294,"context_line":"    def update_network_postcommit(self, context):"},{"line_number":295,"context_line":"        network \u003d context.current"},{"line_number":296,"context_line":"        subnets \u003d self._get_subnets_for_update_network(context, network)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        self.nb_api.update_lswitch("},{"line_number":299,"context_line":"            id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_62d33539","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":71},"updated":"2016-09-23 02:12:26.000000000","message":"update_network_postcommit will not contain subnet changes, I don\u0027t think getting subnets is necessary. Plus, getting subnets from neutron db one by one, is very time consuming. I think you can just remove this line.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)"},{"line_number":294,"context_line":"    def update_network_postcommit(self, context):"},{"line_number":295,"context_line":"        network \u003d context.current"},{"line_number":296,"context_line":"        subnets \u003d self._get_subnets_for_update_network(context, network)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        self.nb_api.update_lswitch("},{"line_number":299,"context_line":"            id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_38723dae","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":71},"in_reply_to":"5a8bc5a2_62d33539","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                                                subnet)"},{"line_number":423,"context_line":"        except Exception:"},{"line_number":424,"context_line":"            LOG.exception("},{"line_number":425,"context_line":"                _LE(\"Failed to create dhcp port for subnet %s\") % subnet[\u0027id\u0027])"},{"line_number":426,"context_line":"            return None"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        self.nb_api.add_subnet("}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_c7b5fbcd","line":425,"range":{"start_line":425,"start_character":63,"end_line":425,"end_character":65},"updated":"2016-09-23 02:12:26.000000000","message":"try to use , instead of %","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                                                subnet)"},{"line_number":423,"context_line":"        except Exception:"},{"line_number":424,"context_line":"            LOG.exception("},{"line_number":425,"context_line":"                _LE(\"Failed to create dhcp port for subnet %s\") % subnet[\u0027id\u0027])"},{"line_number":426,"context_line":"            return None"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        self.nb_api.add_subnet("}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_98ba7122","line":425,"range":{"start_line":425,"start_character":63,"end_line":425,"end_character":65},"in_reply_to":"5a8bc5a2_c7b5fbcd","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                                                    old_subnet,"},{"line_number":504,"context_line":"                                                    new_subnet)"},{"line_number":505,"context_line":"        except Exception:"},{"line_number":506,"context_line":"            LOG.exception("},{"line_number":507,"context_line":"                _LE(\"Failed to create dhcp port for subnet %s\") %"},{"line_number":508,"context_line":"                new_subnet[\u0027id\u0027])"},{"line_number":509,"context_line":"            return None"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        self.nb_api.update_subnet("}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_42ef19e8","line":508,"range":{"start_line":506,"start_character":0,"end_line":508,"end_character":33},"updated":"2016-09-23 02:12:26.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                                                    old_subnet,"},{"line_number":504,"context_line":"                                                    new_subnet)"},{"line_number":505,"context_line":"        except Exception:"},{"line_number":506,"context_line":"            LOG.exception("},{"line_number":507,"context_line":"                _LE(\"Failed to create dhcp port for subnet %s\") %"},{"line_number":508,"context_line":"                new_subnet[\u0027id\u0027])"},{"line_number":509,"context_line":"            return None"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        self.nb_api.update_subnet("}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_187d816e","line":508,"range":{"start_line":506,"start_character":0,"end_line":508,"end_character":33},"in_reply_to":"5a8bc5a2_42ef19e8","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":545,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":546,"context_line":"                                      nw_version\u003dsubnet[\u0027db_version\u0027])"},{"line_number":547,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":548,"context_line":"            LOG.exception(_LE(\"network %s is not found in DB\") % net_id)"},{"line_number":549,"context_line":"            return"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"},{"line_number":552,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_62a175a9","line":549,"range":{"start_line":548,"start_character":0,"end_line":549,"end_character":18},"updated":"2016-09-23 02:12:26.000000000","message":"I think the original code is more reasonable.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":545,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":546,"context_line":"                                      nw_version\u003dsubnet[\u0027db_version\u0027])"},{"line_number":547,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":548,"context_line":"            LOG.exception(_LE(\"network %s is not found in DB\") % net_id)"},{"line_number":549,"context_line":"            return"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"},{"line_number":552,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_d8eeb98a","line":549,"range":{"start_line":548,"start_character":0,"end_line":549,"end_character":18},"in_reply_to":"5a8bc5a2_62a175a9","updated":"2016-09-23 08:42:07.000000000","message":"the reason maybe not only one","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":684,"context_line":"            topic \u003d port[\u0027tenant_id\u0027]"},{"line_number":685,"context_line":"            self.nb_api.delete_lport(id\u003dport_id, topic\u003dtopic)"},{"line_number":686,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":687,"context_line":"            LOG.exception(_LE(\"port %s is not found in DF DB\") % port_id)"},{"line_number":688,"context_line":"            return"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete port %s\"), port_id)"},{"line_number":691,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_a2ab7d88","line":688,"range":{"start_line":687,"start_character":0,"end_line":688,"end_character":18},"updated":"2016-09-23 02:12:26.000000000","message":"I think the original code is more reasonable.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":684,"context_line":"            topic \u003d port[\u0027tenant_id\u0027]"},{"line_number":685,"context_line":"            self.nb_api.delete_lport(id\u003dport_id, topic\u003dtopic)"},{"line_number":686,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":687,"context_line":"            LOG.exception(_LE(\"port %s is not found in DF DB\") % port_id)"},{"line_number":688,"context_line":"            return"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete port %s\"), port_id)"},{"line_number":691,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_18e90181","line":688,"range":{"start_line":687,"start_character":0,"end_line":688,"end_character":18},"in_reply_to":"5a8bc5a2_a2ab7d88","updated":"2016-09-23 08:42:07.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"c034426ae78983f7afa8ef65233560d9d7a7bf32","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":229,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027),"},{"line_number":230,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"},{"line_number":231,"context_line":"            subnets\u003d[])"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        LOG.info(_LI(\"DFMechDriver: create network %s\"), network[\u0027id\u0027])"},{"line_number":234,"context_line":"        return network"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_e373b913","line":231,"range":{"start_line":231,"start_character":0,"end_line":231,"end_character":23},"updated":"2016-09-23 09:50:34.000000000","message":"You miss to add qos_policy here, right?","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8776e77c628766b7efbc36776fd28be260af598b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            router_external\u003dnetwork[\u0027router:external\u0027],"},{"line_number":229,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027),"},{"line_number":230,"context_line":"            version\u003dnetwork[\u0027db_version\u0027],"},{"line_number":231,"context_line":"            subnets\u003d[])"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        LOG.info(_LI(\"DFMechDriver: create network %s\"), network[\u0027id\u0027])"},{"line_number":234,"context_line":"        return network"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_b7980a1d","line":231,"range":{"start_line":231,"start_character":0,"end_line":231,"end_character":23},"in_reply_to":"5a8bc5a2_e373b913","updated":"2016-09-23 11:33:52.000000000","message":"the qos-app of DF don\u0027t support qos on network. i can add it here.","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"c034426ae78983f7afa8ef65233560d9d7a7bf32","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            self.nb_api.delete_lswitch(id\u003dnetwork_id,"},{"line_number":248,"context_line":"                                       topic\u003dtenant_id)"},{"line_number":249,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":250,"context_line":"            LOG.exception(_LE(\"lswitch %s is not found in DF DB\"), network_id)"},{"line_number":251,"context_line":"            return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_436e2d02","line":251,"range":{"start_line":250,"start_character":0,"end_line":251,"end_character":18},"updated":"2016-09-23 09:50:34.000000000","message":"Can you explain more about why this should be exception instead of debug?","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8776e77c628766b7efbc36776fd28be260af598b","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            self.nb_api.delete_lswitch(id\u003dnetwork_id,"},{"line_number":248,"context_line":"                                       topic\u003dtenant_id)"},{"line_number":249,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":250,"context_line":"            LOG.exception(_LE(\"lswitch %s is not found in DF DB\"), network_id)"},{"line_number":251,"context_line":"            return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_f229c038","line":251,"range":{"start_line":250,"start_character":0,"end_line":251,"end_character":18},"in_reply_to":"5a8bc5a2_436e2d02","updated":"2016-09-23 11:33:52.000000000","message":"https://review.openstack.org/#/c/331932/22/dragonflow/neutron/ml2/mech_driver.py\n\nduankebo have a comment here, so fix it.","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"c034426ae78983f7afa8ef65233560d9d7a7bf32","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":265,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":266,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":267,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027])"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        LOG.info(_LI(\"DFMechDriver: update network %s\"), network[\u0027id\u0027])"},{"line_number":270,"context_line":"        return network"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_a8926e9d","line":267,"updated":"2016-09-23 09:50:34.000000000","message":"why do you remove the policy from update_lswitch? this will make the update_lswitch not so convincing in the qos patch :)","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8776e77c628766b7efbc36776fd28be260af598b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":265,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":266,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":267,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027])"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        LOG.info(_LI(\"DFMechDriver: update network %s\"), network[\u0027id\u0027])"},{"line_number":270,"context_line":"        return network"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_178a9ebf","line":267,"in_reply_to":"5a8bc5a2_a8926e9d","updated":"2016-09-23 11:33:52.000000000","message":"Done","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1ebcd92a763b1f0434ff69df91e85a59989ada19","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            id\u003dnetwork[\u0027id\u0027],"},{"line_number":262,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":263,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_53f25570","line":264,"range":{"start_line":264,"start_character":62,"end_line":264,"end_character":66},"updated":"2016-09-24 03:51:05.000000000","message":"None is redundant","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"dd1704099bac9f45de06be32b8456b0fe23ef36b","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            id\u003dnetwork[\u0027id\u0027],"},{"line_number":262,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":263,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_49cb821e","line":264,"range":{"start_line":264,"start_character":62,"end_line":264,"end_character":66},"in_reply_to":"5a8bc5a2_53f25570","updated":"2016-09-24 07:31:40.000000000","message":"Done","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1ebcd92a763b1f0434ff69df91e85a59989ada19","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":263,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":268,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027],"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_73e91180","line":265,"range":{"start_line":265,"start_character":68,"end_line":265,"end_character":72},"updated":"2016-09-24 03:51:05.000000000","message":"ditto","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"dd1704099bac9f45de06be32b8456b0fe23ef36b","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            topic\u003dnetwork[\u0027tenant_id\u0027],"},{"line_number":263,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":268,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027],"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_69d2fed3","line":265,"range":{"start_line":265,"start_character":68,"end_line":265,"end_character":72},"in_reply_to":"5a8bc5a2_73e91180","updated":"2016-09-24 07:31:40.000000000","message":"Done","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1ebcd92a763b1f0434ff69df91e85a59989ada19","unresolved":false,"context_lines":[{"line_number":263,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":268,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027],"},{"line_number":269,"context_line":"            qos_policy_id\u003dnetwork.get(\u0027qos_policy_id\u0027))"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_b3039941","line":266,"range":{"start_line":266,"start_character":59,"end_line":266,"end_character":63},"updated":"2016-09-24 03:51:05.000000000","message":"ditto","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"dd1704099bac9f45de06be32b8456b0fe23ef36b","unresolved":false,"context_lines":[{"line_number":263,"context_line":"            name\u003dnetwork.get(\u0027name\u0027, df_const.DF_NETWORK_DEFAULT_NAME),"},{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":268,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027],"},{"line_number":269,"context_line":"            qos_policy_id\u003dnetwork.get(\u0027qos_policy_id\u0027))"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_89d58aba","line":266,"range":{"start_line":266,"start_character":59,"end_line":266,"end_character":63},"in_reply_to":"5a8bc5a2_b3039941","updated":"2016-09-24 07:31:40.000000000","message":"Done","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"1ebcd92a763b1f0434ff69df91e85a59989ada19","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":268,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027],"},{"line_number":269,"context_line":"            qos_policy_id\u003dnetwork.get(\u0027qos_policy_id\u0027))"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_f3fd213b","line":267,"range":{"start_line":267,"start_character":35,"end_line":267,"end_character":39},"updated":"2016-09-24 03:51:05.000000000","message":"ditto","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"dd1704099bac9f45de06be32b8456b0fe23ef36b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            network_type\u003dnetwork.get(\u0027provider:network_type\u0027, None),"},{"line_number":265,"context_line":"            segmentation_id\u003dnetwork.get(\u0027provider:segmentation_id\u0027, None),"},{"line_number":266,"context_line":"            router_external\u003dnetwork.get(\u0027router:external\u0027, None),"},{"line_number":267,"context_line":"            mtu\u003dnetwork.get(\u0027mtu\u0027, None),"},{"line_number":268,"context_line":"            version\u003dnetwork[\u0027revision_number\u0027],"},{"line_number":269,"context_line":"            qos_policy_id\u003dnetwork.get(\u0027qos_policy_id\u0027))"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"5a8bc5a2_a9dc06e5","line":267,"range":{"start_line":267,"start_character":35,"end_line":267,"end_character":39},"in_reply_to":"5a8bc5a2_f3fd213b","updated":"2016-09-24 07:31:40.000000000","message":"Done","commit_id":"5ad1205e590a044d2223a88d5748f3d0f82ddfd9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"73db904424e0ccbcaa6137303663877bb31975b4","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            self.nb_api.delete_lswitch(id\u003dnetwork_id,"},{"line_number":253,"context_line":"                                       topic\u003dtenant_id)"},{"line_number":254,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":255,"context_line":"            LOG.exception(_LE(\"lswitch %s is not found in DF DB\"), network_id)"},{"line_number":256,"context_line":"            return"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_056a5cb3","line":255,"updated":"2016-10-31 13:26:27.000000000","message":"This was a debug, since deleting an object that was already removed is not strictly an error. The result is the same. Please revert.","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1908d9cd1f89faf3cac66d7bab34b8e6030a1e4e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            self.nb_api.delete_lswitch(id\u003dnetwork_id,"},{"line_number":253,"context_line":"                                       topic\u003dtenant_id)"},{"line_number":254,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":255,"context_line":"            LOG.exception(_LE(\"lswitch %s is not found in DF DB\"), network_id)"},{"line_number":256,"context_line":"            return"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete network %s\"), network_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_627dbce6","line":255,"in_reply_to":"ba5da102_056a5cb3","updated":"2016-11-01 02:01:22.000000000","message":"Done","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"73db904424e0ccbcaa6137303663877bb31975b4","unresolved":false,"context_lines":[{"line_number":499,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":500,"context_line":"                                      nw_version\u003dnetwork[\u0027revision_number\u0027])"},{"line_number":501,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":502,"context_line":"            LOG.exception(_LE(\"network %s is not found in DB\"), net_id)"},{"line_number":503,"context_line":"            return"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_c5a6a40f","line":502,"updated":"2016-10-31 13:26:27.000000000","message":"Same here.","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1908d9cd1f89faf3cac66d7bab34b8e6030a1e4e","unresolved":false,"context_lines":[{"line_number":499,"context_line":"            self.nb_api.delete_subnet(subnet_id, net_id, subnet[\u0027tenant_id\u0027],"},{"line_number":500,"context_line":"                                      nw_version\u003dnetwork[\u0027revision_number\u0027])"},{"line_number":501,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":502,"context_line":"            LOG.exception(_LE(\"network %s is not found in DB\"), net_id)"},{"line_number":503,"context_line":"            return"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete subnet %s\"), subnet_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_a287d4d5","line":502,"in_reply_to":"ba5da102_c5a6a40f","updated":"2016-11-01 02:01:22.000000000","message":"Done","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"73db904424e0ccbcaa6137303663877bb31975b4","unresolved":false,"context_lines":[{"line_number":657,"context_line":"            topic \u003d port[\u0027tenant_id\u0027]"},{"line_number":658,"context_line":"            self.nb_api.delete_lport(id\u003dport_id, topic\u003dtopic)"},{"line_number":659,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":660,"context_line":"            LOG.exception(_LE(\"port %s is not found in DF DB\"), port_id)"},{"line_number":661,"context_line":"            return"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete port %s\"), port_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_05b17c47","line":660,"updated":"2016-10-31 13:26:27.000000000","message":"And here.","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1908d9cd1f89faf3cac66d7bab34b8e6030a1e4e","unresolved":false,"context_lines":[{"line_number":657,"context_line":"            topic \u003d port[\u0027tenant_id\u0027]"},{"line_number":658,"context_line":"            self.nb_api.delete_lport(id\u003dport_id, topic\u003dtopic)"},{"line_number":659,"context_line":"        except df_exceptions.DBKeyNotFound:"},{"line_number":660,"context_line":"            LOG.exception(_LE(\"port %s is not found in DF DB\"), port_id)"},{"line_number":661,"context_line":"            return"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete port %s\"), port_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_c26e882e","line":660,"in_reply_to":"ba5da102_05b17c47","updated":"2016-11-01 02:01:22.000000000","message":"Done","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"}],"dragonflow/neutron/services/qos/notification_drivers/df_qos_notification_driver.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"f908bca00130efe4559feae53235ea60c64a211a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.nb_api.update_qos_policy(policy_id,\r"},{"line_number":74,"context_line":"                                      policy[\u0027tenant_id\u0027],\r"},{"line_number":75,"context_line":"                                      name\u003dpolicy[\u0027name\u0027],\r"},{"line_number":76,"context_line":"                                      type\u003d\u0027all\u0027,\r"},{"line_number":77,"context_line":"                                      rules\u003dpolicy_neutron[\u0027rules\u0027],\r"},{"line_number":78,"context_line":"                                      version\u003ddb_version)\r"},{"line_number":79,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_a1da2ae6","line":76,"range":{"start_line":76,"start_character":38,"end_line":76,"end_character":49},"updated":"2016-07-05 23:36:08.000000000","message":"type will be always \u0027all\u0027? If type is always \u0027all\u0027 we don\u0027t have to send it to df db.","commit_id":"452e6d962d384102f95f5553f160d50f4f2cd73b"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        try:\r"},{"line_number":68,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)\r"},{"line_number":69,"context_line":"        except n_exc.QosPolicyNotFound as e:\r"},{"line_number":70,"context_line":"            LOG.exception(e)\r"},{"line_number":71,"context_line":"\r"},{"line_number":72,"context_line":"        self.nb_api.update_qos_policy(policy_id,\r"},{"line_number":73,"context_line":"                                      policy[\u0027tenant_id\u0027],\r"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_2a6b441f","line":70,"range":{"start_line":70,"start_character":12,"end_line":70,"end_character":28},"updated":"2016-07-22 03:11:55.000000000","message":"why not add return here?","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"942251a53ffde79762b5569f311e565b080dece0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        try:\r"},{"line_number":88,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)\r"},{"line_number":89,"context_line":"        except n_exc.QosPolicyNotFound as e:\r"},{"line_number":90,"context_line":"            LOG.exception(e)\r"},{"line_number":91,"context_line":"\r"},{"line_number":92,"context_line":"        self.nb_api.delete_qos_policy(policy_id, policy_neutron[\u0027tenant_id\u0027])\r"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_0ad000c8","line":90,"range":{"start_line":90,"start_character":12,"end_line":90,"end_character":28},"updated":"2016-07-22 03:11:55.000000000","message":"ditto","commit_id":"1ac26873defbd703a3b162376fbe2711fa8c36c1"},{"author":{"_account_id":21691,"name":"weizj","email":"wzj334965317@outlook.com","username":"ZhijunWei"},"change_message_id":"f3d1aff5abf7ab54828ea36aba6557086816251a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)\r"},{"line_number":58,"context_line":"    def update_policy(self, context, policy):\r"},{"line_number":59,"context_line":"        policy_id \u003d policy[\u0027id\u0027]\r"},{"line_number":60,"context_line":"\r"},{"line_number":61,"context_line":"        with context.session.begin(subtransactions\u003dTrue):\r"},{"line_number":62,"context_line":"            db_version \u003d version_db._update_db_version_row(context.session,\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_dab6863c","line":59,"range":{"start_line":59,"start_character":20,"end_line":59,"end_character":26},"updated":"2016-07-28 09:07:45.000000000","message":"i think use get method is better","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":21691,"name":"weizj","email":"wzj334965317@outlook.com","username":"ZhijunWei"},"change_message_id":"f3d1aff5abf7ab54828ea36aba6557086816251a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"\r"},{"line_number":78,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_DELETE)\r"},{"line_number":79,"context_line":"    def delete_policy(self, context, policy):\r"},{"line_number":80,"context_line":"        policy_id \u003d policy[\u0027id\u0027]\r"},{"line_number":81,"context_line":"\r"},{"line_number":82,"context_line":"        with context.session.begin(subtransactions\u003dTrue):\r"},{"line_number":83,"context_line":"            version_db._delete_db_version_row(context.session, policy_id)\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_fa342adf","line":80,"range":{"start_line":80,"start_character":20,"end_line":80,"end_character":26},"updated":"2016-07-28 09:07:45.000000000","message":"ditto","commit_id":"2cb7bd422a4eb04ec4c6f52585c88c6094f8a596"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            use_pubsub\u003dcfg.CONF.df.enable_df_pub_sub,\r"},{"line_number":40,"context_line":"            is_neutron_server\u003dTrue)\r"},{"line_number":41,"context_line":"        self.nb_api.initialize(db_ip\u003dcfg.CONF.df.remote_db_ip,\r"},{"line_number":42,"context_line":"                               db_port\u003dcfg.CONF.df.remote_db_port)\r"},{"line_number":43,"context_line":"\r"},{"line_number":44,"context_line":"    def get_description(self):\r"},{"line_number":45,"context_line":"        return \"Notification driver for dragonflow\"\r"}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_1d47e877","line":42,"updated":"2016-08-11 09:49:45.000000000","message":"This conflicts with the work to make nb_api (or the database connection) a singleton. Please discuss with @heshan on how to acomodate this.","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.nb_api.create_qos_policy(policy[\u0027id\u0027],\r"},{"line_number":54,"context_line":"                                      policy[\u0027tenant_id\u0027],\r"},{"line_number":55,"context_line":"                                      name\u003dpolicy[\u0027name\u0027],\r"},{"line_number":56,"context_line":"                                      rules\u003d[],\r"},{"line_number":57,"context_line":"                                      version\u003ddb_version)\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)\r"}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_1871b6a8","line":56,"updated":"2016-08-11 09:49:45.000000000","message":"Does this mean a policy can never be created with rules? Would it not be better to try to read the rules from the object, and fall back to [] only if the rules don\u0027t exist?","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        try:\r"},{"line_number":70,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)\r"},{"line_number":71,"context_line":"        except n_exc.QosPolicyNotFound as e:\r"},{"line_number":72,"context_line":"            LOG.exception(e)\r"},{"line_number":73,"context_line":"            return\r"},{"line_number":74,"context_line":"\r"},{"line_number":75,"context_line":"        self.nb_api.update_qos_policy(policy_id,\r"}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_f84e626d","line":72,"updated":"2016-08-11 09:49:45.000000000","message":"Please add a descriptive message to the error. Additionally, you don\u0027t need to pass the exception (e) to LOG.exception.","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"2c316313f344a149dc33abcb40434b9d3255f6cf","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.nb_api \u003d api_nb.NbApi.get_instance(True)\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    def get_description(self):\r"},{"line_number":36,"context_line":"        return \"Notification driver for dragonflow\"\r"},{"line_number":37,"context_line":"\r"},{"line_number":38,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)\r"},{"line_number":39,"context_line":"    def create_policy(self, context, policy):\r"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_59fa3276","line":36,"range":{"start_line":36,"start_character":40,"end_line":36,"end_character":50},"updated":"2016-08-30 03:39:56.000000000","message":"Dragonflow","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"7db37876073def4798f1210a9f517e5bb5559c4f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.nb_api \u003d api_nb.NbApi.get_instance(True)\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    def get_description(self):\r"},{"line_number":36,"context_line":"        return \"Notification driver for dragonflow\"\r"},{"line_number":37,"context_line":"\r"},{"line_number":38,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)\r"},{"line_number":39,"context_line":"    def create_policy(self, context, policy):\r"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_2a0bf17e","line":36,"range":{"start_line":36,"start_character":40,"end_line":36,"end_character":50},"in_reply_to":"fa7ab95a_59fa3276","updated":"2016-08-31 09:32:58.000000000","message":"Done","commit_id":"ffca7a8887fbbef26fe9bd9b9926b47b97c40c72"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e071e767f8150bed0eaf5071880986b8cd7ec2fb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)"},{"line_number":39,"context_line":"    def create_policy(self, context, policy):"},{"line_number":40,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":41,"context_line":"            db_version \u003d version_db._create_db_version_row(context.session,"},{"line_number":42,"context_line":"                                                           policy[\u0027id\u0027])"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self.nb_api.create_qos_policy(policy[\u0027id\u0027],"},{"line_number":45,"context_line":"                                      policy[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a8ec9b2_eaec8591","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":72},"updated":"2016-09-20 09:28:39.000000000","message":"Why not use revision plugin?","commit_id":"2cf237032849fccfd74e6376638320cbcc9c98ee"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"35ce80a373a0b4ed8b2b5134c7e29c07c8036e7a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)"},{"line_number":39,"context_line":"    def create_policy(self, context, policy):"},{"line_number":40,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":41,"context_line":"            db_version \u003d version_db._create_db_version_row(context.session,"},{"line_number":42,"context_line":"                                                           policy[\u0027id\u0027])"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self.nb_api.create_qos_policy(policy[\u0027id\u0027],"},{"line_number":45,"context_line":"                                      policy[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a8bc5a2_b1aa1a18","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":72},"in_reply_to":"7a8ec9b2_eaec8591","updated":"2016-09-22 11:34:58.000000000","message":"we can fix the issue in a new patch, there are same issue in the DF MD.","commit_id":"2cf237032849fccfd74e6376638320cbcc9c98ee"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)"},{"line_number":41,"context_line":"    def create_policy(self, context, policy):"},{"line_number":42,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":43,"context_line":"            db_version \u003d version_db._create_db_version_row(context.session,"},{"line_number":44,"context_line":"                                                           policy[\u0027id\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.nb_api.create_qos_policy(policy[\u0027id\u0027],"},{"line_number":47,"context_line":"                                      policy[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_023d112b","line":44,"range":{"start_line":42,"start_character":4,"end_line":44,"end_character":72},"updated":"2016-09-23 02:12:26.000000000","message":"try to use revision_number in policy","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_QOS_POLICY_CREATE_OR_UPDATE)"},{"line_number":41,"context_line":"    def create_policy(self, context, policy):"},{"line_number":42,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":43,"context_line":"            db_version \u003d version_db._create_db_version_row(context.session,"},{"line_number":44,"context_line":"                                                           policy[\u0027id\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.nb_api.create_qos_policy(policy[\u0027id\u0027],"},{"line_number":47,"context_line":"                                      policy[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_0fba91c0","line":44,"range":{"start_line":42,"start_character":4,"end_line":44,"end_character":72},"in_reply_to":"5a8bc5a2_023d112b","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def update_policy(self, context, policy):"},{"line_number":54,"context_line":"        policy_id \u003d policy[\u0027id\u0027]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":57,"context_line":"            db_version \u003d version_db._update_db_version_row(context.session,"},{"line_number":58,"context_line":"                                                           policy_id)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":61,"context_line":"            service_constants.QOS)"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_a26d3d06","line":58,"range":{"start_line":56,"start_character":0,"end_line":58,"end_character":69},"updated":"2016-09-23 02:12:26.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def update_policy(self, context, policy):"},{"line_number":54,"context_line":"        policy_id \u003d policy[\u0027id\u0027]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":57,"context_line":"            db_version \u003d version_db._update_db_version_row(context.session,"},{"line_number":58,"context_line":"                                                           policy_id)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":61,"context_line":"            service_constants.QOS)"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_cfc0a92d","line":58,"range":{"start_line":56,"start_character":0,"end_line":58,"end_character":69},"in_reply_to":"5a8bc5a2_a26d3d06","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            db_version \u003d version_db._update_db_version_row(context.session,"},{"line_number":58,"context_line":"                                                           policy_id)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":61,"context_line":"            service_constants.QOS)"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":64,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":65,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":66,"context_line":"            return"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.nb_api.update_qos_policy(policy_id,"},{"line_number":69,"context_line":"                                      policy[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_bd2560ac","line":66,"range":{"start_line":60,"start_character":0,"end_line":66,"end_character":18},"updated":"2016-09-23 02:12:26.000000000","message":"why do you need to get the policy, if you already have a policy in the arguments?","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            db_version \u003d version_db._update_db_version_row(context.session,"},{"line_number":58,"context_line":"                                                           policy_id)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":61,"context_line":"            service_constants.QOS)"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":64,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":65,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":66,"context_line":"            return"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.nb_api.update_qos_policy(policy_id,"},{"line_number":69,"context_line":"                                      policy[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_6a55c34e","line":66,"range":{"start_line":60,"start_character":0,"end_line":66,"end_character":18},"in_reply_to":"5a8bc5a2_bd2560ac","updated":"2016-09-23 08:42:07.000000000","message":"we need to get the ruels,but the parameters don\u0027t have that.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":79,"context_line":"            version_db._delete_db_version_row(context.session, policy_id)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":82,"context_line":"            service_constants.QOS)"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":85,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":86,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        self.nb_api.delete_qos_policy(policy_id, policy_neutron[\u0027tenant_id\u0027])"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_1d3574d9","line":87,"range":{"start_line":81,"start_character":0,"end_line":87,"end_character":18},"updated":"2016-09-23 02:12:26.000000000","message":"ditto","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":79,"context_line":"            version_db._delete_db_version_row(context.session, policy_id)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":82,"context_line":"            service_constants.QOS)"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":85,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":86,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        self.nb_api.delete_qos_policy(policy_id, policy_neutron[\u0027tenant_id\u0027])"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_8ad76fbe","line":87,"range":{"start_line":81,"start_character":0,"end_line":87,"end_character":18},"in_reply_to":"5a8bc5a2_1d3574d9","updated":"2016-09-23 08:42:07.000000000","message":"when delete the policy, the parameter don\u0027t have the tenant_id.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"c034426ae78983f7afa8ef65233560d9d7a7bf32","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":53,"context_line":"            service_constants.QOS)"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":56,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":57,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":58,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_e3473949","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":70},"updated":"2016-09-23 09:50:34.000000000","message":"I don\u0027t test it, but according to the code at [1], it looks like the rules is in the policy in the parameter. Maybe I am wrong, have you verified it?\n\nhttps://github.com/openstack/neutron/blob/master/neutron/services/qos/qos_plugin.py#L175","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8776e77c628766b7efbc36776fd28be260af598b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":53,"context_line":"            service_constants.QOS)"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":56,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":57,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":58,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_f27f0064","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":70},"in_reply_to":"5a8bc5a2_e3473949","updated":"2016-09-23 11:33:52.000000000","message":"if only update the name of policy, will not have the rules,\nbut we need to pass the rule to DF, the update data will override the policy data in DF DB.","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"c034426ae78983f7afa8ef65233560d9d7a7bf32","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":71,"context_line":"            service_constants.QOS)"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":74,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":75,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":76,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_23084191","line":73,"range":{"start_line":73,"start_character":12,"end_line":73,"end_character":70},"updated":"2016-09-23 09:50:34.000000000","message":"I haven\u0027t test it,  but according to the code at [2], it looks like the tenant is in the policy in the parameter.\n\n[2] https://github.com/openstack/neutron/blob/master/neutron/services/qos/qos_plugin.py#L90\n\n[3] https://github.com/openstack/neutron/blob/master/neutron/objects/qos/policy.py#L52","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8776e77c628766b7efbc36776fd28be260af598b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":71,"context_line":"            service_constants.QOS)"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":74,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":75,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":76,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a8bc5a2_d220449e","line":73,"range":{"start_line":73,"start_character":12,"end_line":73,"end_character":70},"in_reply_to":"5a8bc5a2_23084191","updated":"2016-09-23 11:33:52.000000000","message":"wang yong ben have tested it. He said that.","commit_id":"71c6b327f88d5b9d6d91134c736bc8f6e438046d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"22d8cd5c5bce2a49c0d7bc747cf65fedcd781ed9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":52,"context_line":"            service_constants.QOS)"},{"line_number":53,"context_line":"        try:"},{"line_number":54,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":55,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":56,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":57,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a8bc5a2_9fc5bc8f","line":54,"range":{"start_line":54,"start_character":12,"end_line":54,"end_character":70},"updated":"2016-09-24 10:50:11.000000000","message":"If no rules update, there is no need to pass rules to update_qos_policy.\n\nBut the policy in arguments will not contain latest revision number, if add/update/delete policy rule.\n\n\nSo, anyway, we still need to get from neutron for the latest policy.","commit_id":"83564eeaa056fe3c6caea6b743ce66cbd16275ad"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"22d8cd5c5bce2a49c0d7bc747cf65fedcd781ed9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            service_constants.QOS)"},{"line_number":53,"context_line":"        try:"},{"line_number":54,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":55,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":56,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":57,"context_line":"            return"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.nb_api.update_qos_policy(policy_id,"},{"line_number":60,"context_line":"                                      policy[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a8bc5a2_dfbf44f9","line":57,"range":{"start_line":55,"start_character":0,"end_line":57,"end_character":18},"updated":"2016-09-24 10:50:11.000000000","message":"This code runs in neutron, neutron will report the exception anyway, so no need to log here.","commit_id":"83564eeaa056fe3c6caea6b743ce66cbd16275ad"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"22d8cd5c5bce2a49c0d7bc747cf65fedcd781ed9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        qos_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":70,"context_line":"            service_constants.QOS)"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":73,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":74,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":75,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a8bc5a2_1f38cc9f","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":70},"updated":"2016-09-24 10:50:11.000000000","message":"I have tried, the policy will only contain policy id. So, to get the tenant id, it is necessary to get latest policy from neutron.","commit_id":"83564eeaa056fe3c6caea6b743ce66cbd16275ad"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"22d8cd5c5bce2a49c0d7bc747cf65fedcd781ed9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            service_constants.QOS)"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            policy_neutron \u003d qos_plugin.get_policy(context, policy_id)"},{"line_number":73,"context_line":"        except n_exc.QosPolicyNotFound:"},{"line_number":74,"context_line":"            LOG.exception(_LE(\u0027Could not get QoS policy %s\u0027), policy_id)"},{"line_number":75,"context_line":"            return"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.nb_api.delete_qos_policy(policy_id, policy_neutron[\u0027tenant_id\u0027])"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a8bc5a2_3f3bc89d","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":18},"updated":"2016-09-24 10:50:11.000000000","message":"This code runs in neutron, neutron will report the exception anyway, so no need to log here.","commit_id":"83564eeaa056fe3c6caea6b743ce66cbd16275ad"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"73db904424e0ccbcaa6137303663877bb31975b4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Dragonflow notification driver for QoS.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self):"},{"line_number":26,"context_line":"        self.nb_api \u003d api_nb.NbApi.get_instance(True)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def get_description(self):"},{"line_number":29,"context_line":"        return \"Notification driver for Dragonflow\""}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_a5ed3027","line":26,"updated":"2016-10-31 13:26:27.000000000","message":"When is this class created? Before or after Neutron server fork? Or does it run in its own process in q-qos?","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1908d9cd1f89faf3cac66d7bab34b8e6030a1e4e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Dragonflow notification driver for QoS.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self):"},{"line_number":26,"context_line":"        self.nb_api \u003d api_nb.NbApi.get_instance(True)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def get_description(self):"},{"line_number":29,"context_line":"        return \"Notification driver for Dragonflow\""}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_024b20ca","line":26,"in_reply_to":"ba5da102_a5ed3027","updated":"2016-11-01 02:01:22.000000000","message":"It is actually created before the neutron fork (rpc and api) workers. Neutron will load service plugins and then fork the workers. When load the service plugin, this class will be created, and nb_api will be initialized. There will be no q-qos process. The code in this file will run in neutron-server. \n\nAccording to [1], we may want to connect to nb_api after the neutron. I will address that.\n\n[1] https://review.openstack.org/#/c/390910/","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"}],"dragonflow/neutron/services/qos/notification_drivers/qos_notification_driver.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"092f0565a84798b5ea011fc1617916845f478976","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3aaa91ec_af5c834b","updated":"2016-06-24 23:19:23.000000000","message":"I suggest to rename this file to df_qos_notification_driver.py","commit_id":"470a7628da1d7450f2fdebf5f248f34af0c6748d"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"d12c6cffef6a1b58d34825b2967dbf5af760cc79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3aaa91ec_b399737b","in_reply_to":"3aaa91ec_af5c834b","updated":"2016-06-27 02:24:55.000000000","message":"ok, i will fix it.","commit_id":"470a7628da1d7450f2fdebf5f248f34af0c6748d"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"092f0565a84798b5ea011fc1617916845f478976","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.nb_api.initialize(db_ip\u003dcfg.CONF.df.remote_db_ip,\r"},{"line_number":57,"context_line":"                               db_port\u003dcfg.CONF.df.remote_db_port)\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"        registry.provide(_get_qos_policy_cb, resources.QOS_POLICY)\r"},{"line_number":60,"context_line":"\r"},{"line_number":61,"context_line":"    def get_description(self):\r"},{"line_number":62,"context_line":"        return \"Notification driver for dragonflow\"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_6f373b4d","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":66},"updated":"2016-06-24 23:19:23.000000000","message":"why do we need this?","commit_id":"470a7628da1d7450f2fdebf5f248f34af0c6748d"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"d12c6cffef6a1b58d34825b2967dbf5af760cc79","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.nb_api.initialize(db_ip\u003dcfg.CONF.df.remote_db_ip,\r"},{"line_number":57,"context_line":"                               db_port\u003dcfg.CONF.df.remote_db_port)\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"        registry.provide(_get_qos_policy_cb, resources.QOS_POLICY)\r"},{"line_number":60,"context_line":"\r"},{"line_number":61,"context_line":"    def get_description(self):\r"},{"line_number":62,"context_line":"        return \"Notification driver for dragonflow\"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_73938b5b","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":66},"in_reply_to":"3aaa91ec_6f373b4d","updated":"2016-06-27 02:24:55.000000000","message":"yes, we really don\u0027t need it, i will delete it.","commit_id":"470a7628da1d7450f2fdebf5f248f34af0c6748d"}],"dragonflow/tests/fullstack/test_neutron_api.py":[{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"80ec63940abce85a95f6311b26db04a06ae6216d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        port_param \u003d {"},{"line_number":191,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":192,"context_line":"            \u0027name\u0027: \u0027port1\u0027,"},{"line_number":193,"context_line":"            \u0027network_id\u0027: self.network_id,"},{"line_number":194,"context_line":"            \u0027qos_policy_id\u0027: qos_policy_id"},{"line_number":195,"context_line":"        }"},{"line_number":196,"context_line":"        port.create(port_param)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a89bdaa_e0852907","line":193,"range":{"start_line":193,"start_character":31,"end_line":193,"end_character":41},"updated":"2016-09-07 09:53:52.000000000","message":"this parameter is wrong, it should be network_id","commit_id":"c92cc5c891bba5412518564d42271ea64c9ee9eb"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"80ec63940abce85a95f6311b26db04a06ae6216d","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        port.create(port_param)"},{"line_number":197,"context_line":"        self.assertTrue(port.exists())"},{"line_number":198,"context_line":"        self.assertEqual(qos_policy_id,"},{"line_number":199,"context_line":"                         port.get_logical_port().get_qos_policy_id())"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        port.close()"},{"line_number":202,"context_line":"        self.assertFalse(port.exists())"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a89bdaa_e0b369e7","line":199,"updated":"2016-09-07 09:53:52.000000000","message":"no this method , you should use get_qos()","commit_id":"c92cc5c891bba5412518564d42271ea64c9ee9eb"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"80ec63940abce85a95f6311b26db04a06ae6216d","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        }"},{"line_number":229,"context_line":"        port.update(port_param)"},{"line_number":230,"context_line":"        self.assertEqual(qos_policy_id,"},{"line_number":231,"context_line":"                         port.get_logical_port().get_qos_policy_id())"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        port.close()"},{"line_number":234,"context_line":"        self.assertFalse(port.exists())"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a89bdaa_60ee79b5","line":231,"range":{"start_line":231,"start_character":49,"end_line":231,"end_character":66},"updated":"2016-09-07 09:53:52.000000000","message":"ditto","commit_id":"c92cc5c891bba5412518564d42271ea64c9ee9eb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"1820ba790aa17fcfeb0a1679033daa405d0d154c","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        port.create(port_param)"},{"line_number":197,"context_line":"        self.assertTrue(port.exists())"},{"line_number":198,"context_line":"        self.assertEqual(qos_policy_id,"},{"line_number":199,"context_line":"                         port.get_logical_port().get_qos())"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        port.close()"},{"line_number":202,"context_line":"        self.assertFalse(port.exists())"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a89bdaa_7fec222a","line":199,"range":{"start_line":199,"start_character":49,"end_line":199,"end_character":58},"updated":"2016-09-08 04:55:30.000000000","message":"I couldn\u0027t find this method in LogicalPort in nb_api, nor get_qos_policy_id. Was it added? Am I looking in the right place?","commit_id":"7244a98b323b32e3913293588ca969b8dccb0782"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"3bebaca2aa9b8790a20f9da537419d1101832696","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        port.create(port_param)"},{"line_number":197,"context_line":"        self.assertTrue(port.exists())"},{"line_number":198,"context_line":"        self.assertEqual(qos_policy_id,"},{"line_number":199,"context_line":"                         port.get_logical_port().get_qos())"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        port.close()"},{"line_number":202,"context_line":"        self.assertFalse(port.exists())"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a89bdaa_b4f491cf","line":199,"range":{"start_line":199,"start_character":49,"end_line":199,"end_character":58},"in_reply_to":"9a89bdaa_7fec222a","updated":"2016-09-10 08:15:33.000000000","message":"i will add a method named get_qos_policy_id","commit_id":"7244a98b323b32e3913293588ca969b8dccb0782"}],"dragonflow/tests/fullstack/test_object_version.py":[{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"f7db2c9d9e62bae4c94da4bffd21cbf20b22fcab","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.tests.fullstack import test_objects as objects\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"class TestObjectVersion(test_base.DFTestBase):\r"},{"line_number":22,"context_line":"\r"},{"line_number":23,"context_line":"    def setUp(self):\r"},{"line_number":24,"context_line":"        super(TestObjectVersion, self).setUp()\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_453223a8","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":46},"updated":"2016-09-18 07:19:35.000000000","message":"Most modification here is not belonged to your own patch, would you please commit your code with the newest master version","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"8d6fd2ae309264cb77eba280a710014256a3119d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.tests.fullstack import test_objects as objects\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"class TestObjectVersion(test_base.DFTestBase):\r"},{"line_number":22,"context_line":"\r"},{"line_number":23,"context_line":"    def setUp(self):\r"},{"line_number":24,"context_line":"        super(TestObjectVersion, self).setUp()\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a8ec9b2_60ea9fdc","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":46},"in_reply_to":"7a8ec9b2_453223a8","updated":"2016-09-19 07:20:35.000000000","message":"Done","commit_id":"ab52c131d6bea1ebbd7f696dd0845c761f01f511"}],"dragonflow/tests/fullstack/test_objects.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ccf1ae8ac0f4b4f7a592e596af26893ea41ba35","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        return self.policy_id"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def update(self, policy_id):"},{"line_number":452,"context_line":"        rule \u003d {\u0027max-kbps\u0027: \u00271000\u0027, \u0027max-burst-kbps\u0027: \u0027100\u0027}"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        self.neutron.create_bandwidth_limit_rule("},{"line_number":455,"context_line":"            policy_id, {\u0027bandwidth_limit_rule\u0027: rule})"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_94d22dff","line":452,"updated":"2016-09-06 05:39:51.000000000","message":"Please provide a way to pass the rule as a parameter.","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"80ec63940abce85a95f6311b26db04a06ae6216d","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    def create(self, qospolicy\u003d{\u0027name\u0027: \u0027myqospolicy1\u0027}):"},{"line_number":446,"context_line":"        new_qospolicy \u003d self.neutron.create_qos_policy({\u0027policy\u0027:"},{"line_number":447,"context_line":"                                                        qospolicy})"},{"line_number":448,"context_line":"        self.policy_id \u003d new_qospolicy[\u0027qos_policy\u0027][\u0027id\u0027]"},{"line_number":449,"context_line":"        return self.policy_id"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def update(self, policy_id):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a89bdaa_ed3e02d9","line":448,"range":{"start_line":448,"start_character":40,"end_line":448,"end_character":50},"updated":"2016-09-07 09:53:52.000000000","message":"it shoud be [\u0027policy\u0027]","commit_id":"c92cc5c891bba5412518564d42271ea64c9ee9eb"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"80ec63940abce85a95f6311b26db04a06ae6216d","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        return self.policy_id"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def update(self, policy_id):"},{"line_number":452,"context_line":"        rule \u003d {\u0027max-kbps\u0027: \u00271000\u0027, \u0027max-burst-kbps\u0027: \u0027100\u0027}"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        self.neutron.create_bandwidth_limit_rule("},{"line_number":455,"context_line":"            policy_id, {\u0027bandwidth_limit_rule\u0027: rule})"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a89bdaa_804ffd69","line":452,"updated":"2016-09-07 09:53:52.000000000","message":"max-kbps --\u003e max_kbps\nmax-burst-kpbs ----\u003e max_burst_kbps","commit_id":"c92cc5c891bba5412518564d42271ea64c9ee9eb"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"9fe2f22d425063c679bc30fa2dd28436c895fb42","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    def create(self, qospolicy\u003d{\u0027name\u0027: \u0027myqospolicy1\u0027}):"},{"line_number":446,"context_line":"        new_qospolicy \u003d self.neutron.create_qos_policy({\u0027policy\u0027:"},{"line_number":447,"context_line":"                                                        qospolicy})"},{"line_number":448,"context_line":"        self.policy_id \u003d new_qospolicy[\u0027qos_policy\u0027][\u0027id\u0027]"},{"line_number":449,"context_line":"        return self.policy_id"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def update(self, policy_id, rule):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a89bdaa_ff405b61","line":448,"range":{"start_line":448,"start_character":39,"end_line":448,"end_character":49},"updated":"2016-09-13 06:39:06.000000000","message":"here is \u0027policy\u0027,and the patch 31 connot merge","commit_id":"74c89cf9eb887b956cb5f602f7fbd0fd0c3e5f40"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"73db904424e0ccbcaa6137303663877bb31975b4","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        self.policy_id \u003d new_qospolicy[\u0027policy\u0027][\u0027id\u0027]"},{"line_number":449,"context_line":"        return self.policy_id"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def update(self, policy_id, rule):"},{"line_number":452,"context_line":"        self.neutron.create_bandwidth_limit_rule("},{"line_number":453,"context_line":"            policy_id, {\u0027bandwidth_limit_rule\u0027: rule})"},{"line_number":454,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_655238df","line":451,"range":{"start_line":451,"start_character":8,"end_line":451,"end_character":15},"updated":"2016-10-31 13:26:27.000000000","message":"Please rename to create_rule (or create_bandwidth_limit_rule).","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1908d9cd1f89faf3cac66d7bab34b8e6030a1e4e","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        self.policy_id \u003d new_qospolicy[\u0027policy\u0027][\u0027id\u0027]"},{"line_number":449,"context_line":"        return self.policy_id"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def update(self, policy_id, rule):"},{"line_number":452,"context_line":"        self.neutron.create_bandwidth_limit_rule("},{"line_number":453,"context_line":"            policy_id, {\u0027bandwidth_limit_rule\u0027: rule})"},{"line_number":454,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":48,"id":"ba5da102_2274a4fb","line":451,"range":{"start_line":451,"start_character":8,"end_line":451,"end_character":15},"in_reply_to":"ba5da102_655238df","updated":"2016-11-01 02:01:22.000000000","message":"Done","commit_id":"ac122bdad8e77eb463ec89490399eb2c8b612c53"}],"dragonflow/tests/unit/test_df_qos_notification_driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"afc12a11288bce30e0603ebdfcb0a8ba2b208129","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# mock.patch must before import mech_driver, because mech_driver will load the\r"},{"line_number":32,"context_line":"# lockedobjects_db\r"},{"line_number":33,"context_line":"mock.patch(\u0027dragonflow.db.neutron.lockedobjects_db.wrap_db_lock\u0027,\r"},{"line_number":34,"context_line":"           stub_wrap_db_lock).start()\r"},{"line_number":35,"context_line":"from dragonflow.db.neutron import versionobjects_db as version_db\r"},{"line_number":36,"context_line":"from dragonflow.neutron.services.qos.notification_drivers import \\\r"},{"line_number":37,"context_line":"    df_qos_notification_driver\r"}],"source_content_type":"text/x-python","patch_set":19,"id":"9ad45d7e_d8955e33","line":34,"range":{"start_line":34,"start_character":11,"end_line":34,"end_character":28},"updated":"2016-08-11 09:49:45.000000000","message":"Wouldn\u0027t it be simpler to just pass \u0027lambda x: x\u0027? In any case, stub_wrap_db_lock is much too complicated for its purpose.","commit_id":"cec83976a3578a794d31c1aadca3f538d90cbc58"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ccf1ae8ac0f4b4f7a592e596af26893ea41ba35","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# mock.patch must before import mech_driver, because mech_driver will load the\r"},{"line_number":32,"context_line":"# lockedobjects_db\r"},{"line_number":33,"context_line":"mock.patch(\u0027dragonflow.db.neutron.lockedobjects_db.wrap_db_lock\u0027,\r"},{"line_number":34,"context_line":"           stub_wrap_db_lock).start()\r"},{"line_number":35,"context_line":"from dragonflow.db import api_nb\r"},{"line_number":36,"context_line":"from dragonflow.db.neutron import versionobjects_db as version_db\r"},{"line_number":37,"context_line":"from dragonflow.neutron.services.qos.notification_drivers import \\\r"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_74868914","line":34,"updated":"2016-09-06 05:39:51.000000000","message":"What about my comment here from patch set 19? stub_wrap_db_lock is still too complex for its task.","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"2b164996633aaa1256a875cac367e069c25cf4ae","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# mock.patch must before import mech_driver, because mech_driver will load the\r"},{"line_number":32,"context_line":"# lockedobjects_db\r"},{"line_number":33,"context_line":"mock.patch(\u0027dragonflow.db.neutron.lockedobjects_db.wrap_db_lock\u0027,\r"},{"line_number":34,"context_line":"           stub_wrap_db_lock).start()\r"},{"line_number":35,"context_line":"from dragonflow.db import api_nb\r"},{"line_number":36,"context_line":"from dragonflow.db.neutron import versionobjects_db as version_db\r"},{"line_number":37,"context_line":"from dragonflow.neutron.services.qos.notification_drivers import \\\r"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_816aacec","line":34,"in_reply_to":"9a89bdaa_74868914","updated":"2016-09-07 07:39:44.000000000","message":"sorry, i can\u0027t reply the comment after rebased:(\ni don\u0027t know how to pass \u0027lamda x:x\u0027, would you give me some advices? thank you.","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"50a42739198efa1d6b29e81d96666ab05d67c3f6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            123, 456, name\u003d\u0027qos1\u0027, rules\u003d[], version\u003dself.dbversion)\r"},{"line_number":66,"context_line":"\r"},{"line_number":67,"context_line":"    def test_update_policy(self):\r"},{"line_number":68,"context_line":"        manager.NeutronManager.get_service_plugins \u003d mock.Mock(\r"},{"line_number":69,"context_line":"            return_value\u003dservice_plugin)\r"},{"line_number":70,"context_line":"\r"},{"line_number":71,"context_line":"        rules \u003d {\u0027id\u0027: 123,\r"},{"line_number":72,"context_line":"                 \u0027max_burst_kbps\u0027: 1000,\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"7a8ec9b2_6d028fb5","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":37},"updated":"2016-09-19 10:13:03.000000000","message":"You should not make the global mock here. The failed py27 is because of this code.  Try to use:\n\nwith mock.patch(\"\"):","commit_id":"c0c9473a099145b68d098f4e1190fedba2e8d087"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"98a6e386a65cb84f052d11123023ef9a6c6d90e1","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            123, 456, name\u003d\u0027qos1\u0027, rules\u003d[], version\u003dself.dbversion)\r"},{"line_number":66,"context_line":"\r"},{"line_number":67,"context_line":"    def test_update_policy(self):\r"},{"line_number":68,"context_line":"        manager.NeutronManager.get_service_plugins \u003d mock.Mock(\r"},{"line_number":69,"context_line":"            return_value\u003dservice_plugin)\r"},{"line_number":70,"context_line":"\r"},{"line_number":71,"context_line":"        rules \u003d {\u0027id\u0027: 123,\r"},{"line_number":72,"context_line":"                 \u0027max_burst_kbps\u0027: 1000,\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"7a8ec9b2_e992e2f5","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":37},"in_reply_to":"7a8ec9b2_6d028fb5","updated":"2016-09-20 03:50:10.000000000","message":"Done","commit_id":"c0c9473a099145b68d098f4e1190fedba2e8d087"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"22d8cd5c5bce2a49c0d7bc747cf65fedcd781ed9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from dragonflow.db import api_nb"},{"line_number":36,"context_line":"from dragonflow.neutron.services.qos.notification_drivers import \\"},{"line_number":37,"context_line":"    df_qos_notification_driver"},{"line_number":38,"context_line":"from neutron.api.rpc.callbacks import events as rpc_events"},{"line_number":39,"context_line":"from neutron.tests import base"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"5a8bc5a2_1f2d2c46","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":58},"updated":"2016-09-24 10:50:11.000000000","message":"df has nothing to do with rpc, so no need to import it","commit_id":"83564eeaa056fe3c6caea6b743ce66cbd16275ad"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"22d8cd5c5bce2a49c0d7bc747cf65fedcd781ed9","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class TestDFQosNotificationDriver(base.BaseTestCase):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\"Testing dragonflow mechanism driver.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def setUp(self):"},{"line_number":47,"context_line":"        super(TestDFQosNotificationDriver, self).setUp()"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a8bc5a2_1f060cce","line":44,"range":{"start_line":44,"start_character":7,"end_line":44,"end_character":42},"updated":"2016-09-24 10:50:11.000000000","message":"Notification drvier","commit_id":"83564eeaa056fe3c6caea6b743ce66cbd16275ad"}],"dragonflow/tests/unit/test_mech_driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ccf1ae8ac0f4b4f7a592e596af26893ea41ba35","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            subnets\u003d[],"},{"line_number":78,"context_line":"            mtu\u003d1450,"},{"line_number":79,"context_line":"            version\u003dself.dbversion)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_delete_network_postcommit(self):"},{"line_number":82,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":83,"context_line":"        network_id \u003d \u0027123\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_f4c0d92c","line":80,"updated":"2016-09-06 05:39:51.000000000","message":"Why was this test removed?","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"2b164996633aaa1256a875cac367e069c25cf4ae","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            subnets\u003d[],"},{"line_number":78,"context_line":"            mtu\u003d1450,"},{"line_number":79,"context_line":"            version\u003dself.dbversion)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_delete_network_postcommit(self):"},{"line_number":82,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":83,"context_line":"        network_id \u003d \u0027123\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_64ebf613","line":80,"in_reply_to":"9a89bdaa_f4c0d92c","updated":"2016-09-07 07:39:44.000000000","message":"sorry, the test_update_network_postcommit has been omitted when compared. i will add it.","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ccf1ae8ac0f4b4f7a592e596af26893ea41ba35","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                \u0027network_id\u0027: net_id,"},{"line_number":365,"context_line":"                \u0027binding:profile\u0027: None,"},{"line_number":366,"context_line":"                \u0027binding:vnic_type\u0027: \u0027ovs\u0027,"},{"line_number":367,"context_line":"                \u0027db_version\u0027: self.dbversion}"},{"line_number":368,"context_line":"        return FakeContext(port)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def _get_network_context(self, tenant_id, net_id, network_type, seg_id):"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_34e161d1","line":367,"updated":"2016-09-06 05:39:51.000000000","message":"Why was this argument removed?","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":20960,"name":"wangyongben","email":"wangyongben@huawei.com","username":"wangyonben"},"change_message_id":"2b164996633aaa1256a875cac367e069c25cf4ae","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                \u0027network_id\u0027: net_id,"},{"line_number":365,"context_line":"                \u0027binding:profile\u0027: None,"},{"line_number":366,"context_line":"                \u0027binding:vnic_type\u0027: \u0027ovs\u0027,"},{"line_number":367,"context_line":"                \u0027db_version\u0027: self.dbversion}"},{"line_number":368,"context_line":"        return FakeContext(port)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def _get_network_context(self, tenant_id, net_id, network_type, seg_id):"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a89bdaa_a13970f4","line":367,"in_reply_to":"9a89bdaa_34e161d1","updated":"2016-09-07 07:39:44.000000000","message":"thank you, i will add it.","commit_id":"4abc9317eb898261e81be3929d88811917dab504"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"5cf1b47fbd8021f6e4ae950f8e612cc86b880e85","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def setUp(self):"},{"line_number":46,"context_line":"        super(TestDFMechDriver, self).setUp()"},{"line_number":47,"context_line":"        self.driver \u003d mech_driver.DFMechDriver()"},{"line_number":48,"context_line":"        api_nb.NbApi.get_instance \u003d mock.Mock()"},{"line_number":49,"context_line":"        self.driver.initialize()"},{"line_number":50,"context_line":"        self.driver.nb_api \u003d mock.Mock()"},{"line_number":51,"context_line":"        self.dbversion \u003d 0"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_9d7c2474","line":48,"range":{"start_line":48,"start_character":7,"end_line":48,"end_character":47},"updated":"2016-09-23 02:12:26.000000000","message":"You should prevent global mock, other tests might be affected.","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"115a6f5a38793b30c6e92bfa586572bf634917be","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def setUp(self):"},{"line_number":46,"context_line":"        super(TestDFMechDriver, self).setUp()"},{"line_number":47,"context_line":"        self.driver \u003d mech_driver.DFMechDriver()"},{"line_number":48,"context_line":"        api_nb.NbApi.get_instance \u003d mock.Mock()"},{"line_number":49,"context_line":"        self.driver.initialize()"},{"line_number":50,"context_line":"        self.driver.nb_api \u003d mock.Mock()"},{"line_number":51,"context_line":"        self.dbversion \u003d 0"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a8bc5a2_74cf697f","line":48,"range":{"start_line":48,"start_character":7,"end_line":48,"end_character":47},"in_reply_to":"5a8bc5a2_9d7c2474","updated":"2016-09-23 08:42:07.000000000","message":"Done","commit_id":"198635008467ba71e862366c449196123fb619e7"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"b1e2bb2672351b8b114619c00d4778d4476c2870","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                   \u0027provider:segmentation_id\u0027: seg_id,"},{"line_number":401,"context_line":"                   \u0027router:external\u0027: False,"},{"line_number":402,"context_line":"                   \u0027mtu\u0027: 1450,"},{"line_number":403,"context_line":"                   \u0027revision_number\u0027: self.dbversion,"},{"line_number":404,"context_line":"                   \u0027qos_policy_id\u0027: 100}"},{"line_number":405,"context_line":"        segments \u003d [{\u0027segmentation_id\u0027: seg_id}]"},{"line_number":406,"context_line":"        return FakeNetworkContext(network, segments)"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a8bc5a2_e2d64926","line":403,"range":{"start_line":403,"start_character":19,"end_line":403,"end_character":36},"updated":"2016-09-23 13:04:08.000000000","message":"why use revision_number? it will lead the keynotfound error, you can wait this patch: https://review.openstack.org/#/c/374698/ to be merged or you can merge before it :)","commit_id":"02a37884e258b3b3f40487eda035a07a34294f72"},{"author":{"_account_id":22338,"name":"xuxiaojie","email":"xiaojie.xu@huawei.com","username":"xuxiaojie"},"change_message_id":"7e91b67fb4b99b93754780ee08b4b55ed3630242","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                   \u0027provider:segmentation_id\u0027: seg_id,"},{"line_number":401,"context_line":"                   \u0027router:external\u0027: False,"},{"line_number":402,"context_line":"                   \u0027mtu\u0027: 1450,"},{"line_number":403,"context_line":"                   \u0027revision_number\u0027: self.dbversion,"},{"line_number":404,"context_line":"                   \u0027qos_policy_id\u0027: 100}"},{"line_number":405,"context_line":"        segments \u003d [{\u0027segmentation_id\u0027: seg_id}]"},{"line_number":406,"context_line":"        return FakeNetworkContext(network, segments)"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a8bc5a2_101a836e","line":403,"range":{"start_line":403,"start_character":19,"end_line":403,"end_character":36},"in_reply_to":"5a8bc5a2_e2d64926","updated":"2016-09-24 00:58:02.000000000","message":"i will fix the test_create_network","commit_id":"02a37884e258b3b3f40487eda035a07a34294f72"}]}
