)]}'
{"devstack/plugin.sh":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":114,"context_line":"if [[ \"$DF_REDIS_PUBSUB\" \u003d\u003d \"True\" ]]; then"},{"line_number":115,"context_line":"    DF_PUB_SUB\u003d\"True\""},{"line_number":116,"context_line":"    DF_PUB_SUB_USE_MULTIPROC\u003d\"False\""},{"line_number":117,"context_line":"    PORT_STATUS_NOTIFIER\u003d\"redis_port_status_notifier_driver\""},{"line_number":118,"context_line":"    source $DEST/dragonflow/devstack/redis_pubsub_driver"},{"line_number":119,"context_line":"fi"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-sh","patch_set":36,"id":"9a89bdaa_541b1c80","line":117,"updated":"2016-09-13 07:06:06.000000000","message":"nit: Explicitly set empty string as default to this variable in file \u0027settings\u0027.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":114,"context_line":"if [[ \"$DF_REDIS_PUBSUB\" \u003d\u003d \"True\" ]]; then"},{"line_number":115,"context_line":"    DF_PUB_SUB\u003d\"True\""},{"line_number":116,"context_line":"    DF_PUB_SUB_USE_MULTIPROC\u003d\"False\""},{"line_number":117,"context_line":"    PORT_STATUS_NOTIFIER\u003d\"redis_port_status_notifier_driver\""},{"line_number":118,"context_line":"    source $DEST/dragonflow/devstack/redis_pubsub_driver"},{"line_number":119,"context_line":"fi"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-sh","patch_set":36,"id":"9a89bdaa_ed27d060","line":117,"in_reply_to":"9a89bdaa_541b1c80","updated":"2016-09-13 09:11:28.000000000","message":"I don\u0027t get what\u0027s meaning here clearly","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1f09c8f4a3a4fe4b2fabd20631665f17a2a0b305","unresolved":false,"context_lines":[{"line_number":114,"context_line":"if [[ \"$DF_REDIS_PUBSUB\" \u003d\u003d \"True\" ]]; then"},{"line_number":115,"context_line":"    DF_PUB_SUB\u003d\"True\""},{"line_number":116,"context_line":"    DF_PUB_SUB_USE_MULTIPROC\u003d\"False\""},{"line_number":117,"context_line":"    PORT_STATUS_NOTIFIER\u003d\"redis_port_status_notifier_driver\""},{"line_number":118,"context_line":"    source $DEST/dragonflow/devstack/redis_pubsub_driver"},{"line_number":119,"context_line":"fi"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-sh","patch_set":36,"id":"9a89bdaa_3ee55c08","line":117,"in_reply_to":"9a89bdaa_a8ee9688","updated":"2016-09-13 09:48:56.000000000","message":"ok,I will add it","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"379af1ad79e51a300c77075332976641760b2640","unresolved":false,"context_lines":[{"line_number":114,"context_line":"if [[ \"$DF_REDIS_PUBSUB\" \u003d\u003d \"True\" ]]; then"},{"line_number":115,"context_line":"    DF_PUB_SUB\u003d\"True\""},{"line_number":116,"context_line":"    DF_PUB_SUB_USE_MULTIPROC\u003d\"False\""},{"line_number":117,"context_line":"    PORT_STATUS_NOTIFIER\u003d\"redis_port_status_notifier_driver\""},{"line_number":118,"context_line":"    source $DEST/dragonflow/devstack/redis_pubsub_driver"},{"line_number":119,"context_line":"fi"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-sh","patch_set":36,"id":"9a89bdaa_a8ee9688","line":117,"in_reply_to":"9a89bdaa_ed27d060","updated":"2016-09-13 09:22:28.000000000","message":"PORT_STATUS_NOTIFIER is not defined anywhere else. It should be defined with a default value in settings. e.g. add to the \u0027settings\u0027 file the line:\nPORT_STATUS_NOTIFIER\u003d${PORT_STATUS_NOTIFIER:-\"\"}\n\nBut it\u0027s not very important, since the default value in bash is \"\" anyway.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"14d9d0bccd0e935a39855f824e4088acd60a1397","unresolved":false,"context_lines":[{"line_number":114,"context_line":"if [[ \"$DF_REDIS_PUBSUB\" \u003d\u003d \"True\" ]]; then"},{"line_number":115,"context_line":"    DF_PUB_SUB\u003d\"True\""},{"line_number":116,"context_line":"    DF_PUB_SUB_USE_MULTIPROC\u003d\"False\""},{"line_number":117,"context_line":"    ENABLE_PORT_STATUS_NOTIFIER\u003d\"True\""},{"line_number":118,"context_line":"    PORT_STATUS_NOTIFIER\u003d\"redis_port_status_notifier_driver\""},{"line_number":119,"context_line":"    source $DEST/dragonflow/devstack/redis_pubsub_driver"},{"line_number":120,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":50,"id":"7a8ec9b2_a5be2ed2","line":117,"updated":"2016-09-20 09:40:28.000000000","message":"Please change to:\nENABLE_PORT_STATUS_NOTIFIER\u003d${ENABLE_PORT_STATUS_NOTIFIER:-\"True}\n\nThis way, this parameter can be overriden from local.conf.","commit_id":"a709302724dd149d2a4387cc6ce29bdc3a75d440"}],"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d863d156e5aa397c92b53eaf660b755d09f84d20","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from dragonflow.db import api_nb"},{"line_number":33,"context_line":"from dragonflow.db import db_store"},{"line_number":34,"context_line":"from dragonflow.db.drivers import ovsdb_vswitch_impl"},{"line_number":35,"context_line":"from dragonflow.db import port_status"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from ryu.base.app_manager import AppManager"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_ae608d36","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":37},"updated":"2016-07-19 11:44:14.000000000","message":"move it up to line 34","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"0064d759abf15ce44ac71bc8879ce50c123d6f56","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from dragonflow.db import api_nb"},{"line_number":33,"context_line":"from dragonflow.db import db_store"},{"line_number":34,"context_line":"from dragonflow.db.drivers import ovsdb_vswitch_impl"},{"line_number":35,"context_line":"from dragonflow.db import port_status"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from ryu.base.app_manager import AppManager"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_0ef087c8","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":37},"in_reply_to":"dada55a8_ae608d36","updated":"2016-07-20 08:35:52.000000000","message":"As pep8 rules, it should be here","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d863d156e5aa397c92b53eaf660b755d09f84d20","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            self.nb_api,"},{"line_number":60,"context_line":"            use_pubsub\u003dcfg.CONF.df.enable_df_pub_sub,"},{"line_number":61,"context_line":"            is_neutron_server\u003dFalse)"},{"line_number":62,"context_line":"        port_status.initialise()"},{"line_number":63,"context_line":"        self.vswitch_api \u003d ovsdb_vswitch_impl.OvsdbSwitchApi("},{"line_number":64,"context_line":"            self.ip, self.nb_api)"},{"line_number":65,"context_line":"        kwargs \u003d dict("}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_13cd865d","line":62,"range":{"start_line":62,"start_character":8,"end_line":62,"end_character":32},"updated":"2016-07-19 11:44:14.000000000","message":"self.port_status?","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"0064d759abf15ce44ac71bc8879ce50c123d6f56","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            self.nb_api,"},{"line_number":60,"context_line":"            use_pubsub\u003dcfg.CONF.df.enable_df_pub_sub,"},{"line_number":61,"context_line":"            is_neutron_server\u003dFalse)"},{"line_number":62,"context_line":"        port_status.initialise()"},{"line_number":63,"context_line":"        self.vswitch_api \u003d ovsdb_vswitch_impl.OvsdbSwitchApi("},{"line_number":64,"context_line":"            self.ip, self.nb_api)"},{"line_number":65,"context_line":"        kwargs \u003d dict("}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_8eb2b704","line":62,"range":{"start_line":62,"start_character":8,"end_line":62,"end_character":32},"in_reply_to":"dada55a8_13cd865d","updated":"2016-07-20 08:35:52.000000000","message":"Done","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"99033f7d3bbaa91407c6823944f7e1fb57d7dc67","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def run(self):"},{"line_number":78,"context_line":"        self.nb_api.initialize(db_ip\u003dcfg.CONF.df.remote_db_ip,"},{"line_number":79,"context_line":"                               db_port\u003dcfg.CONF.df.remote_db_port)"},{"line_number":80,"context_line":"        self.port_status_notifier.initialise(mech_driver\u003dNone,"},{"line_number":81,"context_line":"                                             nb_api\u003dself.nb_api,"},{"line_number":82,"context_line":"                                             is_neutron_server\u003dFalse)"},{"line_number":83,"context_line":"        self.vswitch_api.initialize()"}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_1dd7274c","line":80,"range":{"start_line":80,"start_character":34,"end_line":80,"end_character":44},"updated":"2016-08-17 02:49:38.000000000","message":"initialize？","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"71cdc73e43afdbc20f71c9ca5b7ec5688cabeebb","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def run(self):"},{"line_number":78,"context_line":"        self.nb_api.initialize(db_ip\u003dcfg.CONF.df.remote_db_ip,"},{"line_number":79,"context_line":"                               db_port\u003dcfg.CONF.df.remote_db_port)"},{"line_number":80,"context_line":"        self.port_status_notifier.initialise(mech_driver\u003dNone,"},{"line_number":81,"context_line":"                                             nb_api\u003dself.nb_api,"},{"line_number":82,"context_line":"                                             is_neutron_server\u003dFalse)"},{"line_number":83,"context_line":"        self.vswitch_api.initialize()"}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_09ac098b","line":80,"range":{"start_line":80,"start_character":34,"end_line":80,"end_character":44},"in_reply_to":"3ac371cc_1dd7274c","updated":"2016-08-17 03:36:37.000000000","message":"ok, i will change it","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.nb_api \u003d api_nb.NbApi("},{"line_number":66,"context_line":"            nb_driver,"},{"line_number":67,"context_line":"            use_pubsub\u003dcfg.CONF.df.enable_df_pub_sub)"},{"line_number":68,"context_line":"        port_status_notifier \u003d df_utils.load_driver("},{"line_number":69,"context_line":"            cfg.CONF.df.port_status_notifier,"},{"line_number":70,"context_line":"            df_utils.DF_PORT_STATUS_DRIVER_NAMESPACE)"},{"line_number":71,"context_line":"        self.port_status_notifier \u003d port_status_notifier"},{"line_number":72,"context_line":"        self.vswitch_api \u003d ovsdb_vswitch_impl.OvsdbSwitchApi("},{"line_number":73,"context_line":"            self.ip, self.nb_api)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_7f571902","line":70,"range":{"start_line":68,"start_character":0,"end_line":70,"end_character":53},"updated":"2016-09-13 07:06:06.000000000","message":"You can assign this value directly to self.port_status_notifier.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.nb_api \u003d api_nb.NbApi("},{"line_number":66,"context_line":"            nb_driver,"},{"line_number":67,"context_line":"            use_pubsub\u003dcfg.CONF.df.enable_df_pub_sub)"},{"line_number":68,"context_line":"        port_status_notifier \u003d df_utils.load_driver("},{"line_number":69,"context_line":"            cfg.CONF.df.port_status_notifier,"},{"line_number":70,"context_line":"            df_utils.DF_PORT_STATUS_DRIVER_NAMESPACE)"},{"line_number":71,"context_line":"        self.port_status_notifier \u003d port_status_notifier"},{"line_number":72,"context_line":"        self.vswitch_api \u003d ovsdb_vswitch_impl.OvsdbSwitchApi("},{"line_number":73,"context_line":"            self.ip, self.nb_api)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_9404917e","line":70,"range":{"start_line":68,"start_character":0,"end_line":70,"end_character":53},"in_reply_to":"9a89bdaa_7f571902","updated":"2016-09-13 09:11:28.000000000","message":"yes","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"40918a0c7af5465d1011eeaeced8dd9302474eb2","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":95,"context_line":"            self.port_status_notifier.initialize(mech_driver\u003dNone,"},{"line_number":96,"context_line":"                                             nb_api\u003dself.nb_api,"},{"line_number":97,"context_line":"                                             pub\u003dNone,"},{"line_number":98,"context_line":"                                             sub\u003dNone,"},{"line_number":99,"context_line":"                                             is_neutron_server\u003dFalse)"},{"line_number":100,"context_line":"        self.topology \u003d topology.Topology(self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"1a95cdbc_4a6dd9ca","line":97,"updated":"2016-10-10 07:06:24.000000000","message":"Shouldn\u0027t this be pub\u003dnb_api.publisher (or something similar?)","commit_id":"f9b370a25a505fc50456475fb6a0ad4ca49f4d4d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"6d38d34313ce3071db3d324eae8dc721dc3b256f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":95,"context_line":"            self.port_status_notifier.initialize(mech_driver\u003dNone,"},{"line_number":96,"context_line":"                                             nb_api\u003dself.nb_api,"},{"line_number":97,"context_line":"                                             pub\u003dNone,"},{"line_number":98,"context_line":"                                             sub\u003dNone,"},{"line_number":99,"context_line":"                                             is_neutron_server\u003dFalse)"},{"line_number":100,"context_line":"        self.topology \u003d topology.Topology(self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"1a95cdbc_0106571f","line":97,"in_reply_to":"1a95cdbc_4a6dd9ca","updated":"2016-10-10 09:02:58.000000000","message":"Yes, you are right,just miss it by mistake.","commit_id":"f9b370a25a505fc50456475fb6a0ad4ca49f4d4d"}],"dragonflow/controller/topology.py":[{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"b58cf0212dea1ee8d38decc5ecd37a41f4b5049f","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        self.controller \u003d controller"},{"line_number":38,"context_line":"        self.nb_api \u003d controller.get_nb_api()"},{"line_number":39,"context_line":"        self.port_status \u003d controller.get_port_status()"},{"line_number":40,"context_line":"        self.db_store \u003d controller.get_db_store()"},{"line_number":41,"context_line":"        self.openflow_app \u003d controller.get_openflow_app()"},{"line_number":42,"context_line":"        self.chassis_name \u003d controller.get_chassis_name()"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_4dc9e925","line":39,"range":{"start_line":39,"start_character":13,"end_line":39,"end_character":24},"updated":"2016-07-20 07:44:22.000000000","message":"You can rename this member. It\u0027s a little bit confusing. port_status_reporter or something else.","commit_id":"4f27f4b65a13d59a4e471fe8051b70e6111a36ab"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"70c1f809dda386a6d1701e04455030db31b1bddc","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        self.controller \u003d controller"},{"line_number":38,"context_line":"        self.nb_api \u003d controller.get_nb_api()"},{"line_number":39,"context_line":"        self.port_status \u003d controller.get_port_status()"},{"line_number":40,"context_line":"        self.db_store \u003d controller.get_db_store()"},{"line_number":41,"context_line":"        self.openflow_app \u003d controller.get_openflow_app()"},{"line_number":42,"context_line":"        self.chassis_name \u003d controller.get_chassis_name()"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_b36c4836","line":39,"range":{"start_line":39,"start_character":13,"end_line":39,"end_character":24},"in_reply_to":"dada55a8_4dc9e925","updated":"2016-07-20 08:29:52.000000000","message":"Done","commit_id":"4f27f4b65a13d59a4e471fe8051b70e6111a36ab"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"14d9d0bccd0e935a39855f824e4088acd60a1397","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.controller \u003d controller"},{"line_number":39,"context_line":"        self.nb_api \u003d controller.get_nb_api()"},{"line_number":40,"context_line":"        if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":41,"context_line":"            self.port_status_reporter \u003d controller.get_portstatus_notifier()"},{"line_number":42,"context_line":"        self.db_store \u003d controller.get_db_store()"},{"line_number":43,"context_line":"        self.openflow_app \u003d controller.get_openflow_app()"},{"line_number":44,"context_line":"        self.chassis_name \u003d controller.get_chassis_name()"}],"source_content_type":"text/x-python","patch_set":50,"id":"7a8ec9b2_a57d4ee9","line":41,"updated":"2016-09-20 09:40:28.000000000","message":"nit: if enable_port_status_notifier is false, then get_portstatus_notifier() returns None. Then self.port_status_reporter will be defined and None, rather than undefined.\n\nIt can stay like this, I just wanted to verify this behavior is expected.","commit_id":"a709302724dd149d2a4387cc6ce29bdc3a75d440"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0c4c4fa47c8c2b7f3b2bc883baefc7c0333a7dcc","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self._vm_port_updated(ovs_port)"},{"line_number":137,"context_line":"        # publish vm port up event"},{"line_number":138,"context_line":"        if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":139,"context_line":"            self.port_status_reporter.notify_port_status(ovs_port, \u0027up\u0027)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _vm_port_updated(self, ovs_port):"},{"line_number":142,"context_line":"        lport_id \u003d ovs_port.get_iface_id()"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_fbebddd9","line":139,"range":{"start_line":139,"start_character":67,"end_line":139,"end_character":71},"updated":"2016-10-10 01:39:01.000000000","message":"Given the fact that a const has already been defined for the status, why not use the const here?","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e20447f99d88e7278bcfcf09fb0a55973525e425","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self._vm_port_updated(ovs_port)"},{"line_number":137,"context_line":"        # publish vm port up event"},{"line_number":138,"context_line":"        if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":139,"context_line":"            self.port_status_reporter.notify_port_status(ovs_port, \u0027up\u0027)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _vm_port_updated(self, ovs_port):"},{"line_number":142,"context_line":"        lport_id \u003d ovs_port.get_iface_id()"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_0985a358","line":139,"range":{"start_line":139,"start_character":67,"end_line":139,"end_character":71},"in_reply_to":"1a95cdbc_fbebddd9","updated":"2016-10-10 03:12:35.000000000","message":"Done","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0c4c4fa47c8c2b7f3b2bc883baefc7c0333a7dcc","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        finally:"},{"line_number":195,"context_line":"            # publish vm port down event."},{"line_number":196,"context_line":"            if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":197,"context_line":"                self.port_status_reporter.notify_port_status(ovs_port, \u0027down\u0027)"},{"line_number":198,"context_line":"            del self.ovs_to_lport_mapping[ovs_port_id]"},{"line_number":199,"context_line":"            self._del_from_topic_subscribed(topic, lport_id)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_1bbde9d7","line":197,"range":{"start_line":197,"start_character":72,"end_line":197,"end_character":76},"updated":"2016-10-10 01:39:01.000000000","message":"ditto","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e20447f99d88e7278bcfcf09fb0a55973525e425","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        finally:"},{"line_number":195,"context_line":"            # publish vm port down event."},{"line_number":196,"context_line":"            if cfg.CONF.df.enable_port_status_notifier:"},{"line_number":197,"context_line":"                self.port_status_reporter.notify_port_status(ovs_port, \u0027down\u0027)"},{"line_number":198,"context_line":"            del self.ovs_to_lport_mapping[ovs_port_id]"},{"line_number":199,"context_line":"            self._del_from_topic_subscribed(topic, lport_id)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_29889f70","line":197,"range":{"start_line":197,"start_character":72,"end_line":197,"end_character":76},"in_reply_to":"1a95cdbc_1bbde9d7","updated":"2016-10-10 03:12:35.000000000","message":"Done","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":20298,"name":"feipeng","email":"feipeng1@huawei.com","username":"feipeng"},"change_message_id":"281aeaa9797900f8ace782934c09cde60b604a7c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":167,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":168,"context_line":"            if \u0027up\u0027 \u003d\u003d value:"},{"line_number":169,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":170,"context_line":"            eventlet.sleep(0)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def send_port_status_event(self, table, key, action, value):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_778fdbcc","line":169,"range":{"start_line":169,"start_character":16,"end_line":169,"end_character":56},"updated":"2016-07-08 01:48:17.000000000","message":"if many port status change ,it may cause neutron server very busy","commit_id":"f9238b79cbf120d7deaa9196b9dbdcc7f785bbbc"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"dd4b92982f404b21ce58ed757451190e938ad6ce","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        return table_monitor"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _stop_db_table_monitors(self):"},{"line_number":140,"context_line":"        if not self.db_table_monitors:"},{"line_number":141,"context_line":"            return"},{"line_number":142,"context_line":"        for monitor in self.db_table_monitors:"},{"line_number":143,"context_line":"            monitor.stop()"},{"line_number":144,"context_line":"        self.db_table_monitors \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_a07d76b3","line":141,"range":{"start_line":140,"start_character":8,"end_line":141,"end_character":18},"updated":"2016-07-08 07:48:37.000000000","message":"not necessary","commit_id":"e47087beb2f34c8fd11a1e6529714bcb36a008fe"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"dd4b92982f404b21ce58ed757451190e938ad6ce","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":167,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":168,"context_line":"            if \u0027up\u0027 \u003d\u003d value:"},{"line_number":169,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":170,"context_line":"            eventlet.sleep(0)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def send_port_status_event(self, table, key, action, value):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_03b574cf","line":169,"range":{"start_line":169,"start_character":21,"end_line":169,"end_character":32},"updated":"2016-07-08 07:48:37.000000000","message":"how about port status down?","commit_id":"e47087beb2f34c8fd11a1e6529714bcb36a008fe"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"14d9d0bccd0e935a39855f824e4088acd60a1397","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":152,"context_line":"        return topic"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def creat_portstats(self, server_ip):"},{"line_number":155,"context_line":"        self.driver.create_key(\u0027portstats\u0027, server_ip,"},{"line_number":156,"context_line":"                              server_ip, None)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"7a8ec9b2_25d85eef","line":154,"updated":"2016-09-20 09:40:28.000000000","message":"typo: creat_ -\u003e create_\n\nAdditionally, please rename to create_port_status and get_all_port_status_keys (these shortcuts can be confusing in the future).\n\nThe table name (portstats) can stay as-is.","commit_id":"a709302724dd149d2a4387cc6ce29bdc3a75d440"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"975e6d05697a8ef16e8630885def4771e5f674e5","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def allocate_tunnel_key(self):"},{"line_number":146,"context_line":"        return self.driver.allocate_unique_key()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_all_port_status_keys(self):"},{"line_number":149,"context_line":"        topics \u003d self.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":150,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":151,"context_line":"        return topic"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a8bc5a2_2714969e","line":148,"updated":"2016-09-25 08:29:10.000000000","message":"This method does something different than it\u0027s name. It returns a random topic, rather than the keys.\n\nSince I only noticed it now, this can be fixed in a separate patch.","commit_id":"626a226ae41385cc216812fb0fadb3e3c0222dca"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"67172d72a621af59d53205567aac0c3372e62c9b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def allocate_tunnel_key(self):"},{"line_number":146,"context_line":"        return self.driver.allocate_unique_key()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_all_port_status_keys(self):"},{"line_number":149,"context_line":"        topics \u003d self.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":150,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":151,"context_line":"        return topic"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a8bc5a2_65893175","line":148,"in_reply_to":"5a8bc5a2_2714969e","updated":"2016-09-26 01:34:23.000000000","message":"ok","commit_id":"626a226ae41385cc216812fb0fadb3e3c0222dca"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"29d496bf2208f853bd5e07d746593d43a29a6794","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_all_port_status_keys(self):"},{"line_number":149,"context_line":"        topics \u003d self.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":150,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":151,"context_line":"        return topic"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_port_status(self, server_ip):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_4f017805","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":37},"updated":"2016-10-09 02:49:19.000000000","message":"This function is to get all the keys of the given table. why using \u0027topics\u0027 and \u0027topic\u0027 as the variable name? why using random to get one of the \u0027topic\u0027?","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"3ece2356594fc63e9054dca98e320933a1c0d154","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_all_port_status_keys(self):"},{"line_number":149,"context_line":"        topics \u003d self.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":150,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":151,"context_line":"        return topic"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_port_status(self, server_ip):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_e2425bad","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":37},"in_reply_to":"1a95cdbc_22f1a3cd","updated":"2016-10-09 03:31:52.000000000","message":"Currently I\u0027m thinking of health check of neutron-server side and local controller side. Load balancing without health check will cause lots of unpredictable problems. I\u0027d like to provide a unified health check mechansim for df, but I just have pieces of thoughts.","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"9c6f59d9ee6998eb7d1173818b7b6cc80563eb54","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_all_port_status_keys(self):"},{"line_number":149,"context_line":"        topics \u003d self.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":150,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":151,"context_line":"        return topic"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_port_status(self, server_ip):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_22f1a3cd","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":37},"in_reply_to":"1a95cdbc_4f017805","updated":"2016-10-09 03:21:50.000000000","message":"Each neutron server has a topic, which is stored in DF DB. In the compute side, each controller selects a topic randomly to publish port status event in order to achieve load-balance of neutron server","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"24c523dda4a7fb39df34669f7e168baae2d7e667","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_all_port_status_keys(self):"},{"line_number":149,"context_line":"        topics \u003d self.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":150,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":151,"context_line":"        return topic"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_port_status(self, server_ip):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_a2e773aa","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":37},"in_reply_to":"1a95cdbc_e2425bad","updated":"2016-10-09 03:46:48.000000000","message":"Yes, this is just a simple realization of LB, we will improve it if we have a new LB mechanism for DF.","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0c4c4fa47c8c2b7f3b2bc883baefc7c0333a7dcc","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_port_status(self, server_ip):"},{"line_number":154,"context_line":"        self.driver.create_key(\u0027portstats\u0027, server_ip,"},{"line_number":155,"context_line":"                              server_ip, None)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def register_notification_callback(self, controller):"},{"line_number":158,"context_line":"        self.controller \u003d controller"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_5bb3f109","line":155,"range":{"start_line":155,"start_character":0,"end_line":155,"end_character":46},"updated":"2016-10-10 01:39:01.000000000","message":"nit: the indention here seems not right","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e20447f99d88e7278bcfcf09fb0a55973525e425","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_port_status(self, server_ip):"},{"line_number":154,"context_line":"        self.driver.create_key(\u0027portstats\u0027, server_ip,"},{"line_number":155,"context_line":"                              server_ip, None)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def register_notification_callback(self, controller):"},{"line_number":158,"context_line":"        self.controller \u003d controller"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_a994af8a","line":155,"range":{"start_line":155,"start_character":0,"end_line":155,"end_character":46},"in_reply_to":"1a95cdbc_5bb3f109","updated":"2016-10-10 03:12:35.000000000","message":"Done","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"}],"dragonflow/db/port_status.py":[{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"efc599f1f67c87d545d262caf8e3bb8143091ee1","unresolved":false,"context_lines":[{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"    def initialise(self):\r"},{"line_number":46,"context_line":"        if self.is_neutron_server:\r"},{"line_number":47,"context_line":"            if self.use_pubsub:\r"},{"line_number":48,"context_line":"                # for pub/sub use case,code in server node,\r"},{"line_number":49,"context_line":"                # keeping topic alive default in use.\r"},{"line_number":50,"context_line":"                self._server_pubsub_monitor()\r"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_1102b46f","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":31},"updated":"2016-07-19 02:37:06.000000000","message":"can not use this param.","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"717b4a0e0abc0e9e53bcc68879511818298424db","unresolved":false,"context_lines":[{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"    def initialise(self):\r"},{"line_number":46,"context_line":"        if self.is_neutron_server:\r"},{"line_number":47,"context_line":"            if self.use_pubsub:\r"},{"line_number":48,"context_line":"                # for pub/sub use case,code in server node,\r"},{"line_number":49,"context_line":"                # keeping topic alive default in use.\r"},{"line_number":50,"context_line":"                self._server_pubsub_monitor()\r"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_ae94db42","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":31},"in_reply_to":"dada55a8_1102b46f","updated":"2016-07-20 08:37:01.000000000","message":"Yes, I have changed the parameter","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6cd32c75beef329b7497696c9afa4765d801924e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"class PortStatus(object):\r"},{"line_number":33,"context_line":"    # PortStatus implements port status update south\r"},{"line_number":34,"context_line":"    # bond notify mechanism. There are two implementations\r"},{"line_number":35,"context_line":"    # based on pub/sub driver, pub/send event for redis and\r"},{"line_number":36,"context_line":"    # scanning table for zmq.\r"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_e2a8ac79","line":33,"range":{"start_line":33,"start_character":47,"end_line":33,"end_character":52},"updated":"2016-07-20 07:41:40.000000000","message":"southbound notification mechanism","commit_id":"4f27f4b65a13d59a4e471fe8051b70e6111a36ab"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"70c1f809dda386a6d1701e04455030db31b1bddc","unresolved":false,"context_lines":[{"line_number":30,"context_line":"\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"class PortStatus(object):\r"},{"line_number":33,"context_line":"    # PortStatus implements port status update south\r"},{"line_number":34,"context_line":"    # bond notify mechanism. There are two implementations\r"},{"line_number":35,"context_line":"    # based on pub/sub driver, pub/send event for redis and\r"},{"line_number":36,"context_line":"    # scanning table for zmq.\r"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_134d54c4","line":33,"range":{"start_line":33,"start_character":47,"end_line":33,"end_character":52},"in_reply_to":"dada55a8_e2a8ac79","updated":"2016-07-20 08:29:52.000000000","message":"Done","commit_id":"4f27f4b65a13d59a4e471fe8051b70e6111a36ab"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"6cd32c75beef329b7497696c9afa4765d801924e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if self.pubsub_driver \u003d\u003d \u0027redis_db_pubsub_driver\u0027:\r"},{"line_number":49,"context_line":"                # for pub/sub use case,code in server node,\r"},{"line_number":50,"context_line":"                # keeping topic alive default in use.\r"},{"line_number":51,"context_line":"                self._server_pubsub_monitor()\r"},{"line_number":52,"context_line":"                self.start_subsciber()\r"},{"line_number":53,"context_line":"            else:\r"},{"line_number":54,"context_line":"                # for table scanning, scanning port status\r"},{"line_number":55,"context_line":"                # lock status,to find if a new port status\r"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_c2600804","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":38},"updated":"2016-07-20 07:41:40.000000000","message":"Can we put different implementation into drivers. So we can  just call self.driver.initalize(is_neutron_server) here? Otherwise, we have to modify code here, when we add a new pubsub driver.","commit_id":"4f27f4b65a13d59a4e471fe8051b70e6111a36ab"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"70c1f809dda386a6d1701e04455030db31b1bddc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            if self.pubsub_driver \u003d\u003d \u0027redis_db_pubsub_driver\u0027:\r"},{"line_number":49,"context_line":"                # for pub/sub use case,code in server node,\r"},{"line_number":50,"context_line":"                # keeping topic alive default in use.\r"},{"line_number":51,"context_line":"                self._server_pubsub_monitor()\r"},{"line_number":52,"context_line":"                self.start_subsciber()\r"},{"line_number":53,"context_line":"            else:\r"},{"line_number":54,"context_line":"                # for table scanning, scanning port status\r"},{"line_number":55,"context_line":"                # lock status,to find if a new port status\r"}],"source_content_type":"text/x-python","patch_set":17,"id":"dada55a8_1380b48a","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":38},"in_reply_to":"dada55a8_c2600804","updated":"2016-07-20 08:29:52.000000000","message":"I think the code here is related to business-logic layer, and it\u0027s not suitable to put it in driver code. There are only function implementation code like publisher and subscriber in pubsub driver.","commit_id":"4f27f4b65a13d59a4e471fe8051b70e6111a36ab"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"99033f7d3bbaa91407c6823944f7e1fb57d7dc67","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    # notification mechanism.\r"},{"line_number":21,"context_line":"\r"},{"line_number":22,"context_line":"    @abc.abstractmethod\r"},{"line_number":23,"context_line":"    def initialise(self):\r"},{"line_number":24,"context_line":"        \"\"\"Initialise the portstatus both in server\r"},{"line_number":25,"context_line":"           compute node\r"},{"line_number":26,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_ddec6ff5","line":23,"range":{"start_line":23,"start_character":8,"end_line":23,"end_character":18},"updated":"2016-08-17 02:49:38.000000000","message":"initialize?","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"71cdc73e43afdbc20f71c9ca5b7ec5688cabeebb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    # notification mechanism.\r"},{"line_number":21,"context_line":"\r"},{"line_number":22,"context_line":"    @abc.abstractmethod\r"},{"line_number":23,"context_line":"    def initialise(self):\r"},{"line_number":24,"context_line":"        \"\"\"Initialise the portstatus both in server\r"},{"line_number":25,"context_line":"           compute node\r"},{"line_number":26,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_e9a88d79","line":23,"range":{"start_line":23,"start_character":8,"end_line":23,"end_character":18},"in_reply_to":"3ac371cc_ddec6ff5","updated":"2016-08-17 03:36:37.000000000","message":"ok","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"\r"},{"line_number":17,"context_line":"@six.add_metaclass(abc.ABCMeta)\r"},{"line_number":18,"context_line":"class Portstatus(object):\r"},{"line_number":19,"context_line":"    # PortStatus implements port status update southbound\r"},{"line_number":20,"context_line":"    # notification mechanism.\r"},{"line_number":21,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_7fcab9a2","line":18,"range":{"start_line":18,"start_character":10,"end_line":18,"end_character":11},"updated":"2016-09-13 07:06:06.000000000","message":"Rename to \u0027PortStatus\u0027 (Capital S on beginning of word Status).","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"\r"},{"line_number":17,"context_line":"@six.add_metaclass(abc.ABCMeta)\r"},{"line_number":18,"context_line":"class Portstatus(object):\r"},{"line_number":19,"context_line":"    # PortStatus implements port status update southbound\r"},{"line_number":20,"context_line":"    # notification mechanism.\r"},{"line_number":21,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_f4131d63","line":18,"range":{"start_line":18,"start_character":10,"end_line":18,"end_character":11},"in_reply_to":"9a89bdaa_7fcab9a2","updated":"2016-09-13 09:11:28.000000000","message":"yes","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \"\"\"\r"},{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"    @abc.abstractmethod\r"},{"line_number":31,"context_line":"    def server_status_monitors(self):\r"},{"line_number":32,"context_line":"        \"\"\"monitor table db in the server node\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"        :return:    None\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_df7e37e3","line":31,"updated":"2016-09-13 07:06:06.000000000","message":"Why is it necessary for this method to be public? Why does every driver have to implement it?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"379af1ad79e51a300c77075332976641760b2640","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \"\"\"\r"},{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"    @abc.abstractmethod\r"},{"line_number":31,"context_line":"    def server_status_monitors(self):\r"},{"line_number":32,"context_line":"        \"\"\"monitor table db in the server node\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"        :return:    None\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_c32bbd80","line":31,"in_reply_to":"9a89bdaa_b41d1575","updated":"2016-09-13 09:22:28.000000000","message":"Yes. That\u0027s exactly my point. ZMQ doesn\u0027t need it, and it is called from inside the plugin implementation anyway. Why is it public? Why does every plugin have to implement it? Why should you be able to call it from outside?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1f09c8f4a3a4fe4b2fabd20631665f17a2a0b305","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \"\"\"\r"},{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"    @abc.abstractmethod\r"},{"line_number":31,"context_line":"    def server_status_monitors(self):\r"},{"line_number":32,"context_line":"        \"\"\"monitor table db in the server node\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"        :return:    None\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_fed214d0","line":31,"in_reply_to":"9a89bdaa_c32bbd80","updated":"2016-09-13 09:48:56.000000000","message":"yes, I should delete it.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \"\"\"\r"},{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"    @abc.abstractmethod\r"},{"line_number":31,"context_line":"    def server_status_monitors(self):\r"},{"line_number":32,"context_line":"        \"\"\"monitor table db in the server node\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"        :return:    None\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_b41d1575","line":31,"in_reply_to":"9a89bdaa_df7e37e3","updated":"2016-09-13 09:11:28.000000000","message":"the driver based on pub/sub should implement it, to ensure the server is alive to compute nodes. ZMQ based don\u0027t need it.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"29d496bf2208f853bd5e07d746593d43a29a6794","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":18,"context_line":"class PortStatus(object):"},{"line_number":19,"context_line":"    # PortStatus implements port status update southbound"},{"line_number":20,"context_line":"    # notification mechanism."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_221d2366","line":18,"range":{"start_line":18,"start_character":6,"end_line":18,"end_character":16},"updated":"2016-10-09 02:49:19.000000000","message":"Is port_status_api.PortStatusDriver more suitable?","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"9c6f59d9ee6998eb7d1173818b7b6cc80563eb54","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":18,"context_line":"class PortStatus(object):"},{"line_number":19,"context_line":"    # PortStatus implements port status update southbound"},{"line_number":20,"context_line":"    # notification mechanism."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_a2af737b","line":18,"range":{"start_line":18,"start_character":6,"end_line":18,"end_character":16},"in_reply_to":"1a95cdbc_221d2366","updated":"2016-10-09 03:21:50.000000000","message":"OK, good point","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"}],"dragonflow/db/port_status_api.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f43e410ef93dc224278c20afcb90523a891b256a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    # notification mechanism."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @abc.abstractmethod"},{"line_number":23,"context_line":"    def initialize(self, mech_driver, nb_api, is_neutron_server):"},{"line_number":24,"context_line":"        \"\"\"Initialise the portstatus both in server"},{"line_number":25,"context_line":"           compute node"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_b6409108","line":23,"updated":"2016-10-09 12:02:53.000000000","message":"Please verify this signature is identical to the implementation\u0027s signature.","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b04acdfc5794c5b36d3d575b326b2bc960421c27","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    # notification mechanism."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @abc.abstractmethod"},{"line_number":23,"context_line":"    def initialize(self, mech_driver, nb_api, is_neutron_server):"},{"line_number":24,"context_line":"        \"\"\"Initialise the portstatus both in server"},{"line_number":25,"context_line":"           compute node"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_569aed6e","line":23,"in_reply_to":"1a95cdbc_b6409108","updated":"2016-10-09 12:32:20.000000000","message":"Done","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"}],"dragonflow/db/pub_sub_api.py":[{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"dd4b92982f404b21ce58ed757451190e938ad6ce","unresolved":false,"context_lines":[{"line_number":330,"context_line":"class PortStatusMonitor(TableMonitor):"},{"line_number":331,"context_line":"    def __init__(self, driver, publisher, timeout, polling_time\u003d10,"},{"line_number":332,"context_line":"                 local_ip\u003d\u0027127.0.0.1\u0027):"},{"line_number":333,"context_line":"        super(StalePublisherMonitor, self).__init__("},{"line_number":334,"context_line":"            PORT_STATUS_TABLE,"},{"line_number":335,"context_line":"            driver,"},{"line_number":336,"context_line":"            publisher,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_e02e5ef9","line":333,"range":{"start_line":333,"start_character":14,"end_line":333,"end_character":35},"updated":"2016-07-08 07:48:37.000000000","message":"PortStatusMonitor","commit_id":"e47087beb2f34c8fd11a1e6529714bcb36a008fe"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"dd4b92982f404b21ce58ed757451190e938ad6ce","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def __init__(self, driver, publisher, timeout, polling_time\u003d10,"},{"line_number":332,"context_line":"                 local_ip\u003d\u0027127.0.0.1\u0027):"},{"line_number":333,"context_line":"        super(StalePublisherMonitor, self).__init__("},{"line_number":334,"context_line":"            PORT_STATUS_TABLE,"},{"line_number":335,"context_line":"            driver,"},{"line_number":336,"context_line":"            publisher,"},{"line_number":337,"context_line":"            polling_time"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_603b8e39","line":334,"range":{"start_line":334,"start_character":12,"end_line":334,"end_character":29},"updated":"2016-07-08 07:48:37.000000000","message":"neutron server table may be a better name.","commit_id":"e47087beb2f34c8fd11a1e6529714bcb36a008fe"}],"dragonflow/db/pubsub_drivers/redis_port_status_notifier.py":[{"author":{"_account_id":20298,"name":"feipeng","email":"feipeng1@huawei.com","username":"feipeng"},"change_message_id":"60b68cefd56c67e0a66aa803676236b64d328916","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            # new port status update\r"},{"line_number":57,"context_line":"            self.start_publisher()\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"    def server_status_monitors(self):\r"},{"line_number":60,"context_line":"        # In pub/sub design, we need to mark a new timestamp\r"},{"line_number":61,"context_line":"        # periodically, so consistency tool will check if a\r"},{"line_number":62,"context_line":"        # server is alive.\r"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad45d7e_b720fd9c","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":30},"updated":"2016-08-09 07:52:11.000000000","message":"no one call this func ?","commit_id":"0381ff59af99dbbf36ffef5d3c87de74231e0da8"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"acfcad0fb46fb0f4363308cedeac5c415d7c1499","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            # new port status update\r"},{"line_number":57,"context_line":"            self.start_publisher()\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"    def server_status_monitors(self):\r"},{"line_number":60,"context_line":"        # In pub/sub design, we need to mark a new timestamp\r"},{"line_number":61,"context_line":"        # periodically, so consistency tool will check if a\r"},{"line_number":62,"context_line":"        # server is alive.\r"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad45d7e_b7cabd9f","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":30},"in_reply_to":"9ad45d7e_b720fd9c","updated":"2016-08-09 07:55:26.000000000","message":"yes，It should be called by initialize func in server node, I will add it.","commit_id":"0381ff59af99dbbf36ffef5d3c87de74231e0da8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class PortStatusNotifier(Portstatus):"},{"line_number":34,"context_line":"    # PortStatusNotifier implements port status update"},{"line_number":35,"context_line":"    # southbound notification mechanism based on redis"},{"line_number":36,"context_line":"    # pub/sub driver at present."}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_3a0d713e","line":33,"updated":"2016-09-13 07:06:06.000000000","message":"This class isn\u0027t redis-dependant. It can be made a general port-status-update driver.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class PortStatusNotifier(Portstatus):"},{"line_number":34,"context_line":"    # PortStatusNotifier implements port status update"},{"line_number":35,"context_line":"    # southbound notification mechanism based on redis"},{"line_number":36,"context_line":"    # pub/sub driver at present."}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_57e4cb3a","line":33,"in_reply_to":"9a89bdaa_3a0d713e","updated":"2016-09-13 09:11:28.000000000","message":"Here I should rename it to RedisPortStatusNotifier","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"379af1ad79e51a300c77075332976641760b2640","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class PortStatusNotifier(Portstatus):"},{"line_number":34,"context_line":"    # PortStatusNotifier implements port status update"},{"line_number":35,"context_line":"    # southbound notification mechanism based on redis"},{"line_number":36,"context_line":"    # pub/sub driver at present."}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_832e158a","line":33,"in_reply_to":"9a89bdaa_57e4cb3a","updated":"2016-09-13 09:22:28.000000000","message":"As you wish. I just don\u0027t understand what makes this driver redis-specific. Can\u0027t it be used with ZMQ? Won\u0027t it work?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1f09c8f4a3a4fe4b2fabd20631665f17a2a0b305","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class PortStatusNotifier(Portstatus):"},{"line_number":34,"context_line":"    # PortStatusNotifier implements port status update"},{"line_number":35,"context_line":"    # southbound notification mechanism based on redis"},{"line_number":36,"context_line":"    # pub/sub driver at present."}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_7e1a84c7","line":33,"in_reply_to":"9a89bdaa_832e158a","updated":"2016-09-13 09:48:56.000000000","message":"If you use ZMQ, you should create a new file named ZMQPortStatusNotifier, which also inherits PortStatus","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.status_callback \u003d None"},{"line_number":43,"context_line":"        self.db_table_monitors \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def initialize(self, mech_driver, nb_api, is_neutron_server\u003dFalse):"},{"line_number":46,"context_line":"        self.mech_driver \u003d mech_driver"},{"line_number":47,"context_line":"        self.is_neutron_server \u003d is_neutron_server"},{"line_number":48,"context_line":"        self.nb_api \u003d nb_api"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_1fffedaa","line":45,"updated":"2016-09-13 07:06:06.000000000","message":"Parameter mismatch: The method in the base class doesn\u0027t have any parameters. Please add them.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.status_callback \u003d None"},{"line_number":43,"context_line":"        self.db_table_monitors \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def initialize(self, mech_driver, nb_api, is_neutron_server\u003dFalse):"},{"line_number":46,"context_line":"        self.mech_driver \u003d mech_driver"},{"line_number":47,"context_line":"        self.is_neutron_server \u003d is_neutron_server"},{"line_number":48,"context_line":"        self.nb_api \u003d nb_api"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_ea6fb6c1","line":45,"in_reply_to":"9a89bdaa_1fffedaa","updated":"2016-09-13 09:11:28.000000000","message":"yes","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def initialize(self, mech_driver, nb_api, is_neutron_server\u003dFalse):"},{"line_number":46,"context_line":"        self.mech_driver \u003d mech_driver"},{"line_number":47,"context_line":"        self.is_neutron_server \u003d is_neutron_server"},{"line_number":48,"context_line":"        self.nb_api \u003d nb_api"},{"line_number":49,"context_line":"        if self.is_neutron_server:"},{"line_number":50,"context_line":"            # for pub/sub use case,code in server node,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_dfe2e500","line":47,"updated":"2016-09-13 07:06:06.000000000","message":"This property is only used in this method. Why is it part of the instance (i.e. why self.is_neutron_server. Why not just use is_neutron_server?)","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def initialize(self, mech_driver, nb_api, is_neutron_server\u003dFalse):"},{"line_number":46,"context_line":"        self.mech_driver \u003d mech_driver"},{"line_number":47,"context_line":"        self.is_neutron_server \u003d is_neutron_server"},{"line_number":48,"context_line":"        self.nb_api \u003d nb_api"},{"line_number":49,"context_line":"        if self.is_neutron_server:"},{"line_number":50,"context_line":"            # for pub/sub use case,code in server node,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_0acbfa53","line":47,"in_reply_to":"9a89bdaa_dfe2e500","updated":"2016-09-13 09:11:28.000000000","message":"yes, you are right","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self._send_port_status_event(\u0027lport\u0027, port_id, \u0027update\u0027, status)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # sever code"},{"line_number":71,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":72,"context_line":"        table_monitor \u003d PortStatusMonitor("},{"line_number":73,"context_line":"            table_name,"},{"line_number":74,"context_line":"            self.nb_api.driver,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_7fe28ba1","line":71,"updated":"2016-09-13 07:06:06.000000000","message":"This method returns a single monitor, but assigned to db_table_monitors which is treated as a list.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self._send_port_status_event(\u0027lport\u0027, port_id, \u0027update\u0027, status)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # sever code"},{"line_number":71,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":72,"context_line":"        table_monitor \u003d PortStatusMonitor("},{"line_number":73,"context_line":"            table_name,"},{"line_number":74,"context_line":"            self.nb_api.driver,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_8abc6a6d","line":71,"in_reply_to":"9a89bdaa_7fe28ba1","updated":"2016-09-13 09:11:28.000000000","message":"I will fix it","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # sever code"},{"line_number":71,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":72,"context_line":"        table_monitor \u003d PortStatusMonitor("},{"line_number":73,"context_line":"            table_name,"},{"line_number":74,"context_line":"            self.nb_api.driver,"},{"line_number":75,"context_line":"            self.nb_api.publisher,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_7a8d397b","line":72,"updated":"2016-09-13 07:06:06.000000000","message":"I think this might be better implemented with a LoopingCall (http://docs.openstack.org/developer/oslo.service/api/loopingcall.html#oslo_service.loopingcall.FixedIntervalLoopingCall ) - but it\u0027s up to you.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"379af1ad79e51a300c77075332976641760b2640","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # sever code"},{"line_number":71,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":72,"context_line":"        table_monitor \u003d PortStatusMonitor("},{"line_number":73,"context_line":"            table_name,"},{"line_number":74,"context_line":"            self.nb_api.driver,"},{"line_number":75,"context_line":"            self.nb_api.publisher,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_433fadb3","line":72,"in_reply_to":"9a89bdaa_2d3ff8b4","updated":"2016-09-13 09:22:28.000000000","message":"Up to you.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # sever code"},{"line_number":71,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":72,"context_line":"        table_monitor \u003d PortStatusMonitor("},{"line_number":73,"context_line":"            table_name,"},{"line_number":74,"context_line":"            self.nb_api.driver,"},{"line_number":75,"context_line":"            self.nb_api.publisher,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_2d3ff8b4","line":72,"in_reply_to":"9a89bdaa_7a8d397b","updated":"2016-09-13 09:11:28.000000000","message":"maybe a better choice, but I want to make it consistent with other df modules(table monitor).","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def port_status_callback(self, table, key, action, value, topic\u003dNone):"},{"line_number":92,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":93,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":94,"context_line":"            if \u0027up\u0027 \u003d\u003d value:"},{"line_number":95,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":96,"context_line":"            if \u0027down\u0027 \u003d\u003d value:"},{"line_number":97,"context_line":"                self.mech_driver.set_port_status_down(key)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_bfbc136d","line":94,"updated":"2016-09-13 07:06:06.000000000","message":"Maybe make \u0027up\u0027 and \u0027down\u0027 constants?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def port_status_callback(self, table, key, action, value, topic\u003dNone):"},{"line_number":92,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":93,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":94,"context_line":"            if \u0027up\u0027 \u003d\u003d value:"},{"line_number":95,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":96,"context_line":"            if \u0027down\u0027 \u003d\u003d value:"},{"line_number":97,"context_line":"                self.mech_driver.set_port_status_down(key)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_8d9ba4c8","line":94,"in_reply_to":"9a89bdaa_bfbc136d","updated":"2016-09-13 09:11:28.000000000","message":"OK","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    # local controller code"},{"line_number":101,"context_line":"    def _send_port_status_event(self, table, key, action, value):"},{"line_number":102,"context_line":"        topics \u003d self.nb_api.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":103,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":104,"context_line":"        update \u003d DbUpdate(table, key, action, value, topic\u003dtopic)"},{"line_number":105,"context_line":"        self.nb_api.publisher.send_event(update)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_1f3dffdc","line":102,"updated":"2016-09-13 07:06:06.000000000","message":"Please don\u0027t access nb_api driver directly. Write nb_api wrappers: create_portstats, get_all_portstats_keys, etc.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    # local controller code"},{"line_number":101,"context_line":"    def _send_port_status_event(self, table, key, action, value):"},{"line_number":102,"context_line":"        topics \u003d self.nb_api.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":103,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":104,"context_line":"        update \u003d DbUpdate(table, key, action, value, topic\u003dtopic)"},{"line_number":105,"context_line":"        self.nb_api.publisher.send_event(update)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_8dd00455","line":102,"in_reply_to":"9a89bdaa_1f3dffdc","updated":"2016-09-13 09:11:28.000000000","message":"OK","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def _poll_once(self, old_cache):"},{"line_number":141,"context_line":"        # update server port status timestamp in DB, leave"},{"line_number":142,"context_line":"        # timeout process to DB sync tool"},{"line_number":143,"context_line":"        self._driver.create_key(self.table_name, self._server_ip,"},{"line_number":144,"context_line":"                                time.time(), None)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_5a3f95b3","line":143,"updated":"2016-09-13 07:06:06.000000000","message":"Shouldn\u0027t this be update_key?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def _poll_once(self, old_cache):"},{"line_number":141,"context_line":"        # update server port status timestamp in DB, leave"},{"line_number":142,"context_line":"        # timeout process to DB sync tool"},{"line_number":143,"context_line":"        self._driver.create_key(self.table_name, self._server_ip,"},{"line_number":144,"context_line":"                                time.time(), None)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_6db82012","line":143,"in_reply_to":"9a89bdaa_5a3f95b3","updated":"2016-09-13 09:11:28.000000000","message":"yes you are right","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2f8d4f973ab0540b0d7a81c1530ac15f839cea26","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def _stop_db_table_monitor(self):"},{"line_number":82,"context_line":"        if not self.db_table_monitors:"},{"line_number":83,"context_line":"            return"},{"line_number":84,"context_line":"        self.db_table_monitorsmonitor.stop()"},{"line_number":85,"context_line":"        self.db_table_monitors \u003d None"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    # server code"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a8ec9b2_bfc72c44","line":84,"range":{"start_line":84,"start_character":13,"end_line":84,"end_character":37},"updated":"2016-09-14 11:23:05.000000000","message":"typo - db_table_monitors?\nAlso, maybe rename to singular if there is only one.","commit_id":"98cafee4e308d3bef837e2f901f73bad158bea71"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9431cba78062cb3c5b768e300f68d7f9faedbb9b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def port_status_callback(self, table, key, action, value, topic\u003dNone):"},{"line_number":89,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":90,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":91,"context_line":"            if \u0027up\u0027 \u003d\u003d value:"},{"line_number":92,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":93,"context_line":"            if \u0027down\u0027 \u003d\u003d value:"},{"line_number":94,"context_line":"                self.mech_driver.set_port_status_down(key)"}],"source_content_type":"text/x-python","patch_set":47,"id":"7a8ec9b2_aa8ac861","line":91,"updated":"2016-09-19 05:39:47.000000000","message":"\u0027up\u0027 and \u0027down\u0027 to constants - this wasn\u0027t done yet.","commit_id":"a3d2809c7a4e0d1b512d4f9dbde6050a155ac9b8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9431cba78062cb3c5b768e300f68d7f9faedbb9b","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    # local controller code"},{"line_number":98,"context_line":"    def _send_port_status_event(self, table, key, action, value):"},{"line_number":99,"context_line":"        topics \u003d self.nb_api.driver.get_all_entries(\u0027portstats\u0027)"},{"line_number":100,"context_line":"        topic \u003d random.choice(topics)"},{"line_number":101,"context_line":"        update \u003d DbUpdate(table, key, action, value, topic\u003dtopic)"},{"line_number":102,"context_line":"        self.nb_api.publisher.send_event(update)"}],"source_content_type":"text/x-python","patch_set":47,"id":"7a8ec9b2_caeb9411","line":99,"updated":"2016-09-19 05:39:47.000000000","message":"nb_api.driver direct access - this wasn\u0027t fixed yet.","commit_id":"a3d2809c7a4e0d1b512d4f9dbde6050a155ac9b8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9431cba78062cb3c5b768e300f68d7f9faedbb9b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def _poll_once(self, old_cache):"},{"line_number":138,"context_line":"        # update server port status timestamp in DB, leave"},{"line_number":139,"context_line":"        # timeout process to DB sync tool"},{"line_number":140,"context_line":"        self._driver.create_key(self.table_name, self._server_ip,"},{"line_number":141,"context_line":"                                time.time(), None)"}],"source_content_type":"text/x-python","patch_set":47,"id":"7a8ec9b2_0af2dc05","line":140,"updated":"2016-09-19 05:39:47.000000000","message":"create_key -\u003e update_key - this wasn\u0027t done yet","commit_id":"a3d2809c7a4e0d1b512d4f9dbde6050a155ac9b8"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"55b82d548502376a9491f6fe18f59be32e8ec197","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            # for pub/sub use case,code in server node,"},{"line_number":49,"context_line":"            # keeping topic alive default in use."},{"line_number":50,"context_line":"            self.start_subsciber()"},{"line_number":51,"context_line":"            self.server_status_monitors()"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            # for pub/sub design, local controller will send"},{"line_number":54,"context_line":"            # pub/sub event to notify server if there is a"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a8bc5a2_ef1fd705","line":51,"range":{"start_line":51,"start_character":17,"end_line":51,"end_character":39},"updated":"2016-09-26 07:34:08.000000000","message":"start_server_status_monitor may be a better name","commit_id":"39db9b390a2888821c5ae7fa14068b17ddbb3a30"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"55b82d548502376a9491f6fe18f59be32e8ec197","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    # server code"},{"line_number":88,"context_line":"    def port_status_callback(self, table, key, action, value, topic\u003dNone):"},{"line_number":89,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":90,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":91,"context_line":"            if constants.PORT_STATUS_UP \u003d\u003d value:"},{"line_number":92,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":93,"context_line":"            if constants.PORT_STATUS_DOWN \u003d\u003d value:"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a8bc5a2_afaeaf95","line":90,"range":{"start_line":90,"start_character":43,"end_line":90,"end_character":44},"updated":"2016-09-26 07:34:08.000000000","message":"print port status(up/down) and port id will be helpful for debugging","commit_id":"39db9b390a2888821c5ae7fa14068b17ddbb3a30"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"29d496bf2208f853bd5e07d746593d43a29a6794","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        port_id \u003d ovs_port.get_iface_id()"},{"line_number":70,"context_line":"        self._send_port_status_event(\u0027lport\u0027, port_id, \u0027update\u0027, status)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # sever code"},{"line_number":73,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":74,"context_line":"        table_monitor \u003d PortStatusMonitor("},{"line_number":75,"context_line":"            table_name,"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_e23dfbc4","line":72,"range":{"start_line":72,"start_character":6,"end_line":72,"end_character":11},"updated":"2016-10-09 02:49:19.000000000","message":"server?","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"9c6f59d9ee6998eb7d1173818b7b6cc80563eb54","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        port_id \u003d ovs_port.get_iface_id()"},{"line_number":70,"context_line":"        self._send_port_status_event(\u0027lport\u0027, port_id, \u0027update\u0027, status)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # sever code"},{"line_number":73,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":74,"context_line":"        table_monitor \u003d PortStatusMonitor("},{"line_number":75,"context_line":"            table_name,"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_82a7d7bb","line":72,"range":{"start_line":72,"start_character":6,"end_line":72,"end_character":11},"in_reply_to":"1a95cdbc_e23dfbc4","updated":"2016-10-09 03:21:50.000000000","message":"Done","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"29d496bf2208f853bd5e07d746593d43a29a6794","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":97,"context_line":"            if constants.PORT_STATUS_DOWN \u003d\u003d value:"},{"line_number":98,"context_line":"                self.mech_driver.set_port_status_down(key)"},{"line_number":99,"context_line":"            eventlet.sleep(0)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    # local controller code"},{"line_number":102,"context_line":"    def _send_port_status_event(self, table, key, action, value):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_e2997bc5","line":99,"range":{"start_line":99,"start_character":12,"end_line":99,"end_character":29},"updated":"2016-10-09 02:49:19.000000000","message":"does it make sense?","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"9c6f59d9ee6998eb7d1173818b7b6cc80563eb54","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":97,"context_line":"            if constants.PORT_STATUS_DOWN \u003d\u003d value:"},{"line_number":98,"context_line":"                self.mech_driver.set_port_status_down(key)"},{"line_number":99,"context_line":"            eventlet.sleep(0)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    # local controller code"},{"line_number":102,"context_line":"    def _send_port_status_event(self, table, key, action, value):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_22c8c373","line":99,"range":{"start_line":99,"start_character":12,"end_line":99,"end_character":29},"in_reply_to":"1a95cdbc_e2997bc5","updated":"2016-10-09 03:21:50.000000000","message":"Done","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"29d496bf2208f853bd5e07d746593d43a29a6794","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        topic \u003d self.nb_api.get_all_port_status_keys()"},{"line_number":104,"context_line":"        update \u003d DbUpdate(table, key, action, value, topic\u003dtopic)"},{"line_number":105,"context_line":"        self.nb_api.publisher.send_event(update)"},{"line_number":106,"context_line":"        eventlet.sleep(0)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # server  code"},{"line_number":109,"context_line":"    def start_subsciber(self):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_a2a4d307","line":106,"range":{"start_line":106,"start_character":8,"end_line":106,"end_character":25},"updated":"2016-10-09 02:49:19.000000000","message":"does it make sense?","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"9c6f59d9ee6998eb7d1173818b7b6cc80563eb54","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        topic \u003d self.nb_api.get_all_port_status_keys()"},{"line_number":104,"context_line":"        update \u003d DbUpdate(table, key, action, value, topic\u003dtopic)"},{"line_number":105,"context_line":"        self.nb_api.publisher.send_event(update)"},{"line_number":106,"context_line":"        eventlet.sleep(0)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # server  code"},{"line_number":109,"context_line":"    def start_subsciber(self):"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_42c30f57","line":106,"range":{"start_line":106,"start_character":8,"end_line":106,"end_character":25},"in_reply_to":"1a95cdbc_a2a4d307","updated":"2016-10-09 03:21:50.000000000","message":"Done","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"29d496bf2208f853bd5e07d746593d43a29a6794","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.nb_api.publisher.send_event(update)"},{"line_number":106,"context_line":"        eventlet.sleep(0)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # server  code"},{"line_number":109,"context_line":"    def start_subsciber(self):"},{"line_number":110,"context_line":"        self.pub_sub.initialize(self.port_status_callback)"},{"line_number":111,"context_line":"        server_ip \u003d cfg.CONF.df.local_ip"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_e2b25b4b","line":108,"range":{"start_line":108,"start_character":6,"end_line":108,"end_character":18},"updated":"2016-10-09 02:49:19.000000000","message":"server code","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"9c6f59d9ee6998eb7d1173818b7b6cc80563eb54","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.nb_api.publisher.send_event(update)"},{"line_number":106,"context_line":"        eventlet.sleep(0)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # server  code"},{"line_number":109,"context_line":"    def start_subsciber(self):"},{"line_number":110,"context_line":"        self.pub_sub.initialize(self.port_status_callback)"},{"line_number":111,"context_line":"        server_ip \u003d cfg.CONF.df.local_ip"}],"source_content_type":"text/x-python","patch_set":66,"id":"1a95cdbc_62a48bb9","line":108,"range":{"start_line":108,"start_character":6,"end_line":108,"end_character":18},"in_reply_to":"1a95cdbc_e2b25b4b","updated":"2016-10-09 03:21:50.000000000","message":"Done","commit_id":"ed11a3db33d83e677b02f9840686ed1b3c7273e2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f43e410ef93dc224278c20afcb90523a891b256a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from dragonflow._i18n import _LI"},{"line_number":23,"context_line":"from dragonflow.common import constants"},{"line_number":24,"context_line":"from dragonflow.db.db_common import DbUpdate"},{"line_number":25,"context_line":"from dragonflow.db.port_status_api import PortStatusDriver"},{"line_number":26,"context_line":"from dragonflow.db.pub_sub_api import TableMonitor"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_963d5591","line":25,"updated":"2016-10-09 12:02:53.000000000","message":"Please do not import objects, only modules.","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b04acdfc5794c5b36d3d575b326b2bc960421c27","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from dragonflow._i18n import _LI"},{"line_number":23,"context_line":"from dragonflow.common import constants"},{"line_number":24,"context_line":"from dragonflow.db.db_common import DbUpdate"},{"line_number":25,"context_line":"from dragonflow.db.port_status_api import PortStatusDriver"},{"line_number":26,"context_line":"from dragonflow.db.pub_sub_api import TableMonitor"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_b698916b","line":25,"in_reply_to":"1a95cdbc_963d5591","updated":"2016-10-09 12:32:20.000000000","message":"Done","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f43e410ef93dc224278c20afcb90523a891b256a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def start_subsciber(self):"},{"line_number":107,"context_line":"        self.pub_sub.initialize(self.port_status_callback)"},{"line_number":108,"context_line":"        server_ip \u003d cfg.CONF.df.local_ip"},{"line_number":109,"context_line":"        self.nb_api.subscriber.register_topic(server_ip)"},{"line_number":110,"context_line":"        # In portstats table, there are key value pairs like this:"},{"line_number":111,"context_line":"        # port_status_192.168.1.10 : 192.168.1.10"},{"line_number":112,"context_line":"        self.nb_api.create_port_status(server_ip)"}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_b6b33109","line":109,"updated":"2016-10-09 12:02:53.000000000","message":"Please unify - all subscriber calls should go through self.pub_sub.","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b04acdfc5794c5b36d3d575b326b2bc960421c27","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def start_subsciber(self):"},{"line_number":107,"context_line":"        self.pub_sub.initialize(self.port_status_callback)"},{"line_number":108,"context_line":"        server_ip \u003d cfg.CONF.df.local_ip"},{"line_number":109,"context_line":"        self.nb_api.subscriber.register_topic(server_ip)"},{"line_number":110,"context_line":"        # In portstats table, there are key value pairs like this:"},{"line_number":111,"context_line":"        # port_status_192.168.1.10 : 192.168.1.10"},{"line_number":112,"context_line":"        self.nb_api.create_port_status(server_ip)"}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_96955534","line":109,"in_reply_to":"1a95cdbc_b6b33109","updated":"2016-10-09 12:32:20.000000000","message":"Done","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f43e410ef93dc224278c20afcb90523a891b256a","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.nb_api.subscriber.daemonize()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def start_publisher(self):"},{"line_number":116,"context_line":"        self.nb_api.publisher.initialize()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class PortStatusMonitor(TableMonitor):"}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_f698597a","line":116,"updated":"2016-10-09 12:02:53.000000000","message":"Maybe allow to pass the publiser externally as well? i.e. not via nb_api?","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b04acdfc5794c5b36d3d575b326b2bc960421c27","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.nb_api.subscriber.daemonize()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def start_publisher(self):"},{"line_number":116,"context_line":"        self.nb_api.publisher.initialize()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class PortStatusMonitor(TableMonitor):"}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_7692894d","line":116,"in_reply_to":"1a95cdbc_f698597a","updated":"2016-10-09 12:32:20.000000000","message":"Done","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0c4c4fa47c8c2b7f3b2bc883baefc7c0333a7dcc","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from dragonflow._i18n import _LI"},{"line_number":23,"context_line":"from dragonflow.common import constants"},{"line_number":24,"context_line":"from dragonflow.db import port_status_api"},{"line_number":25,"context_line":"from dragonflow.db.db_common import DbUpdate"},{"line_number":26,"context_line":"from dragonflow.db.port_status_api import PortStatusDriver"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_3b0aa58a","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":58},"updated":"2016-10-10 01:39:01.000000000","message":"Pls change the import in this way: http://docs.openstack.org/developer/hacking/#imports","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e20447f99d88e7278bcfcf09fb0a55973525e425","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from dragonflow._i18n import _LI"},{"line_number":23,"context_line":"from dragonflow.common import constants"},{"line_number":24,"context_line":"from dragonflow.db import port_status_api"},{"line_number":25,"context_line":"from dragonflow.db.db_common import DbUpdate"},{"line_number":26,"context_line":"from dragonflow.db.port_status_api import PortStatusDriver"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_09ecc328","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":58},"in_reply_to":"1a95cdbc_3b0aa58a","updated":"2016-10-10 03:12:35.000000000","message":"Done","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0c4c4fa47c8c2b7f3b2bc883baefc7c0333a7dcc","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    # server code"},{"line_number":93,"context_line":"    def port_status_callback(self, table, key, action, value, topic\u003dNone):"},{"line_number":94,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":95,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":96,"context_line":"            if constants.PORT_STATUS_UP \u003d\u003d value:"},{"line_number":97,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":98,"context_line":"            if constants.PORT_STATUS_DOWN \u003d\u003d value:"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_fb703d42","line":95,"range":{"start_line":95,"start_character":12,"end_line":95,"end_character":47},"updated":"2016-10-10 01:39:01.000000000","message":"It would be better to add the port id in the log.","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e20447f99d88e7278bcfcf09fb0a55973525e425","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    # server code"},{"line_number":93,"context_line":"    def port_status_callback(self, table, key, action, value, topic\u003dNone):"},{"line_number":94,"context_line":"        if \u0027lport\u0027 \u003d\u003d table and \u0027update\u0027 \u003d\u003d action:"},{"line_number":95,"context_line":"            LOG.info(_LI(\"Port status update\"))"},{"line_number":96,"context_line":"            if constants.PORT_STATUS_UP \u003d\u003d value:"},{"line_number":97,"context_line":"                self.mech_driver.set_port_status_up(key)"},{"line_number":98,"context_line":"            if constants.PORT_STATUS_DOWN \u003d\u003d value:"}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_29efbf1e","line":95,"range":{"start_line":95,"start_character":12,"end_line":95,"end_character":47},"in_reply_to":"1a95cdbc_fb703d42","updated":"2016-10-10 03:12:35.000000000","message":"Done","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0c4c4fa47c8c2b7f3b2bc883baefc7c0333a7dcc","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.pub.initialize()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class PortStatusMonitor(TableMonitor):"},{"line_number":122,"context_line":"    def __init__(self, table_name, driver, publisher\u003dNone,"},{"line_number":123,"context_line":"                 timeout\u003d1, polling_time\u003d10, local_ip\u003d\u0027127.0.0.1\u0027):"},{"line_number":124,"context_line":"        super(PortStatusMonitor, self).__init__("}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_5bfdb16c","line":121,"range":{"start_line":121,"start_character":24,"end_line":121,"end_character":36},"updated":"2016-10-10 01:39:01.000000000","message":"pub_sub_api.TableMonitor?","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e20447f99d88e7278bcfcf09fb0a55973525e425","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.pub.initialize()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class PortStatusMonitor(TableMonitor):"},{"line_number":122,"context_line":"    def __init__(self, table_name, driver, publisher\u003dNone,"},{"line_number":123,"context_line":"                 timeout\u003d1, polling_time\u003d10, local_ip\u003d\u0027127.0.0.1\u0027):"},{"line_number":124,"context_line":"        super(PortStatusMonitor, self).__init__("}],"source_content_type":"text/x-python","patch_set":69,"id":"1a95cdbc_49f24b07","line":121,"range":{"start_line":121,"start_character":24,"end_line":121,"end_character":36},"in_reply_to":"1a95cdbc_5bfdb16c","updated":"2016-10-10 03:12:35.000000000","message":"Done","commit_id":"1a3584aee3ac62373d31234926dbc44127e1f702"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"12a22171848baec389b26c9766080ed0084023d9","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # local controller code"},{"line_number":103,"context_line":"    def _send_port_status_event(self, table, key, action, value):"},{"line_number":104,"context_line":"        topic \u003d self.nb_api.get_all_port_status_keys()"},{"line_number":105,"context_line":"        update \u003d db_common.DbUpdate(table, key, action, value, topic\u003dtopic)"},{"line_number":106,"context_line":"        self.pub.send_event(update)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"1a95cdbc_a1004367","line":104,"updated":"2016-10-10 08:28:37.000000000","message":"For me this is unclear. When VM goes up/down why u can not use topic associated with it\u0027s port ?\n\n    def get_all_port_status_keys(self):\n        topics \u003d self.driver.get_all_entries(\u0027portstats\u0027)\n        topic \u003d random.choice(topics)\n        return topic\n\nThanks,\nYuli","commit_id":"f9b370a25a505fc50456475fb6a0ad4ca49f4d4d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"6d38d34313ce3071db3d324eae8dc721dc3b256f","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # local controller code"},{"line_number":103,"context_line":"    def _send_port_status_event(self, table, key, action, value):"},{"line_number":104,"context_line":"        topic \u003d self.nb_api.get_all_port_status_keys()"},{"line_number":105,"context_line":"        update \u003d db_common.DbUpdate(table, key, action, value, topic\u003dtopic)"},{"line_number":106,"context_line":"        self.pub.send_event(update)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"1a95cdbc_17185574","line":104,"in_reply_to":"1a95cdbc_a1004367","updated":"2016-10-10 09:02:58.000000000","message":"The reason why we don\u0027t use topic of port is we want all neutron server to process status event respectively and simultaneously. Therefore we use new topic associated with neutron server, and the server just subscribes its own topic, so each compute node just selects one topic randomly to publish event. In other words, this is a kind of load-balance.","commit_id":"f9b370a25a505fc50456475fb6a0ad4ca49f4d4d"}],"dragonflow/neutron/ml2/mech_driver.py":[{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"caa366983a1fdf70716d7d2212c07fb0c8909880","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        # Port provisioning is complete now that DF controller has reported"},{"line_number":623,"context_line":"        # that the port is up."},{"line_number":624,"context_line":"        LOG.debug(\"DF reports status up for port: %s\", port_id)"},{"line_number":625,"context_line":"        provisioning_blocks.provisioning_complete("},{"line_number":626,"context_line":"            n_context.get_admin_context(),"},{"line_number":627,"context_line":"            port_id,"},{"line_number":628,"context_line":"            resources.PORT,"},{"line_number":629,"context_line":"            provisioning_blocks.L2_AGENT_ENTITY)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_c1ad699c","line":626,"range":{"start_line":625,"start_character":6,"end_line":626,"end_character":42},"updated":"2016-07-07 07:14:03.000000000","message":"Is this unique in mitaka?","commit_id":"9f15523cb3eb7c9e9870d96d6277625a3089759e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1d5f8f7a498cfa210929604dfe5bead5433afda5","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        # Port provisioning is complete now that DF controller has reported"},{"line_number":623,"context_line":"        # that the port is up."},{"line_number":624,"context_line":"        LOG.debug(\"DF reports status up for port: %s\", port_id)"},{"line_number":625,"context_line":"        provisioning_blocks.provisioning_complete("},{"line_number":626,"context_line":"            n_context.get_admin_context(),"},{"line_number":627,"context_line":"            port_id,"},{"line_number":628,"context_line":"            resources.PORT,"},{"line_number":629,"context_line":"            provisioning_blocks.L2_AGENT_ENTITY)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_482eb9fb","line":626,"range":{"start_line":625,"start_character":6,"end_line":626,"end_character":42},"in_reply_to":"1aa78d24_c1ad699c","updated":"2016-07-07 07:58:25.000000000","message":"I will consider to modify it if we must support openstack version below mitaka","commit_id":"9f15523cb3eb7c9e9870d96d6277625a3089759e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"caa366983a1fdf70716d7d2212c07fb0c8909880","unresolved":false,"context_lines":[{"line_number":630,"context_line":""},{"line_number":631,"context_line":"    def set_port_status_down(self, port_id):"},{"line_number":632,"context_line":"        LOG.debug(\"DF reports status down for port: %s\", port_id)"},{"line_number":633,"context_line":"        self._plugin.update_port_status(n_context.get_admin_context(),"},{"line_number":634,"context_line":"                                        port_id,"},{"line_number":635,"context_line":"                                        n_const.PORT_STATUS_DOWN)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_81bc01bc","line":633,"range":{"start_line":633,"start_character":7,"end_line":633,"end_character":70},"updated":"2016-07-07 07:14:03.000000000","message":"The port up/down event is published by local controller.\nThen if this invokes the update_port_status call of the plugin, the event will be send back to those controllers that subscribe related topic.","commit_id":"9f15523cb3eb7c9e9870d96d6277625a3089759e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1d5f8f7a498cfa210929604dfe5bead5433afda5","unresolved":false,"context_lines":[{"line_number":630,"context_line":""},{"line_number":631,"context_line":"    def set_port_status_down(self, port_id):"},{"line_number":632,"context_line":"        LOG.debug(\"DF reports status down for port: %s\", port_id)"},{"line_number":633,"context_line":"        self._plugin.update_port_status(n_context.get_admin_context(),"},{"line_number":634,"context_line":"                                        port_id,"},{"line_number":635,"context_line":"                                        n_const.PORT_STATUS_DOWN)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_8859c190","line":633,"range":{"start_line":633,"start_character":7,"end_line":633,"end_character":70},"in_reply_to":"1aa78d24_81bc01bc","updated":"2016-07-07 07:58:25.000000000","message":"There is judgement in update_port_postcommit, you can look at it.","commit_id":"9f15523cb3eb7c9e9870d96d6277625a3089759e"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"dd4b92982f404b21ce58ed757451190e938ad6ce","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.callbacks import registry"},{"line_number":21,"context_line":"from neutron.callbacks import resources"},{"line_number":22,"context_line":"from neutron import context as n_context"},{"line_number":23,"context_line":"from neutron.db import provisioning_blocks"},{"line_number":24,"context_line":"from neutron.extensions import allowedaddresspairs as addr_pair"},{"line_number":25,"context_line":"from neutron.extensions import portbindings"},{"line_number":26,"context_line":"from neutron.extensions import portsecurity as psec"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_60f54eca","line":23,"range":{"start_line":23,"start_character":5,"end_line":23,"end_character":12},"updated":"2016-07-08 07:48:37.000000000","message":"Please import in alphabetic order.","commit_id":"e47087beb2f34c8fd11a1e6529714bcb36a008fe"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"dd4b92982f404b21ce58ed757451190e938ad6ce","unresolved":false,"context_lines":[{"line_number":438,"context_line":"    def _insert_port_provisioning_block(self, port):"},{"line_number":439,"context_line":"        vnic_type \u003d port.get(portbindings.VNIC_TYPE, portbindings.VNIC_NORMAL)"},{"line_number":440,"context_line":"        if vnic_type not in self.supported_vnic_types:"},{"line_number":441,"context_line":"            LOG.debug(\"No provisioning block due to unsupported vnic_type: %s\","},{"line_number":442,"context_line":"                      vnic_type)"},{"line_number":443,"context_line":"            return"},{"line_number":444,"context_line":"        # Insert a provisioning block to prevent the port from"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_60e38e06","line":441,"range":{"start_line":441,"start_character":16,"end_line":441,"end_character":21},"updated":"2016-07-08 07:48:37.000000000","message":"warning or error?","commit_id":"e47087beb2f34c8fd11a1e6529714bcb36a008fe"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"bf7b9cd261393dfeb1e2d91d971be3935250ebf3","unresolved":false,"context_lines":[{"line_number":515,"context_line":"        updated_port \u003d context.current"},{"line_number":516,"context_line":"        # Here we don not want port status update to trigger"},{"line_number":517,"context_line":"        # sending event to other compute node."},{"line_number":518,"context_line":"        if (updated_port[\u0027device_owner\u0027] \u003d\u003d \u0027compute:None\u0027"},{"line_number":519,"context_line":"                and context.status \u003d\u003d n_const.PORT_STATUS_ACTIVE"},{"line_number":520,"context_line":"                and context.original_status \u003d\u003d n_const.PORT_STATUS_DOWN):"},{"line_number":521,"context_line":"            return None"},{"line_number":522,"context_line":"        # If a subnet enabled dhcp, the DFMechDriver will create a dhcp server"},{"line_number":523,"context_line":"        # port. When delete this subnet, the port should be deleted."},{"line_number":524,"context_line":"        # In ml2/plugin.py, when delete subnet, it will call"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_5dc6394a","line":521,"range":{"start_line":518,"start_character":4,"end_line":521,"end_character":23},"updated":"2016-07-08 06:33:44.000000000","message":"if original_status\u003dActive and status\u003dDwon, will these events will be sent back to computer node?","commit_id":"e47087beb2f34c8fd11a1e6529714bcb36a008fe"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d863d156e5aa397c92b53eaf660b755d09f84d20","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.callbacks import registry"},{"line_number":21,"context_line":"from neutron.callbacks import resources"},{"line_number":22,"context_line":"from neutron import context as n_context"},{"line_number":23,"context_line":"from neutron.db import provisioning_blocks"},{"line_number":24,"context_line":"from neutron.extensions import allowedaddresspairs as addr_pair"},{"line_number":25,"context_line":"from neutron.extensions import portbindings"},{"line_number":26,"context_line":"from neutron.extensions import portsecurity as psec"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_ceb7c1f3","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":42},"updated":"2016-07-19 11:44:14.000000000","message":"I didn\u0027t find this in Mitaka. pls refer to\nhttps://github.com/openstack/neutron/tree/stable/mitaka/neutron/db","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"0064d759abf15ce44ac71bc8879ce50c123d6f56","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.callbacks import registry"},{"line_number":21,"context_line":"from neutron.callbacks import resources"},{"line_number":22,"context_line":"from neutron import context as n_context"},{"line_number":23,"context_line":"from neutron.db import provisioning_blocks"},{"line_number":24,"context_line":"from neutron.extensions import allowedaddresspairs as addr_pair"},{"line_number":25,"context_line":"from neutron.extensions import portbindings"},{"line_number":26,"context_line":"from neutron.extensions import portsecurity as psec"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_0ebd2702","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":42},"in_reply_to":"dada55a8_ceb7c1f3","updated":"2016-07-20 08:35:52.000000000","message":"Yes, I have changed it.","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d863d156e5aa397c92b53eaf660b755d09f84d20","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)"},{"line_number":522,"context_line":"    def update_port_postcommit(self, context):"},{"line_number":523,"context_line":"        updated_port \u003d context.current"},{"line_number":524,"context_line":"        # Here we don not want port status update to trigger"},{"line_number":525,"context_line":"        # sending event to other compute node."},{"line_number":526,"context_line":"        if (updated_port[\u0027device_owner\u0027] \u003d\u003d \u0027compute:None\u0027"},{"line_number":527,"context_line":"                and context.status \u003d\u003d n_const.PORT_STATUS_ACTIVE"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_2ea49da4","line":524,"range":{"start_line":524,"start_character":17,"end_line":524,"end_character":26},"updated":"2016-07-19 11:44:14.000000000","message":"typo","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"0064d759abf15ce44ac71bc8879ce50c123d6f56","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)"},{"line_number":522,"context_line":"    def update_port_postcommit(self, context):"},{"line_number":523,"context_line":"        updated_port \u003d context.current"},{"line_number":524,"context_line":"        # Here we don not want port status update to trigger"},{"line_number":525,"context_line":"        # sending event to other compute node."},{"line_number":526,"context_line":"        if (updated_port[\u0027device_owner\u0027] \u003d\u003d \u0027compute:None\u0027"},{"line_number":527,"context_line":"                and context.status \u003d\u003d n_const.PORT_STATUS_ACTIVE"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_8e0d97ea","line":524,"range":{"start_line":524,"start_character":17,"end_line":524,"end_character":26},"in_reply_to":"dada55a8_2ea49da4","updated":"2016-07-20 08:35:52.000000000","message":"Done","commit_id":"b8b0d9df2462fcf0d55aa47f7a2722b4e5508658"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"99033f7d3bbaa91407c6823944f7e1fb57d7dc67","unresolved":false,"context_lines":[{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def update_port_precommit(self, context):"},{"line_number":491,"context_line":"        updated_port \u003d context.current"},{"line_number":492,"context_line":"        if (\u0027compute:\u0027 in updated_port[\u0027device_owner\u0027]"},{"line_number":493,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":494,"context_line":"            return None"},{"line_number":495,"context_line":"        port_version \u003d version_db._update_db_version_row("}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_5d0fdf87","line":492,"range":{"start_line":492,"start_character":12,"end_line":492,"end_character":22},"updated":"2016-08-17 02:49:38.000000000","message":"You could consider using DEVICE_OWNER_COMPUTE_PREFIX here.\n\n[1] https://github.com/openstack/neutron-lib/blob/7626b4073b5d831b8cba8e3cd9abd16565bf0e4c/neutron_lib/constants.py#L43","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"71cdc73e43afdbc20f71c9ca5b7ec5688cabeebb","unresolved":false,"context_lines":[{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def update_port_precommit(self, context):"},{"line_number":491,"context_line":"        updated_port \u003d context.current"},{"line_number":492,"context_line":"        if (\u0027compute:\u0027 in updated_port[\u0027device_owner\u0027]"},{"line_number":493,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":494,"context_line":"            return None"},{"line_number":495,"context_line":"        port_version \u003d version_db._update_db_version_row("}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_69cdbdb6","line":492,"range":{"start_line":492,"start_character":12,"end_line":492,"end_character":22},"in_reply_to":"3ac371cc_5d0fdf87","updated":"2016-08-17 03:36:37.000000000","message":"yes","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"99033f7d3bbaa91407c6823944f7e1fb57d7dc67","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        updated_port \u003d context.current"},{"line_number":492,"context_line":"        if (\u0027compute:\u0027 in updated_port[\u0027device_owner\u0027]"},{"line_number":493,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":494,"context_line":"            return None"},{"line_number":495,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":496,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"},{"line_number":497,"context_line":"        context.current[\u0027db_version\u0027] \u003d port_version"}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_7d81fbc2","line":494,"range":{"start_line":494,"start_character":12,"end_line":494,"end_character":23},"updated":"2016-08-17 02:49:38.000000000","message":"Just return here has the same effect of \"return None\"","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"71cdc73e43afdbc20f71c9ca5b7ec5688cabeebb","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        updated_port \u003d context.current"},{"line_number":492,"context_line":"        if (\u0027compute:\u0027 in updated_port[\u0027device_owner\u0027]"},{"line_number":493,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":494,"context_line":"            return None"},{"line_number":495,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":496,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"},{"line_number":497,"context_line":"        context.current[\u0027db_version\u0027] \u003d port_version"}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_a94a1524","line":494,"range":{"start_line":494,"start_character":12,"end_line":494,"end_character":23},"in_reply_to":"3ac371cc_7d81fbc2","updated":"2016-08-17 03:36:37.000000000","message":"yes","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"99033f7d3bbaa91407c6823944f7e1fb57d7dc67","unresolved":false,"context_lines":[{"line_number":607,"context_line":"    def set_port_status_up(self, port_id):"},{"line_number":608,"context_line":"        LOG.debug(\"DF reports status up for port: %s\", port_id)"},{"line_number":609,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":610,"context_line":"        core_plugin.update_port_status(n_context.get_admin_context(),"},{"line_number":611,"context_line":"                                       port_id,"},{"line_number":612,"context_line":"                                       n_const.PORT_STATUS_ACTIVE)"},{"line_number":613,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"3ac371cc_c86aefb2","line":610,"updated":"2016-08-17 02:49:38.000000000","message":"Instead of setting the port status directly, neutron now uses the provision_block to update the port status[1]. Is it possible to use provision_block here too? I think you can take the networking-ovn code as example[2].\n\n[1] https://github.com/openstack/neutron/blob/e3ca57875fbd167d7ad8f2a79764524812c0453c/neutron/plugins/ml2/plugin.py#L203\n\n[2] https://github.com/openstack/networking-ovn/blob/4a4a4a759905070c19f8b9b9de9c74f00e580e8e/networking_ovn/ml2/mech_driver.py#L972","commit_id":"ccf59903f3fd3988c575ec63b7bcccd526c34411"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            return False"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def update_port_precommit(self, context):"},{"line_number":530,"context_line":"        updated_port \u003d context.current"},{"line_number":531,"context_line":"        if (n_const.DEVICE_OWNER_COMPUTE_PREFIX in updated_port[\u0027device_owner\u0027]"},{"line_number":532,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":533,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_5a93155b","line":530,"updated":"2016-09-13 07:06:06.000000000","message":"Please reuse updated_port variable in the rest of this method instead of context.current.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            return False"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def update_port_precommit(self, context):"},{"line_number":530,"context_line":"        updated_port \u003d context.current"},{"line_number":531,"context_line":"        if (n_const.DEVICE_OWNER_COMPUTE_PREFIX in updated_port[\u0027device_owner\u0027]"},{"line_number":532,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":533,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_4d743cfd","line":530,"in_reply_to":"9a89bdaa_5a93155b","updated":"2016-09-13 09:11:28.000000000","message":"ok","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    def update_port_precommit(self, context):"},{"line_number":530,"context_line":"        updated_port \u003d context.current"},{"line_number":531,"context_line":"        if (n_const.DEVICE_OWNER_COMPUTE_PREFIX in updated_port[\u0027device_owner\u0027]"},{"line_number":532,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":533,"context_line":"            return None"},{"line_number":534,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":535,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_9a991d7c","line":532,"updated":"2016-09-13 07:06:06.000000000","message":"What if another field was modified with the status?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"379af1ad79e51a300c77075332976641760b2640","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    def update_port_precommit(self, context):"},{"line_number":530,"context_line":"        updated_port \u003d context.current"},{"line_number":531,"context_line":"        if (n_const.DEVICE_OWNER_COMPUTE_PREFIX in updated_port[\u0027device_owner\u0027]"},{"line_number":532,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":533,"context_line":"            return None"},{"line_number":534,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":535,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_43db2d7c","line":532,"in_reply_to":"9a89bdaa_2d7538ca","updated":"2016-09-13 09:22:28.000000000","message":"Is it possible that a port is updated, and that both the status and another field is modified (e.g. mac address, IP, name, port_security)? If that happens, the version will not update, even though the port was modified. Can this happen?\n\nAny way, this problem will be circumvented when we move over to use revision plugin on ports...","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1f09c8f4a3a4fe4b2fabd20631665f17a2a0b305","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    def update_port_precommit(self, context):"},{"line_number":530,"context_line":"        updated_port \u003d context.current"},{"line_number":531,"context_line":"        if (n_const.DEVICE_OWNER_COMPUTE_PREFIX in updated_port[\u0027device_owner\u0027]"},{"line_number":532,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":533,"context_line":"            return None"},{"line_number":534,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":535,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_79eb7edc","line":532,"in_reply_to":"9a89bdaa_43db2d7c","updated":"2016-09-13 09:48:56.000000000","message":"The port status can only update from southbound, so I think it will not happen for update_port for both status and mac address,IP,etc at the same time.","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    def update_port_precommit(self, context):"},{"line_number":530,"context_line":"        updated_port \u003d context.current"},{"line_number":531,"context_line":"        if (n_const.DEVICE_OWNER_COMPUTE_PREFIX in updated_port[\u0027device_owner\u0027]"},{"line_number":532,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":533,"context_line":"            return None"},{"line_number":534,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":535,"context_line":"            context._plugin_context.session, context.current[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_2d7538ca","line":532,"in_reply_to":"9a89bdaa_9a991d7c","updated":"2016-09-13 09:11:28.000000000","message":"I don\u0027t understand you here very well?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9431cba78062cb3c5b768e300f68d7f9faedbb9b","unresolved":false,"context_lines":[{"line_number":557,"context_line":"    def update_port_precommit(self, context):"},{"line_number":558,"context_line":"        updated_port \u003d context.current"},{"line_number":559,"context_line":"        if (n_const.DEVICE_OWNER_COMPUTE_PREFIX in updated_port[\u0027device_owner\u0027]"},{"line_number":560,"context_line":"                and context.status !\u003d context.original_status):"},{"line_number":561,"context_line":"            return None"},{"line_number":562,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":563,"context_line":"            context._plugin_context.session, updated_port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":47,"id":"7a8ec9b2_6adb607c","line":560,"updated":"2016-09-19 05:39:47.000000000","message":"After the discussion in patchset 36, this is good the way it is.","commit_id":"a3d2809c7a4e0d1b512d4f9dbde6050a155ac9b8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"975e6d05697a8ef16e8630885def4771e5f674e5","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            port_status_notifier \u003d df_utils.load_driver("},{"line_number":70,"context_line":"                cfg.CONF.df.port_status_notifier,"},{"line_number":71,"context_line":"                df_utils.DF_PORT_STATUS_DRIVER_NAMESPACE)"},{"line_number":72,"context_line":"            port_status_notifier.initialize(self, self.nb_api,"},{"line_number":73,"context_line":"                                            is_neutron_server\u003dTrue)"},{"line_number":74,"context_line":"            self.port_status \u003d None"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"5a8bc5a2_4780c2c0","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":33},"updated":"2016-09-25 08:29:10.000000000","message":"I think port_status_notifier should still be a member of mech_driver (be self.port_status_notifier). Otherwise it may be garbage collected and stop working.","commit_id":"626a226ae41385cc216812fb0fadb3e3c0222dca"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"67172d72a621af59d53205567aac0c3372e62c9b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            port_status_notifier \u003d df_utils.load_driver("},{"line_number":70,"context_line":"                cfg.CONF.df.port_status_notifier,"},{"line_number":71,"context_line":"                df_utils.DF_PORT_STATUS_DRIVER_NAMESPACE)"},{"line_number":72,"context_line":"            port_status_notifier.initialize(self, self.nb_api,"},{"line_number":73,"context_line":"                                            is_neutron_server\u003dTrue)"},{"line_number":74,"context_line":"            self.port_status \u003d None"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"5a8bc5a2_25b56930","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":33},"in_reply_to":"5a8bc5a2_4780c2c0","updated":"2016-09-26 01:34:23.000000000","message":"Done","commit_id":"626a226ae41385cc216812fb0fadb3e3c0222dca"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"55b82d548502376a9491f6fe18f59be32e8ec197","unresolved":false,"context_lines":[{"line_number":567,"context_line":"            context.status !\u003d context.original_status and"},{"line_number":568,"context_line":"            (context.status \u003d\u003d n_const.PORT_STATUS_DOWN or"},{"line_number":569,"context_line":"            context.status \u003d\u003d n_const.PORT_STATUS_ACTIVE)):"},{"line_number":570,"context_line":"            return None"},{"line_number":571,"context_line":"        port_version \u003d version_db._update_db_version_row("},{"line_number":572,"context_line":"            context._plugin_context.session, updated_port[\u0027id\u0027])"},{"line_number":573,"context_line":"        updated_port[\u0027db_version\u0027] \u003d port_version"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a8bc5a2_04db0aed","line":570,"range":{"start_line":570,"start_character":19,"end_line":570,"end_character":23},"updated":"2016-09-26 07:34:08.000000000","message":"redundent","commit_id":"39db9b390a2888821c5ae7fa14068b17ddbb3a30"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"55b82d548502376a9491f6fe18f59be32e8ec197","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def set_port_status_up(self, port_id):"},{"line_number":689,"context_line":"        LOG.debug(\"DF reports status up for port: %s\", port_id)"},{"line_number":690,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":691,"context_line":"        core_plugin.update_port_status(n_context.get_admin_context(),"},{"line_number":692,"context_line":"                                       port_id,"},{"line_number":693,"context_line":"                                       n_const.PORT_STATUS_ACTIVE)"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a8bc5a2_8451da38","line":690,"range":{"start_line":690,"start_character":8,"end_line":690,"end_character":19},"updated":"2016-09-26 07:34:08.000000000","message":"will the core plugin changes dynamically?  If not, you can store it in attribute of the class, which will be more efficient.","commit_id":"39db9b390a2888821c5ae7fa14068b17ddbb3a30"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b02f8ea3e4fa6a73e2252fa82fa402c9e85e0d18","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def set_port_status_up(self, port_id):"},{"line_number":689,"context_line":"        LOG.debug(\"DF reports status up for port: %s\", port_id)"},{"line_number":690,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":691,"context_line":"        core_plugin.update_port_status(n_context.get_admin_context(),"},{"line_number":692,"context_line":"                                       port_id,"},{"line_number":693,"context_line":"                                       n_const.PORT_STATUS_ACTIVE)"}],"source_content_type":"text/x-python","patch_set":60,"id":"5a8bc5a2_eaa26598","line":690,"range":{"start_line":690,"start_character":8,"end_line":690,"end_character":19},"in_reply_to":"5a8bc5a2_8451da38","updated":"2016-09-26 07:54:25.000000000","message":"This behavior is the same as in Neutron in many places. It can stay as-is.","commit_id":"39db9b390a2888821c5ae7fa14068b17ddbb3a30"}],"dragonflow/tests/fullstack/test_topology.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"5788d556acea3990a3c3dc16d48426d4eb210e66","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        vm_flows \u003d self._get_vm_flows(vm_mac)"},{"line_number":61,"context_line":"        self.assertTrue(any(vm_flows))"},{"line_number":62,"context_line":"        # test port status update"},{"line_number":63,"context_line":"        eventlet.sleep(5)"},{"line_number":64,"context_line":"        port \u003d vm._get_VM_port()"},{"line_number":65,"context_line":"        status \u003d port[\u0027status\u0027]"},{"line_number":66,"context_line":"        self.assertEqual(status, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_7afdc03a","line":63,"range":{"start_line":63,"start_character":23,"end_line":63,"end_character":24},"updated":"2016-07-25 01:47:57.000000000","message":"this constant value seems not stable. you can call \u0027utils.wait_until_is_and_return\u0027 instead.","commit_id":"12cb16ecb7b1e0a5c3506da6abf3f5406d75f73a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"7260b823aa2f3f7396c9514b280e35b0866743c8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        vm_flows \u003d self._get_vm_flows(vm_mac)"},{"line_number":61,"context_line":"        self.assertTrue(any(vm_flows))"},{"line_number":62,"context_line":"        # test port status update"},{"line_number":63,"context_line":"        eventlet.sleep(5)"},{"line_number":64,"context_line":"        port \u003d vm._get_VM_port()"},{"line_number":65,"context_line":"        status \u003d port[\u0027status\u0027]"},{"line_number":66,"context_line":"        self.assertEqual(status, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_5d6ef6c9","line":63,"range":{"start_line":63,"start_character":23,"end_line":63,"end_character":24},"in_reply_to":"dada55a8_7afdc03a","updated":"2016-07-26 02:52:31.000000000","message":"yes, I will do it","commit_id":"12cb16ecb7b1e0a5c3506da6abf3f5406d75f73a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"5788d556acea3990a3c3dc16d48426d4eb210e66","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        vm_mac \u003d vm.get_first_mac()"},{"line_number":72,"context_line":"        vm.server.stop()"},{"line_number":73,"context_line":"        # test port status update"},{"line_number":74,"context_line":"        eventlet.sleep(15)"},{"line_number":75,"context_line":"        port \u003d vm._get_VM_port()"},{"line_number":76,"context_line":"        status \u003d port[\u0027status\u0027]"},{"line_number":77,"context_line":"        self.assertEqual(status, \u0027DOWN\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_baf73858","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":26},"updated":"2016-07-25 01:47:57.000000000","message":"ditto","commit_id":"12cb16ecb7b1e0a5c3506da6abf3f5406d75f73a"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"7260b823aa2f3f7396c9514b280e35b0866743c8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        vm_mac \u003d vm.get_first_mac()"},{"line_number":72,"context_line":"        vm.server.stop()"},{"line_number":73,"context_line":"        # test port status update"},{"line_number":74,"context_line":"        eventlet.sleep(15)"},{"line_number":75,"context_line":"        port \u003d vm._get_VM_port()"},{"line_number":76,"context_line":"        status \u003d port[\u0027status\u0027]"},{"line_number":77,"context_line":"        self.assertEqual(status, \u0027DOWN\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_9d686ebc","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":26},"in_reply_to":"dada55a8_baf73858","updated":"2016-07-26 02:52:31.000000000","message":"yes, I will do it","commit_id":"12cb16ecb7b1e0a5c3506da6abf3f5406d75f73a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"103d75abe34e7f601ee2179110007bbdf1ff3295","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                 vm_mac in flow[\u0027actions\u0027]]"},{"line_number":91,"context_line":"        return flows"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _get_VM_port_status(self, vm, status):"},{"line_number":94,"context_line":"        port \u003d vm._get_VM_port()"},{"line_number":95,"context_line":"        if port:"},{"line_number":96,"context_line":"            port_status \u003d port[\u0027status\u0027]"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_9ad59de6","line":93,"updated":"2016-09-13 07:06:06.000000000","message":"nit: Consider renaming function to \u0027_is_VM_port_status\u0027 and returning True/False?","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"e7f0b0be5489e274788b6cd6ffaaef81c76ae259","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                 vm_mac in flow[\u0027actions\u0027]]"},{"line_number":91,"context_line":"        return flows"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _get_VM_port_status(self, vm, status):"},{"line_number":94,"context_line":"        port \u003d vm._get_VM_port()"},{"line_number":95,"context_line":"        if port:"},{"line_number":96,"context_line":"            port_status \u003d port[\u0027status\u0027]"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a89bdaa_8d180486","line":93,"in_reply_to":"9a89bdaa_9ad59de6","updated":"2016-09-13 09:11:28.000000000","message":"ok","commit_id":"112dddf8b7a28ffe4dc34ff789c7a5ee1f58026d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9431cba78062cb3c5b768e300f68d7f9faedbb9b","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        port \u003d vm._get_VM_port()"},{"line_number":95,"context_line":"        if port:"},{"line_number":96,"context_line":"            port_status \u003d port[\u0027status\u0027]"},{"line_number":97,"context_line":"            if port_status \u003d\u003d status:"},{"line_number":98,"context_line":"                return True"},{"line_number":99,"context_line":"            else:"},{"line_number":100,"context_line":"                return False"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":47,"id":"7a8ec9b2_47613d04","line":100,"range":{"start_line":97,"start_character":0,"end_line":100,"end_character":28},"updated":"2016-09-19 05:39:47.000000000","message":"nit: Can be written as:\nreturn port_status \u003d\u003d status","commit_id":"a3d2809c7a4e0d1b512d4f9dbde6050a155ac9b8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f43e410ef93dc224278c20afcb90523a891b256a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        core_plugin \u003d cfg.CONF.core_plugin"},{"line_number":76,"context_line":"        if core_plugin \u003d\u003d \u0027ml2\u0027:"},{"line_number":77,"context_line":"            # test port status update"},{"line_number":78,"context_line":"            vm.server.stop()"},{"line_number":79,"context_line":"            utils.wait_until_true("},{"line_number":80,"context_line":"                lambda: self._is_VM_port_status(vm, \u0027DOWN\u0027),"},{"line_number":81,"context_line":"                timeout\u003d60,"}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_56ecadf2","line":78,"updated":"2016-10-09 12:02:53.000000000","message":"Didn\u0027t we remove these calls since the caused false positives and \u0027VM cannot be deleted\u0027 errors?","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"b04acdfc5794c5b36d3d575b326b2bc960421c27","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        core_plugin \u003d cfg.CONF.core_plugin"},{"line_number":76,"context_line":"        if core_plugin \u003d\u003d \u0027ml2\u0027:"},{"line_number":77,"context_line":"            # test port status update"},{"line_number":78,"context_line":"            vm.server.stop()"},{"line_number":79,"context_line":"            utils.wait_until_true("},{"line_number":80,"context_line":"                lambda: self._is_VM_port_status(vm, \u0027DOWN\u0027),"},{"line_number":81,"context_line":"                timeout\u003d60,"}],"source_content_type":"text/x-python","patch_set":68,"id":"1a95cdbc_16c94559","line":78,"in_reply_to":"1a95cdbc_56ecadf2","updated":"2016-10-09 12:32:20.000000000","message":"But here we should test port status down when VM is power-off","commit_id":"f825c0a42849f3ae5d7ca8704e96deeb0415b78e"}]}
