)]}'
{"devstack/df-ext-services.sh":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"bb063eb15fdf2cda038c26ee66279756579c8d7b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Locate devstack directory"},{"line_number":4,"context_line":"TOP_DIR\u003d/opt/devstack"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# Detect path for this script file"},{"line_number":7,"context_line":"DF_DIR\u003d$(cd $(dirname \"$0\") \u0026\u0026 pwd)"}],"source_content_type":"text/x-sh","patch_set":10,"id":"bae84128_3f941589","line":4,"range":{"start_line":4,"start_character":9,"end_line":4,"end_character":12},"updated":"2016-02-24 15:10:35.000000000","message":"Please remove \n\nwe should fix this the devstack change one the git files on setup","commit_id":"8294a6dda168ec5af34f9c1e726d5e39921d23e9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"dfc2438816de2bcb7b7c9fad47e028bcbc712051","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Locate devstack directory"},{"line_number":4,"context_line":"TOP_DIR\u003d/opt/devstack"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# Detect path for this script file"},{"line_number":7,"context_line":"DF_DIR\u003d$(cd $(dirname \"$0\") \u0026\u0026 pwd)"}],"source_content_type":"text/x-sh","patch_set":10,"id":"bae84128_8a9ec160","line":4,"range":{"start_line":4,"start_character":9,"end_line":4,"end_character":12},"in_reply_to":"bae84128_3f941589","updated":"2016-02-24 15:13:20.000000000","message":"Done","commit_id":"8294a6dda168ec5af34f9c1e726d5e39921d23e9"}],"devstack/plugin.sh":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"bb063eb15fdf2cda038c26ee66279756579c8d7b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    init_pubsub"},{"line_number":59,"context_line":"    source $DEST/dragonflow/devstack/zmq_pubsub_driver"},{"line_number":60,"context_line":"fi"},{"line_number":61,"context_line":"DF_PUB_SUB\u003d${DF_PUB_SUB:-\"False\"}"},{"line_number":62,"context_line":"DF_IS_MONITOR_TABLES\u003d${DF_IS_MONITOR_TABLES:-\"False\"}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# Dragonflow installation uses functions from these files"},{"line_number":65,"context_line":"source $TOP_DIR/lib/neutron_plugins/ovs_base"}],"source_content_type":"text/x-sh","patch_set":10,"id":"bae84128_7f14dde7","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":53},"updated":"2016-02-24 15:10:35.000000000","message":"why not place this in the setting files","commit_id":"8294a6dda168ec5af34f9c1e726d5e39921d23e9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"dfc2438816de2bcb7b7c9fad47e028bcbc712051","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    init_pubsub"},{"line_number":59,"context_line":"    source $DEST/dragonflow/devstack/zmq_pubsub_driver"},{"line_number":60,"context_line":"fi"},{"line_number":61,"context_line":"DF_PUB_SUB\u003d${DF_PUB_SUB:-\"False\"}"},{"line_number":62,"context_line":"DF_IS_MONITOR_TABLES\u003d${DF_IS_MONITOR_TABLES:-\"False\"}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# Dragonflow installation uses functions from these files"},{"line_number":65,"context_line":"source $TOP_DIR/lib/neutron_plugins/ovs_base"}],"source_content_type":"text/x-sh","patch_set":10,"id":"bae84128_0a98f168","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":53},"in_reply_to":"bae84128_7f14dde7","updated":"2016-02-24 15:13:20.000000000","message":"Has to come after the condition in line 57 and condition calls to init_pubsub.","commit_id":"8294a6dda168ec5af34f9c1e726d5e39921d23e9"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"26e908f3e768b6d63f26bfa1b19458ce6026824a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    init_pubsub"},{"line_number":59,"context_line":"    source $DEST/dragonflow/devstack/zmq_pubsub_driver"},{"line_number":60,"context_line":"fi"},{"line_number":61,"context_line":"DF_PUB_SUB\u003d${DF_PUB_SUB:-\"False\"}"},{"line_number":62,"context_line":"DF_IS_MONITOR_TABLES\u003d${DF_IS_MONITOR_TABLES:-\"False\"}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# Dragonflow installation uses functions from these files"},{"line_number":65,"context_line":"source $TOP_DIR/lib/neutron_plugins/ovs_base"}],"source_content_type":"text/x-sh","patch_set":16,"id":"7af24918_9fb51733","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":53},"updated":"2016-03-02 06:55:00.000000000","message":"I think this section should be in the #pubsub section above or in the setting file","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"93d5cb0e4de3db4da082407f058bf1c52bdede82","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    init_pubsub"},{"line_number":59,"context_line":"    source $DEST/dragonflow/devstack/zmq_pubsub_driver"},{"line_number":60,"context_line":"fi"},{"line_number":61,"context_line":"DF_PUB_SUB\u003d${DF_PUB_SUB:-\"False\"}"},{"line_number":62,"context_line":"DF_IS_MONITOR_TABLES\u003d${DF_IS_MONITOR_TABLES:-\"False\"}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# Dragonflow installation uses functions from these files"},{"line_number":65,"context_line":"source $TOP_DIR/lib/neutron_plugins/ovs_base"}],"source_content_type":"text/x-sh","patch_set":16,"id":"7af24918_0a2d4346","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":53},"in_reply_to":"7af24918_9fb51733","updated":"2016-03-02 07:10:14.000000000","message":"It has to come after the possible invocation of init_pubsub. It is used to set the defaults to \u0027False\u0027 if no driver is on.\n\ninit_pubsub is used to set the defaults to true.\n\nThe user should be able to override everything.","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"}],"doc/source/pluggable_pubsub.rst":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"96cb2277133f2cf9d4ead727c3fc7a12d6c589d4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Pluggable Publish-Subscribe Infrastructure"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Instead of relying on the DB driver to support reliable publish-subscribe, we"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_f146cb4d","line":2,"updated":"2016-02-29 08:53:55.000000000","message":"If i understand correctly you intend this not to be a spec but ratter a document for the wiki.\nIf so we need to add reference to the spec and use images instead of the ascii-art, lets discuss this together. \n\nI am miising some note about controller to colneroller Pub/sub and teh intermnidiate tyable monitor soluation Information about the table monitor as well","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2fd1a027eb2b59dfac641177d147f5c2287833f8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Pluggable Publish-Subscribe Infrastructure"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Instead of relying on the DB driver to support reliable publish-subscribe, we"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_d17e2718","line":2,"in_reply_to":"9aed3d3a_f146cb4d","updated":"2016-02-29 08:58:31.000000000","message":"I\u0027ll add the reference to the spec.\n\nI can recreate these images graphically, but I think they can stay as they are.\n\nThere is no controller-controller communication, since it isn\u0027t implemented here. This document\u0027s purpose is to describe the developer\u0027s API for pub/sub drivers. The TableMonitor is an addition that piggy-backs on the pub/sub service, but isn\u0027t related to the API.","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"96cb2277133f2cf9d4ead727c3fc7a12d6c589d4","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Pluggable Publish-Subscribe Infrastructure"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Instead of relying on the DB driver to support reliable publish-subscribe, we"},{"line_number":6,"context_line":"allow pub/sub mechanisms to be integrated to Dragonflow in a pluggable way."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"There are several Neutron API servers, and many compute nodes. Every compute"},{"line_number":9,"context_line":"node registers as a subscriber to every Neutron API server, which acts as a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_d16aa7b2","line":6,"range":{"start_line":5,"start_character":1,"end_line":6,"end_character":75},"updated":"2016-02-29 08:53:55.000000000","message":"This should be reference to the other spec","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2fd1a027eb2b59dfac641177d147f5c2287833f8","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Pluggable Publish-Subscribe Infrastructure"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Instead of relying on the DB driver to support reliable publish-subscribe, we"},{"line_number":6,"context_line":"allow pub/sub mechanisms to be integrated to Dragonflow in a pluggable way."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"There are several Neutron API servers, and many compute nodes. Every compute"},{"line_number":9,"context_line":"node registers as a subscriber to every Neutron API server, which acts as a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_f171ab45","line":6,"range":{"start_line":5,"start_character":1,"end_line":6,"end_character":75},"in_reply_to":"9aed3d3a_d16aa7b2","updated":"2016-02-29 08:58:31.000000000","message":"Done","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"96cb2277133f2cf9d4ead727c3fc7a12d6c589d4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"\u003d\u003d\u003d"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"For simplicity, the API for both implementations is the same. It can be found"},{"line_number":76,"context_line":"in `dragonflow/db/pub_sub_api.py`. It is recommended to read the code to fully"},{"line_number":77,"context_line":"understand the API."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"For both network and IPC based communication, a driver has to implement"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_31d7934c","line":76,"range":{"start_line":76,"start_character":4,"end_line":76,"end_character":32},"updated":"2016-02-29 08:53:55.000000000","message":"could be a reference [x]","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2fd1a027eb2b59dfac641177d147f5c2287833f8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"\u003d\u003d\u003d"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"For simplicity, the API for both implementations is the same. It can be found"},{"line_number":76,"context_line":"in `dragonflow/db/pub_sub_api.py`. It is recommended to read the code to fully"},{"line_number":77,"context_line":"understand the API."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"For both network and IPC based communication, a driver has to implement"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_51917746","line":76,"range":{"start_line":76,"start_character":4,"end_line":76,"end_character":32},"in_reply_to":"9aed3d3a_31d7934c","updated":"2016-02-29 08:58:31.000000000","message":"Done","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"96cb2277133f2cf9d4ead727c3fc7a12d6c589d4","unresolved":false,"context_lines":[{"line_number":140,"context_line":"`initialize`, `_connect`, and `send_event`. The difference in connect is for"},{"line_number":141,"context_line":"the same reasons as the subscribers. The difference in `initialize` is since"},{"line_number":142,"context_line":"the multi-proc subscriber uses the lazy initialization pattern. This also"},{"line_number":143,"context_line":"accounts for the difference in `send_event`."}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_91a3ffff","line":143,"updated":"2016-02-29 08:53:55.000000000","message":"Please add reference to the other spec","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2fd1a027eb2b59dfac641177d147f5c2287833f8","unresolved":false,"context_lines":[{"line_number":140,"context_line":"`initialize`, `_connect`, and `send_event`. The difference in connect is for"},{"line_number":141,"context_line":"the same reasons as the subscribers. The difference in `initialize` is since"},{"line_number":142,"context_line":"the multi-proc subscriber uses the lazy initialization pattern. This also"},{"line_number":143,"context_line":"accounts for the difference in `send_event`."}],"source_content_type":"text/x-rst","patch_set":14,"id":"9aed3d3a_3196733f","line":143,"in_reply_to":"9aed3d3a_91a3ffff","updated":"2016-02-29 08:58:31.000000000","message":"Done","commit_id":"49fb2f199eb9f9dc28896b7b8fcefc51af67a13b"}],"dragonflow/controller/df_publisher_service.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1d106a0c2e3dabd1d4e6e011fb83872f3c33dc4","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _get_multiproc_subscriber(self):"},{"line_number":47,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("},{"line_number":48,"context_line":"                                    cfg.CONF.df.pub_sub_multiproc_driver,"},{"line_number":49,"context_line":"                                    df_utils.DF_PUBSUB_DRIVER_NAMESPACE)"},{"line_number":50,"context_line":"        return pub_sub_driver.get_subscriber()"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_76010405","line":48,"range":{"start_line":48,"start_character":36,"end_line":48,"end_character":72},"updated":"2016-02-29 12:49:22.000000000","message":"I think we need to support None configuration Value for use cases that do not  need to bind  (UDP, broker)","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b80af22f833e5fa58a5f461a2471dba4e5d96f02","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _get_multiproc_subscriber(self):"},{"line_number":47,"context_line":"        pub_sub_driver \u003d df_utils.load_driver("},{"line_number":48,"context_line":"                                    cfg.CONF.df.pub_sub_multiproc_driver,"},{"line_number":49,"context_line":"                                    df_utils.DF_PUBSUB_DRIVER_NAMESPACE)"},{"line_number":50,"context_line":"        return pub_sub_driver.get_subscriber()"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_f9250009","line":48,"range":{"start_line":48,"start_character":36,"end_line":48,"end_character":72},"in_reply_to":"9aed3d3a_76010405","updated":"2016-02-29 14:19:34.000000000","message":"Will add in another patch.","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1d106a0c2e3dabd1d4e6e011fb83872f3c33dc4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            self.multiproc_subscriber.daemonize()"},{"line_number":66,"context_line":"        # TODO(oanson) TableMonitor daemonize will go here"},{"line_number":67,"context_line":"        while True:"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                event \u003d self._queue.get()"},{"line_number":70,"context_line":"                self.publisher.send_event(event)"},{"line_number":71,"context_line":"                eventlet.sleep(0)"},{"line_number":72,"context_line":"            except Exception as e:"},{"line_number":73,"context_line":"                LOG.warning(_LW(\"Exception in main loop: {}, {}\").format("},{"line_number":74,"context_line":"                    e, traceback.format_exc()"},{"line_number":75,"context_line":"                ))"},{"line_number":76,"context_line":"                # Ignore"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_96a808dd","line":76,"range":{"start_line":68,"start_character":11,"end_line":76,"end_character":24},"updated":"2016-02-29 12:49:22.000000000","message":"In case we have a None value for the inproc this code should not run unless we want to use the same queue for the Table Monitor","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b80af22f833e5fa58a5f461a2471dba4e5d96f02","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            self.multiproc_subscriber.daemonize()"},{"line_number":66,"context_line":"        # TODO(oanson) TableMonitor daemonize will go here"},{"line_number":67,"context_line":"        while True:"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                event \u003d self._queue.get()"},{"line_number":70,"context_line":"                self.publisher.send_event(event)"},{"line_number":71,"context_line":"                eventlet.sleep(0)"},{"line_number":72,"context_line":"            except Exception as e:"},{"line_number":73,"context_line":"                LOG.warning(_LW(\"Exception in main loop: {}, {}\").format("},{"line_number":74,"context_line":"                    e, traceback.format_exc()"},{"line_number":75,"context_line":"                ))"},{"line_number":76,"context_line":"                # Ignore"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_b6cf0c28","line":76,"range":{"start_line":68,"start_character":11,"end_line":76,"end_character":24},"in_reply_to":"9aed3d3a_96a808dd","updated":"2016-02-29 14:19:34.000000000","message":"The plan is to use the same queue for the table monitor.","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1d106a0c2e3dabd1d4e6e011fb83872f3c33dc4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def initialize(self, db_ip\u003d\u0027127.0.0.1\u0027, db_port\u003d4001):"},{"line_number":48,"context_line":"        self.driver.initialize(db_ip, db_port, config\u003dcfg.CONF.df)"},{"line_number":49,"context_line":"        if self.use_pubsub:"},{"line_number":50,"context_line":"            self.multiproc_publisher \u003d self._get_multiproc_publisher()"},{"line_number":51,"context_line":"            self.subscriber \u003d self._get_subscriber()"},{"line_number":52,"context_line":"            if self.is_neutron_server:"},{"line_number":53,"context_line":"                #Publisher is part of the neutron server Plugin"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_96e008fc","line":50,"range":{"start_line":50,"start_character":44,"end_line":50,"end_character":68},"updated":"2016-02-29 12:49:22.000000000","message":"I think this should be get publisher in case we have setting for the in proc publisher return it \nIn case that the in proc is set to None value use the driver publisher,","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b80af22f833e5fa58a5f461a2471dba4e5d96f02","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def initialize(self, db_ip\u003d\u0027127.0.0.1\u0027, db_port\u003d4001):"},{"line_number":48,"context_line":"        self.driver.initialize(db_ip, db_port, config\u003dcfg.CONF.df)"},{"line_number":49,"context_line":"        if self.use_pubsub:"},{"line_number":50,"context_line":"            self.multiproc_publisher \u003d self._get_multiproc_publisher()"},{"line_number":51,"context_line":"            self.subscriber \u003d self._get_subscriber()"},{"line_number":52,"context_line":"            if self.is_neutron_server:"},{"line_number":53,"context_line":"                #Publisher is part of the neutron server Plugin"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_36e49caa","line":50,"range":{"start_line":50,"start_character":44,"end_line":50,"end_character":68},"in_reply_to":"9aed3d3a_96e008fc","updated":"2016-02-29 14:19:34.000000000","message":"See same comment in df_publisher_service.","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1d106a0c2e3dabd1d4e6e011fb83872f3c33dc4","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def _send_db_change_event(self, table, key, action, value):"},{"line_number":115,"context_line":"        if self.use_pubsub:"},{"line_number":116,"context_line":"            update \u003d DbUpdate(table, key, action, value)"},{"line_number":117,"context_line":"            self.multiproc_publisher.send_event(update)"},{"line_number":118,"context_line":"            eventlet.sleep(0)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def allocate_tunnel_key(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_b6a9cc92","line":117,"range":{"start_line":117,"start_character":17,"end_line":117,"end_character":36},"updated":"2016-02-29 12:49:22.000000000","message":"Should be Publisher it is up to the configuration if  we use in proc or global publisher","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b80af22f833e5fa58a5f461a2471dba4e5d96f02","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def _send_db_change_event(self, table, key, action, value):"},{"line_number":115,"context_line":"        if self.use_pubsub:"},{"line_number":116,"context_line":"            update \u003d DbUpdate(table, key, action, value)"},{"line_number":117,"context_line":"            self.multiproc_publisher.send_event(update)"},{"line_number":118,"context_line":"            eventlet.sleep(0)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def allocate_tunnel_key(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_76f0e467","line":117,"range":{"start_line":117,"start_character":17,"end_line":117,"end_character":36},"in_reply_to":"9aed3d3a_b6a9cc92","updated":"2016-02-29 14:19:34.000000000","message":"I agree, but see other comments.","commit_id":"bde22cc827e6637e6b56792570f005a2187aff46"}],"dragonflow/db/pubsub_drivers/zmq_pubsub_driver.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"040285ab67133c780208baf7d059157e13d7dbe8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    ),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"cfg.CONF.register_opts(ZMQ_PUBLISHER_OPTS, group\u003d\u0027zmq_publisher\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"SUPPORTED_TRANSPORTS \u003d set([\u0027tcp\u0027, \u0027epgm\u0027])"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_649e2dba","line":36,"range":{"start_line":36,"start_character":50,"end_line":36,"end_character":63},"updated":"2016-02-24 09:32:41.000000000","message":"Currently, all the options are put in \u0027df\u0027 namespace. Why is it in zmq_publisher namespace in neutron.conf?","commit_id":"4005781269d1df5991771e58e2ae9b3fcb06174b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"670dff0ca337996a0371757fa17b6130b6962abc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    ),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"cfg.CONF.register_opts(ZMQ_PUBLISHER_OPTS, group\u003d\u0027zmq_publisher\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"SUPPORTED_TRANSPORTS \u003d set([\u0027tcp\u0027, \u0027epgm\u0027])"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_3050db31","line":36,"range":{"start_line":36,"start_character":50,"end_line":36,"end_character":63},"in_reply_to":"bae84128_649e2dba","updated":"2016-02-24 09:44:07.000000000","message":"Inter-process communication protocol, and its settings, may be unique to the used driver. So the driver has to provide the configuration options.","commit_id":"4005781269d1df5991771e58e2ae9b3fcb06174b"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"040285ab67133c780208baf7d059157e13d7dbe8","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        if transport_proto not in SUPPORTED_TRANSPORTS:"},{"line_number":46,"context_line":"            LOG.error(_LE(\"ZMQ driver does not support trasport %s\") %"},{"line_number":47,"context_line":"                    transport_proto)"},{"line_number":48,"context_line":"            raise Exception(\"ZMQ driver does not support trasport %s\" %"},{"line_number":49,"context_line":"                    transport_proto)"},{"line_number":50,"context_line":"        self.subscriber \u003d ZMQSubscriberAgent()"},{"line_number":51,"context_line":"        self.publisher \u003d ZMQPublisherAgent()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_2106d71f","line":48,"range":{"start_line":48,"start_character":18,"end_line":48,"end_character":27},"updated":"2016-02-24 09:32:41.000000000","message":"Use a python common Exception is not good. Please add a dedicated Exception class in dragonflow/common/exceptions.","commit_id":"4005781269d1df5991771e58e2ae9b3fcb06174b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"670dff0ca337996a0371757fa17b6130b6962abc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        if transport_proto not in SUPPORTED_TRANSPORTS:"},{"line_number":46,"context_line":"            LOG.error(_LE(\"ZMQ driver does not support trasport %s\") %"},{"line_number":47,"context_line":"                    transport_proto)"},{"line_number":48,"context_line":"            raise Exception(\"ZMQ driver does not support trasport %s\" %"},{"line_number":49,"context_line":"                    transport_proto)"},{"line_number":50,"context_line":"        self.subscriber \u003d ZMQSubscriberAgent()"},{"line_number":51,"context_line":"        self.publisher \u003d ZMQPublisherAgent()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_9043a76b","line":48,"range":{"start_line":48,"start_character":18,"end_line":48,"end_character":27},"in_reply_to":"bae84128_2106d71f","updated":"2016-02-24 09:44:07.000000000","message":"Done","commit_id":"4005781269d1df5991771e58e2ae9b3fcb06174b"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"040285ab67133c780208baf7d059157e13d7dbe8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(ZMQPubSub, self).__init__()"},{"line_number":44,"context_line":"        transport_proto \u003d cfg.CONF.df.publisher_transport"},{"line_number":45,"context_line":"        if transport_proto not in SUPPORTED_TRANSPORTS:"},{"line_number":46,"context_line":"            LOG.error(_LE(\"ZMQ driver does not support trasport %s\") %"},{"line_number":47,"context_line":"                    transport_proto)"},{"line_number":48,"context_line":"            raise Exception(\"ZMQ driver does not support trasport %s\" %"},{"line_number":49,"context_line":"                    transport_proto)"},{"line_number":50,"context_line":"        self.subscriber \u003d ZMQSubscriberAgent()"},{"line_number":51,"context_line":"        self.publisher \u003d ZMQPublisherAgent()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_61345ffb","line":49,"range":{"start_line":46,"start_character":12,"end_line":49,"end_character":36},"updated":"2016-02-24 09:32:41.000000000","message":"I suggest you use a common message.\n\nmessage \u003d \"ZMQ driver does not support transport: %s\" % transport_proto\nLOG.error(_LE(message))\nraise Exception(message)","commit_id":"4005781269d1df5991771e58e2ae9b3fcb06174b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"670dff0ca337996a0371757fa17b6130b6962abc","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(ZMQPubSub, self).__init__()"},{"line_number":44,"context_line":"        transport_proto \u003d cfg.CONF.df.publisher_transport"},{"line_number":45,"context_line":"        if transport_proto not in SUPPORTED_TRANSPORTS:"},{"line_number":46,"context_line":"            LOG.error(_LE(\"ZMQ driver does not support trasport %s\") %"},{"line_number":47,"context_line":"                    transport_proto)"},{"line_number":48,"context_line":"            raise Exception(\"ZMQ driver does not support trasport %s\" %"},{"line_number":49,"context_line":"                    transport_proto)"},{"line_number":50,"context_line":"        self.subscriber \u003d ZMQSubscriberAgent()"},{"line_number":51,"context_line":"        self.publisher \u003d ZMQPublisherAgent()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bae84128_7046e37b","line":49,"range":{"start_line":46,"start_character":12,"end_line":49,"end_character":36},"in_reply_to":"bae84128_61345ffb","updated":"2016-02-24 09:44:07.000000000","message":"Done","commit_id":"4005781269d1df5991771e58e2ae9b3fcb06174b"}],"dragonflow/tests/fullstack/test_pub_sub.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"c4d704eeba6bce0b7784913679ad3a16623b6c50","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    subscriber.register_listen_address(uri)"},{"line_number":37,"context_line":"    subscriber.daemonize()"},{"line_number":38,"context_line":"    return subscriber"},{"line_number":39,"context_line":"    "},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class Namespace(object):"},{"line_number":42,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_1838f29f","line":39,"updated":"2016-02-21 08:26:53.000000000","message":"remove whitespaces","commit_id":"5a5c91442a6500cd9358683823f56a639cfb8495"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f219024f61ec729e47dab3451581649d84885dd3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    subscriber.register_listen_address(uri)"},{"line_number":37,"context_line":"    subscriber.daemonize()"},{"line_number":38,"context_line":"    return subscriber"},{"line_number":39,"context_line":"    "},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class Namespace(object):"},{"line_number":42,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_b872a647","line":39,"in_reply_to":"bae84128_1838f29f","updated":"2016-02-21 08:32:35.000000000","message":"Done","commit_id":"5a5c91442a6500cd9358683823f56a639cfb8495"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"c4d704eeba6bce0b7784913679ad3a16623b6c50","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        super(TestPubSub, self).setUp()"},{"line_number":49,"context_line":"        self.events_num \u003d 0"},{"line_number":50,"context_line":"        self.do_test \u003d cfg.CONF.df.enable_df_pub_sub"},{"line_number":51,"context_line":"        self.nb_api.driver.set_key("},{"line_number":52,"context_line":"            \u0027test\u0027,"},{"line_number":53,"context_line":"            \u0027key\u0027,"},{"line_number":54,"context_line":"            jsonutils.dumps({\u0027name\u0027: \u0027key\u0027}))"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_78c01e7d","line":51,"updated":"2016-02-21 08:26:53.000000000","message":"why is this needed?","commit_id":"5a5c91442a6500cd9358683823f56a639cfb8495"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f219024f61ec729e47dab3451581649d84885dd3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        super(TestPubSub, self).setUp()"},{"line_number":49,"context_line":"        self.events_num \u003d 0"},{"line_number":50,"context_line":"        self.do_test \u003d cfg.CONF.df.enable_df_pub_sub"},{"line_number":51,"context_line":"        self.nb_api.driver.set_key("},{"line_number":52,"context_line":"            \u0027test\u0027,"},{"line_number":53,"context_line":"            \u0027key\u0027,"},{"line_number":54,"context_line":"            jsonutils.dumps({\u0027name\u0027: \u0027key\u0027}))"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_d8ae8a84","line":51,"in_reply_to":"bae84128_78c01e7d","updated":"2016-02-21 08:32:35.000000000","message":"test/key is used throughout the tests, and the different parts behave unexpectedly when the record doesn\u0027t exist.\n\nThis behaviour may have to be fixed, but is beyond the scope of this patch, and I suspect it cannot happen in non-testing environment.","commit_id":"5a5c91442a6500cd9358683823f56a639cfb8495"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"c4d704eeba6bce0b7784913679ad3a16623b6c50","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            jsonutils.dumps({\u0027name\u0027: \u0027key\u0027}))"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def tearDown(self):"},{"line_number":57,"context_line":"        self.nb_api.driver.delete_key(\u0027test\u0027, \u0027key\u0027)"},{"line_number":58,"context_line":"        super(TestPubSub, self).tearDown()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_pub_sub_add_port(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_b8baa608","line":57,"updated":"2016-02-21 08:26:53.000000000","message":"same","commit_id":"5a5c91442a6500cd9358683823f56a639cfb8495"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f219024f61ec729e47dab3451581649d84885dd3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            jsonutils.dumps({\u0027name\u0027: \u0027key\u0027}))"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def tearDown(self):"},{"line_number":57,"context_line":"        self.nb_api.driver.delete_key(\u0027test\u0027, \u0027key\u0027)"},{"line_number":58,"context_line":"        super(TestPubSub, self).tearDown()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_pub_sub_add_port(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_18b752d9","line":57,"in_reply_to":"bae84128_b8baa608","updated":"2016-02-21 08:32:35.000000000","message":"Undoes the action above. See above for rationale.","commit_id":"5a5c91442a6500cd9358683823f56a639cfb8495"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"6a1043e44684c29cffe8d7dc02d8eb18f4375b3a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        network_id \u003d network.create()"},{"line_number":89,"context_line":"        eventlet.sleep(1)"},{"line_number":90,"context_line":"        self.assertNotEqual(local_event_num, events_num)"},{"line_number":91,"context_line":"        port \u003d {\u0027admin_state_up\u0027: True, \u0027name\u0027: \u0027port1\u0027,"},{"line_number":92,"context_line":"                \u0027network_id\u0027: network_id}"},{"line_number":93,"context_line":"        local_event_num \u003d events_num"},{"line_number":94,"context_line":"        port \u003d self.neutron.create_port(body\u003d{\u0027port\u0027: port})"},{"line_number":95,"context_line":"        eventlet.sleep(1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_1fe9cd14","line":92,"range":{"start_line":91,"start_character":8,"end_line":92,"end_character":41},"updated":"2016-02-28 08:45:04.000000000","message":"Consider using here PortTestObj object","commit_id":"09393157b7d4e076feda4f02806d46875dc6b3cb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"1ec9796ab31ecf43ec1490742cb56532b63dd16b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        network_id \u003d network.create()"},{"line_number":89,"context_line":"        eventlet.sleep(1)"},{"line_number":90,"context_line":"        self.assertNotEqual(local_event_num, events_num)"},{"line_number":91,"context_line":"        port \u003d {\u0027admin_state_up\u0027: True, \u0027name\u0027: \u0027port1\u0027,"},{"line_number":92,"context_line":"                \u0027network_id\u0027: network_id}"},{"line_number":93,"context_line":"        local_event_num \u003d events_num"},{"line_number":94,"context_line":"        port \u003d self.neutron.create_port(body\u003d{\u0027port\u0027: port})"},{"line_number":95,"context_line":"        eventlet.sleep(1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_9f0ddd92","line":92,"range":{"start_line":91,"start_character":8,"end_line":92,"end_character":41},"in_reply_to":"9aed3d3a_1fe9cd14","updated":"2016-02-28 09:17:06.000000000","message":"Done","commit_id":"09393157b7d4e076feda4f02806d46875dc6b3cb"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"c7266bbb6d9309630d9e43f0c34d88524d1ae7ec","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        network_id \u003d network.create()"},{"line_number":127,"context_line":"        eventlet.sleep(1)"},{"line_number":128,"context_line":"        self.assertNotEqual(local_event_num, ns.events_num)"},{"line_number":129,"context_line":"        port \u003d {\u0027admin_state_up\u0027: True, \u0027name\u0027: \u0027port1\u0027,"},{"line_number":130,"context_line":"                \u0027network_id\u0027: network_id}"},{"line_number":131,"context_line":"        local_event_num \u003d ns.events_num"},{"line_number":132,"context_line":"        port \u003d self.neutron.create_port(body\u003d{\u0027port\u0027: port})"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aed3d3a_7aebc7b0","line":129,"updated":"2016-02-28 10:49:52.000000000","message":"Here you can also use PortTestObj","commit_id":"ee460d8de860be1f68ebf3abe8ae1a7318edb13c"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2e023abe4ae4790374cc02596ab54ac542c0017c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        network_id \u003d network.create()"},{"line_number":127,"context_line":"        eventlet.sleep(1)"},{"line_number":128,"context_line":"        self.assertNotEqual(local_event_num, ns.events_num)"},{"line_number":129,"context_line":"        port \u003d {\u0027admin_state_up\u0027: True, \u0027name\u0027: \u0027port1\u0027,"},{"line_number":130,"context_line":"                \u0027network_id\u0027: network_id}"},{"line_number":131,"context_line":"        local_event_num \u003d ns.events_num"},{"line_number":132,"context_line":"        port \u003d self.neutron.create_port(body\u003d{\u0027port\u0027: port})"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aed3d3a_5a052378","line":129,"in_reply_to":"9aed3d3a_7aebc7b0","updated":"2016-02-28 10:51:19.000000000","message":"Done","commit_id":"ee460d8de860be1f68ebf3abe8ae1a7318edb13c"}]}
