)]}'
{"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"67658919f963bd3557abdeb66f8c32e43974de80","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            self.nb_api.subscriber.unregister_listen_address("},{"line_number":460,"context_line":"                publisher.get_uri()"},{"line_number":461,"context_line":"            )"},{"line_number":462,"context_line":"            self.db_store.delete_publisher(uuid)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def _associate_floatingip(self, floatingip):"},{"line_number":465,"context_line":"        self.dispatcher.dispatch(\u0027associate_floatingip\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_49bbf672","line":462,"range":{"start_line":462,"start_character":11,"end_line":462,"end_character":48},"updated":"2016-03-25 08:23:04.000000000","message":"do you need add some log for deletion operation?","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            self.nb_api.subscriber.unregister_listen_address("},{"line_number":460,"context_line":"                publisher.get_uri()"},{"line_number":461,"context_line":"            )"},{"line_number":462,"context_line":"            self.db_store.delete_publisher(uuid)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def _associate_floatingip(self, floatingip):"},{"line_number":465,"context_line":"        self.dispatcher.dispatch(\u0027associate_floatingip\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_6f5eb1ea","line":462,"range":{"start_line":462,"start_character":11,"end_line":462,"end_character":48},"in_reply_to":"da0c15f0_49bbf672","updated":"2016-03-25 12:45:09.000000000","message":"Done","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"}],"dragonflow/controller/df_publisher_service.py":[{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"67658919f963bd3557abdeb66f8c32e43974de80","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self._queue \u003d Queue()"},{"line_number":42,"context_line":"        self.publisher \u003d self._get_publisher()"},{"line_number":43,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":44,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":45,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":46,"context_line":"        self.uuid \u003d str(uuid.uuid4())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_publisher(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_e4b95130","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":35},"updated":"2016-03-25 08:23:04.000000000","message":"Can we get the nb_api object from df controller but not create an  instance again?","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self._queue \u003d Queue()"},{"line_number":42,"context_line":"        self.publisher \u003d self._get_publisher()"},{"line_number":43,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":44,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":45,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":46,"context_line":"        self.uuid \u003d str(uuid.uuid4())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_publisher(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_ef72c17b","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":35},"in_reply_to":"da0c15f0_e4b95130","updated":"2016-03-25 12:45:09.000000000","message":"Can\u0027t be done. These are two separate processes.","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"850b4306e28f5a5617bb0207768c1b87280a3cec","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":44,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":45,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":46,"context_line":"        self.uuid \u003d str(uuid.uuid4())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_publisher(self):"},{"line_number":49,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_0979fe93","line":46,"range":{"start_line":46,"start_character":20,"end_line":46,"end_character":37},"updated":"2016-03-25 07:58:36.000000000","message":"This way we generate a new uuid each time we run and if the Publisher crash it will send a new uuid and the subscriber will not know that it lost a message.\n\nI think it will be best to write this uuid to a file or have the publisher ID be based on the host name  in oredr to avoid this problem.\n\nThe sequential message ID  can be auto generated each time","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":44,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":45,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":46,"context_line":"        self.uuid \u003d str(uuid.uuid4())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_publisher(self):"},{"line_number":49,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_cf6ffd90","line":46,"range":{"start_line":46,"start_character":20,"end_line":46,"end_character":37},"in_reply_to":"da0c15f0_0979fe93","updated":"2016-03-25 12:45:09.000000000","message":"Done","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"67658919f963bd3557abdeb66f8c32e43974de80","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def run(self):"},{"line_number":78,"context_line":"        if self.multiproc_subscriber:"},{"line_number":79,"context_line":"            self.multiproc_subscriber.daemonize()"},{"line_number":80,"context_line":"        self.db.initialize("},{"line_number":81,"context_line":"            db_ip\u003dcfg.CONF.df.remote_db_ip,"},{"line_number":82,"context_line":"            db_port\u003dcfg.CONF.df.remote_db_port,"},{"line_number":83,"context_line":"            config\u003dcfg.CONF.df"},{"line_number":84,"context_line":"        )"},{"line_number":85,"context_line":"        self._register_as_publisher()"},{"line_number":86,"context_line":"        self._publishers_table_monitor \u003d pub_sub_api.StalePublisherMonitor("},{"line_number":87,"context_line":"            self.db,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_8465f5e2","line":84,"range":{"start_line":80,"start_character":0,"end_line":84,"end_character":9},"updated":"2016-03-25 08:23:04.000000000","message":"Can we get the nb_api object from df controller but not initialize it again?","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def run(self):"},{"line_number":78,"context_line":"        if self.multiproc_subscriber:"},{"line_number":79,"context_line":"            self.multiproc_subscriber.daemonize()"},{"line_number":80,"context_line":"        self.db.initialize("},{"line_number":81,"context_line":"            db_ip\u003dcfg.CONF.df.remote_db_ip,"},{"line_number":82,"context_line":"            db_port\u003dcfg.CONF.df.remote_db_port,"},{"line_number":83,"context_line":"            config\u003dcfg.CONF.df"},{"line_number":84,"context_line":"        )"},{"line_number":85,"context_line":"        self._register_as_publisher()"},{"line_number":86,"context_line":"        self._publishers_table_monitor \u003d pub_sub_api.StalePublisherMonitor("},{"line_number":87,"context_line":"            self.db,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_8f14e5f5","line":84,"range":{"start_line":80,"start_character":0,"end_line":84,"end_character":9},"in_reply_to":"da0c15f0_8465f5e2","updated":"2016-03-25 12:45:09.000000000","message":"No. The publisher service and DF controller run on different processes.","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"2476bd64a9c7adad04cd37ca9ab56b9e3828f84b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":45,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":46,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":47,"context_line":"        self.uuid \u003d str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _get_publisher(self):"},{"line_number":50,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_401469f4","line":47,"range":{"start_line":47,"start_character":20,"end_line":47,"end_character":73},"updated":"2016-03-29 07:00:03.000000000","message":"I think that it will generate each time a different uuid because of the time perspective (uuid are unique across both space and time)","commit_id":"352188f6a274d5e865f90b1dbda2f90157571115"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"2476bd64a9c7adad04cd37ca9ab56b9e3828f84b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":45,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":46,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":47,"context_line":"        self.uuid \u003d str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _get_publisher(self):"},{"line_number":50,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_202b35ed","line":47,"range":{"start_line":47,"start_character":57,"end_line":47,"end_character":73},"updated":"2016-03-29 07:00:03.000000000","message":"Please do it a method that it will be clearer \n\n_get_publisher_uuid (","commit_id":"352188f6a274d5e865f90b1dbda2f90157571115"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cab822803832b2e6dda39664f3ea7ad26de05d88","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":45,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":46,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":47,"context_line":"        self.uuid \u003d str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _get_publisher(self):"},{"line_number":50,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_29e83910","line":47,"range":{"start_line":47,"start_character":57,"end_line":47,"end_character":73},"in_reply_to":"ba0121b8_202b35ed","updated":"2016-03-29 09:57:56.000000000","message":"Done","commit_id":"352188f6a274d5e865f90b1dbda2f90157571115"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cab822803832b2e6dda39664f3ea7ad26de05d88","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.multiproc_subscriber \u003d self._get_multiproc_subscriber()"},{"line_number":45,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":46,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":47,"context_line":"        self.uuid \u003d str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _get_publisher(self):"},{"line_number":50,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_09e57536","line":47,"range":{"start_line":47,"start_character":20,"end_line":47,"end_character":73},"in_reply_to":"ba0121b8_401469f4","updated":"2016-03-29 09:57:56.000000000","message":"uuid5 makes a sha1 of uuid.NAMESPACE_DNS (a constant) and the hostname. It has no hidden randomness. I verified - it creates the same UUID for the host.","commit_id":"352188f6a274d5e865f90b1dbda2f90157571115"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ce9ad38f0d6c6e944673a4508e0596a3615fdc61","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":47,"context_line":"        self.uuid \u003d self._generate_uuid()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _generate_uuid(self):"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        Generate a non-random uuid based on the fully qualified domain name."},{"line_number":52,"context_line":"        This UUID is supposed to remain the same across service restarts."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _get_publisher(self):"},{"line_number":57,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_d1392243","line":54,"range":{"start_line":49,"start_character":4,"end_line":54,"end_character":68},"updated":"2016-03-30 10:46:35.000000000","message":"it is a common function, please move it out of the class.","commit_id":"a71720f1cc3427e3f1fcfcd55324be9ddb922a2f"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c907e14613858074299fff63c5fc2db43cd3a77e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.db \u003d nb_driver_class()"},{"line_number":47,"context_line":"        self.uuid \u003d self._generate_uuid()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _generate_uuid(self):"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        Generate a non-random uuid based on the fully qualified domain name."},{"line_number":52,"context_line":"        This UUID is supposed to remain the same across service restarts."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _get_publisher(self):"},{"line_number":57,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_b1a6240e","line":54,"range":{"start_line":49,"start_character":4,"end_line":54,"end_character":68},"in_reply_to":"ba0121b8_d1392243","updated":"2016-03-30 12:19:55.000000000","message":"Done","commit_id":"a71720f1cc3427e3f1fcfcd55324be9ddb922a2f"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"15a500dead9857fbcffb7d35f9fe5a9d85a6ddb6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            config\u003dcfg.CONF.df"},{"line_number":83,"context_line":"        )"},{"line_number":84,"context_line":"        self._register_as_publisher()"},{"line_number":85,"context_line":"        self._publishers_table_monitor \u003d pub_sub_api.StalePublisherMonitor("},{"line_number":86,"context_line":"            self.db,"},{"line_number":87,"context_line":"            self.publisher,"},{"line_number":88,"context_line":"            cfg.CONF.df.publisher_timeout"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_cb43f211","line":85,"range":{"start_line":85,"start_character":53,"end_line":85,"end_character":74},"updated":"2016-03-31 09:59:11.000000000","message":"Does this mean every local_controller is monitor this table and once a publisher is down, many events will be published?","commit_id":"230bdb7cb910f276b5030493322ac111e7ccd535"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c8865dcc5506939f71371079bb89f8925fcb438","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            config\u003dcfg.CONF.df"},{"line_number":83,"context_line":"        )"},{"line_number":84,"context_line":"        self._register_as_publisher()"},{"line_number":85,"context_line":"        self._publishers_table_monitor \u003d pub_sub_api.StalePublisherMonitor("},{"line_number":86,"context_line":"            self.db,"},{"line_number":87,"context_line":"            self.publisher,"},{"line_number":88,"context_line":"            cfg.CONF.df.publisher_timeout"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_84ef271d","line":85,"range":{"start_line":85,"start_character":53,"end_line":85,"end_character":74},"in_reply_to":"ba0121b8_cb43f211","updated":"2016-03-31 10:50:31.000000000","message":"No, only every Neutron server. So the number of events sent isn\u0027t too great.","commit_id":"230bdb7cb910f276b5030493322ac111e7ccd535"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"15a500dead9857fbcffb7d35f9fe5a9d85a6ddb6","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                event \u003d self._queue.get()"},{"line_number":95,"context_line":"                self.publisher.send_event(event)"},{"line_number":96,"context_line":"                if event.table !\u003d pub_sub_api.PUBLISHER_TABLE:"},{"line_number":97,"context_line":"                    self._update_timestamp_in_db()"},{"line_number":98,"context_line":"                eventlet.sleep(0)"},{"line_number":99,"context_line":"            except Exception as e:"},{"line_number":100,"context_line":"                LOG.warning(_LW(\"Exception in main loop: {}, {}\").format("}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_6babc675","line":97,"range":{"start_line":97,"start_character":25,"end_line":97,"end_character":48},"updated":"2016-03-31 09:59:11.000000000","message":"will this lead to too many df db operation? Maybe you can filter away some updates.","commit_id":"230bdb7cb910f276b5030493322ac111e7ccd535"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c8865dcc5506939f71371079bb89f8925fcb438","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                event \u003d self._queue.get()"},{"line_number":95,"context_line":"                self.publisher.send_event(event)"},{"line_number":96,"context_line":"                if event.table !\u003d pub_sub_api.PUBLISHER_TABLE:"},{"line_number":97,"context_line":"                    self._update_timestamp_in_db()"},{"line_number":98,"context_line":"                eventlet.sleep(0)"},{"line_number":99,"context_line":"            except Exception as e:"},{"line_number":100,"context_line":"                LOG.warning(_LW(\"Exception in main loop: {}, {}\").format("}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_e4c70396","line":97,"range":{"start_line":97,"start_character":25,"end_line":97,"end_character":48},"in_reply_to":"ba0121b8_6babc675","updated":"2016-03-31 10:50:31.000000000","message":"Done. I\u0027ll add a rate limiter.","commit_id":"230bdb7cb910f276b5030493322ac111e7ccd535"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"15a500dead9857fbcffb7d35f9fe5a9d85a6ddb6","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                # Ignore"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _update_timestamp_in_db(self):"},{"line_number":106,"context_line":"        publisher_json \u003d self.db.get_key("},{"line_number":107,"context_line":"            pub_sub_api.PUBLISHER_TABLE,"},{"line_number":108,"context_line":"            self.uuid,"},{"line_number":109,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_0e121857","line":106,"range":{"start_line":106,"start_character":33,"end_line":106,"end_character":40},"updated":"2016-03-31 09:59:11.000000000","message":"Can get_key return None, for example it is deleted by another controller?","commit_id":"230bdb7cb910f276b5030493322ac111e7ccd535"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c8865dcc5506939f71371079bb89f8925fcb438","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                # Ignore"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _update_timestamp_in_db(self):"},{"line_number":106,"context_line":"        publisher_json \u003d self.db.get_key("},{"line_number":107,"context_line":"            pub_sub_api.PUBLISHER_TABLE,"},{"line_number":108,"context_line":"            self.uuid,"},{"line_number":109,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_44b98f14","line":106,"range":{"start_line":106,"start_character":33,"end_line":106,"end_character":40},"in_reply_to":"ba0121b8_0e121857","updated":"2016-03-31 10:50:31.000000000","message":"Done. I\u0027ll catch the exception and re-add the publisher if it has been removed.","commit_id":"230bdb7cb910f276b5030493322ac111e7ccd535"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"4edb1ad3a4fe31afcb925b0ef6d144dd7e03d9a7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            for table_name in pub_sub_api.MONITOR_TABLES]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":84,"context_line":"        if table_name \u003d\u003d \u0027publisher\u0027:"},{"line_number":85,"context_line":"            table_monitor \u003d pub_sub_api.TableMonitor("},{"line_number":86,"context_line":"                table_name,"},{"line_number":87,"context_line":"                self.driver,"},{"line_number":88,"context_line":"                self.publisher,"},{"line_number":89,"context_line":"                cfg.CONF.df.monitor_table_poll_time,"},{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            table_monitor \u003d pub_sub_api.TableMonitor("},{"line_number":93,"context_line":"                table_name,"},{"line_number":94,"context_line":"                self.driver,"},{"line_number":95,"context_line":"                self.publisher,"},{"line_number":96,"context_line":"                cfg.CONF.df.monitor_table_poll_time,"},{"line_number":97,"context_line":"            )"},{"line_number":98,"context_line":"        table_monitor.daemonize()"},{"line_number":99,"context_line":"        return table_monitor"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_968d347e","line":97,"range":{"start_line":84,"start_character":8,"end_line":97,"end_character":13},"updated":"2016-03-25 02:02:55.000000000","message":"the if-else has the same logic, am I dazzled?","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            for table_name in pub_sub_api.MONITOR_TABLES]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _start_db_table_monitor(self, table_name):"},{"line_number":84,"context_line":"        if table_name \u003d\u003d \u0027publisher\u0027:"},{"line_number":85,"context_line":"            table_monitor \u003d pub_sub_api.TableMonitor("},{"line_number":86,"context_line":"                table_name,"},{"line_number":87,"context_line":"                self.driver,"},{"line_number":88,"context_line":"                self.publisher,"},{"line_number":89,"context_line":"                cfg.CONF.df.monitor_table_poll_time,"},{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            table_monitor \u003d pub_sub_api.TableMonitor("},{"line_number":93,"context_line":"                table_name,"},{"line_number":94,"context_line":"                self.driver,"},{"line_number":95,"context_line":"                self.publisher,"},{"line_number":96,"context_line":"                cfg.CONF.df.monitor_table_poll_time,"},{"line_number":97,"context_line":"            )"},{"line_number":98,"context_line":"        table_monitor.daemonize()"},{"line_number":99,"context_line":"        return table_monitor"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_2f1b191d","line":97,"range":{"start_line":84,"start_character":8,"end_line":97,"end_character":13},"in_reply_to":"da0c15f0_968d347e","updated":"2016-03-25 12:45:09.000000000","message":"Yes. That\u0027s very wrong. I\u0027ll fix it.","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"67658919f963bd3557abdeb66f8c32e43974de80","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        publisher \u003d jsonutils.loads(publisher_value)"},{"line_number":595,"context_line":"        publisher.update(columns)"},{"line_number":596,"context_line":"        publisher_value \u003d jsonutils.dumps(publisher)"},{"line_number":597,"context_line":"        self.driver.create_key("},{"line_number":598,"context_line":"            pub_sub_api.PUBLISHER_TABLE,"},{"line_number":599,"context_line":"            uuid,"},{"line_number":600,"context_line":"            publisher_value,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_04a605c1","line":597,"range":{"start_line":597,"start_character":20,"end_line":597,"end_character":31},"updated":"2016-03-25 08:23:04.000000000","message":"is set_key or create_key?","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        publisher \u003d jsonutils.loads(publisher_value)"},{"line_number":595,"context_line":"        publisher.update(columns)"},{"line_number":596,"context_line":"        publisher_value \u003d jsonutils.dumps(publisher)"},{"line_number":597,"context_line":"        self.driver.create_key("},{"line_number":598,"context_line":"            pub_sub_api.PUBLISHER_TABLE,"},{"line_number":599,"context_line":"            uuid,"},{"line_number":600,"context_line":"            publisher_value,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_6f1231b6","line":597,"range":{"start_line":597,"start_character":20,"end_line":597,"end_character":31},"in_reply_to":"da0c15f0_04a605c1","updated":"2016-03-25 12:45:09.000000000","message":"Done","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"}],"dragonflow/db/pub_sub_api.py":[{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"67658919f963bd3557abdeb66f8c32e43974de80","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        data \u003d msgpack.packb(message, encoding\u003d\u0027utf-8\u0027)"},{"line_number":39,"context_line":"    except Exception:"},{"line_number":40,"context_line":"        LOG.exception(_LE(\"Error in pack_message: \"))"},{"line_number":41,"context_line":"    return data"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_84ce9558","line":40,"range":{"start_line":40,"start_character":48,"end_line":40,"end_character":50},"updated":"2016-03-25 08:23:04.000000000","message":"\u0027:\u0027 or \u0027.\u0027? there is no more parameter information.","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        data \u003d msgpack.packb(message, encoding\u003d\u0027utf-8\u0027)"},{"line_number":39,"context_line":"    except Exception:"},{"line_number":40,"context_line":"        LOG.exception(_LE(\"Error in pack_message: \"))"},{"line_number":41,"context_line":"    return data"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_8f5fc571","line":40,"range":{"start_line":40,"start_character":48,"end_line":40,"end_character":50},"in_reply_to":"da0c15f0_84ce9558","updated":"2016-03-25 12:45:09.000000000","message":"Exception information will follow.","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"67658919f963bd3557abdeb66f8c32e43974de80","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    try:"},{"line_number":47,"context_line":"        entry \u003d msgpack.unpackb(message, encoding\u003d\u0027utf-8\u0027)"},{"line_number":48,"context_line":"    except Exception:"},{"line_number":49,"context_line":"        LOG.exception(_LE(\"Error in unpack_message: \"))"},{"line_number":50,"context_line":"    return entry"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_c4d88d20","line":49,"range":{"start_line":49,"start_character":50,"end_line":49,"end_character":52},"updated":"2016-03-25 08:23:04.000000000","message":"ditto","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    try:"},{"line_number":47,"context_line":"        entry \u003d msgpack.unpackb(message, encoding\u003d\u0027utf-8\u0027)"},{"line_number":48,"context_line":"    except Exception:"},{"line_number":49,"context_line":"        LOG.exception(_LE(\"Error in unpack_message: \"))"},{"line_number":50,"context_line":"    return entry"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_2f4f99be","line":49,"range":{"start_line":49,"start_character":50,"end_line":49,"end_character":52},"in_reply_to":"da0c15f0_c4d88d20","updated":"2016-03-25 12:45:09.000000000","message":"Same here.","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"67658919f963bd3557abdeb66f8c32e43974de80","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class StalePublisherMonitor(TableMonitor):"},{"line_number":262,"context_line":"    def __init__(self, driver, publisher, timeout, polling_time\u003d10):"},{"line_number":263,"context_line":"        super(StalePublisherMonitor, self).__init__("},{"line_number":264,"context_line":"            PUBLISHER_TABLE,"},{"line_number":265,"context_line":"            driver,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_a4263914","line":262,"range":{"start_line":262,"start_character":50,"end_line":262,"end_character":68},"updated":"2016-03-25 08:23:04.000000000","message":"How long can we think these dbs is stale?","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6286b2dd0cdf225e7fd9a6ebc4c4eacfec99e7c9","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class StalePublisherMonitor(TableMonitor):"},{"line_number":262,"context_line":"    def __init__(self, driver, publisher, timeout, polling_time\u003d10):"},{"line_number":263,"context_line":"        super(StalePublisherMonitor, self).__init__("},{"line_number":264,"context_line":"            PUBLISHER_TABLE,"},{"line_number":265,"context_line":"            driver,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_cfd89df2","line":262,"range":{"start_line":262,"start_character":50,"end_line":262,"end_character":68},"in_reply_to":"da0c15f0_a4263914","updated":"2016-03-25 12:45:09.000000000","message":"I\u0027ve set the default timeout to 5 minutes. But it is configurable.","commit_id":"8ef82c47f9e5500cbc01fa715b8abd1a034084bd"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"2476bd64a9c7adad04cd37ca9ab56b9e3828f84b","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            last_activity_timestamp \u003d publisher[\u0027last_activity_timestamp\u0027]"},{"line_number":282,"context_line":"            if last_activity_timestamp \u003c time.time() - self._timeout:"},{"line_number":283,"context_line":"                LOG.info(_LI(\u0027Removing publisher %s\u0027), publisher_json)"},{"line_number":284,"context_line":"                self._driver.delete_key(self._table_name, entry_key)"},{"line_number":285,"context_line":"        return super(StalePublisherMonitor, self)._poll_once(old_cache)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_60e88d7d","line":284,"range":{"start_line":284,"start_character":29,"end_line":284,"end_character":68},"updated":"2016-03-29 07:00:03.000000000","message":"Two publisher can delete this key at once we need to try and catch here or mandate try in the driver.","commit_id":"352188f6a274d5e865f90b1dbda2f90157571115"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cab822803832b2e6dda39664f3ea7ad26de05d88","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            last_activity_timestamp \u003d publisher[\u0027last_activity_timestamp\u0027]"},{"line_number":282,"context_line":"            if last_activity_timestamp \u003c time.time() - self._timeout:"},{"line_number":283,"context_line":"                LOG.info(_LI(\u0027Removing publisher %s\u0027), publisher_json)"},{"line_number":284,"context_line":"                self._driver.delete_key(self._table_name, entry_key)"},{"line_number":285,"context_line":"        return super(StalePublisherMonitor, self)._poll_once(old_cache)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_e94be129","line":284,"range":{"start_line":284,"start_character":29,"end_line":284,"end_character":68},"in_reply_to":"ba0121b8_60e88d7d","updated":"2016-03-29 09:57:56.000000000","message":"Will do it here. The DBKeyNotFound exception is part of the API. I don\u0027t want to change that.","commit_id":"352188f6a274d5e865f90b1dbda2f90157571115"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ce9ad38f0d6c6e944673a4508e0596a3615fdc61","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            polling_time"},{"line_number":271,"context_line":"        )"},{"line_number":272,"context_line":"        self._timeout \u003d timeout"},{"line_number":273,"context_line":"        self._uuid \u003d str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _poll_once(self, old_cache):"},{"line_number":276,"context_line":"        \"\"\"Scan for stale entries of other publishers\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_f10d4691","line":273,"range":{"start_line":273,"start_character":21,"end_line":273,"end_character":74},"updated":"2016-03-30 10:46:35.000000000","message":"use generate_uuid() common function.","commit_id":"a71720f1cc3427e3f1fcfcd55324be9ddb922a2f"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c907e14613858074299fff63c5fc2db43cd3a77e","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            polling_time"},{"line_number":271,"context_line":"        )"},{"line_number":272,"context_line":"        self._timeout \u003d timeout"},{"line_number":273,"context_line":"        self._uuid \u003d str(uuid.uuid5(uuid.NAMESPACE_DNS, socket.getfqdn()))"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _poll_once(self, old_cache):"},{"line_number":276,"context_line":"        \"\"\"Scan for stale entries of other publishers\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_f1b09c45","line":273,"range":{"start_line":273,"start_character":21,"end_line":273,"end_character":74},"in_reply_to":"ba0121b8_f10d4691","updated":"2016-03-30 12:19:55.000000000","message":"Done","commit_id":"a71720f1cc3427e3f1fcfcd55324be9ddb922a2f"}]}
