)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11731,"name":"Pino de Candia","email":"giuseppe.decandia@gmail.com","username":"Pino"},"change_message_id":"6c0cb3076f29e29b78027b3a652b058e7f1a3c76","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Omer Anson \u003comer.anson@toganetworks.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-09-03 15:23:19 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding RethinkDB driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1625206"},{"line_number":10,"context_line":"Closes-Bug: #1527217"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5f2577a7_e723de04","line":7,"updated":"2017-09-08 19:50:44.000000000","message":"Just curious (since I didn\u0027t get to review a spec) why are we adding RethinkDB driver support? Is there a specific user or platform integration that requires it?\n\nThere are already 5 drivers (Cassandra, Redis, Zookeeper, Etcd, and RAMcloud). For each driver we need to make sure it works correctly with the specific releases of the DB, otherwise we can\u0027t guarantee that it actually works.\n\nThe additional testing effort should make us cautious in adding more backends, unless there are more users willing to help with testing.","commit_id":"2861c0e6402becdc17248069cd61bd4bafaaf189"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"1f2e71fbdfdbe571fa5908b836bd0f58fbf4c862","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Omer Anson \u003comer.anson@toganetworks.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-09-03 15:23:19 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding RethinkDB driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1625206"},{"line_number":10,"context_line":"Closes-Bug: #1527217"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5f2577a7_95e1d6d3","line":7,"in_reply_to":"5f2577a7_e723de04","updated":"2017-09-10 07:22:18.000000000","message":"There are a few, not so good reasons for this patch:\n1. It showcases our pluggability\n2. There\u0027s a bug for it\n3. There was a patch for it that did 90% of the work. I figured we may as well get it done.\n\nWe don\u0027t have to say we support it if there is no gate. We can say that there is a driver, and we\u0027ll support it if there\u0027s a request for it.","commit_id":"2861c0e6402becdc17248069cd61bd4bafaaf189"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"db888cadad0d33050324efd925023666417a568b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Closes-Bug: #1527217"},{"line_number":11,"context_line":"Partial-Bug: #1530877"},{"line_number":12,"context_line":"Change-Id: I2e592b752a51cd3651be6c020ca052f57fa9efef"},{"line_number":13,"context_line":"Signed-off-by: Dima Kuznetsov \u003cdima.kuznetsov@toganetworks.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"5f2577a7_3027d015","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":63},"updated":"2017-09-10 13:10:42.000000000","message":"Leftovers from the time my config was signing off automatically :(\n\nRemove if you have a chance.","commit_id":"58d04d5497b470e395da087c29aa6aa4c889fa7c"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"5fdac06b3ff08577a142df75e11769176cf473ea","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Closes-Bug: #1527217"},{"line_number":11,"context_line":"Partial-Bug: #1530877"},{"line_number":12,"context_line":"Change-Id: I2e592b752a51cd3651be6c020ca052f57fa9efef"},{"line_number":13,"context_line":"Signed-off-by: Dima Kuznetsov \u003cdima.kuznetsov@toganetworks.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"5f2577a7_50713ce0","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":63},"in_reply_to":"5f2577a7_3027d015","updated":"2017-09-10 14:03:21.000000000","message":"Done","commit_id":"58d04d5497b470e395da087c29aa6aa4c889fa7c"}],"devstack/rethinkdb_driver":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"278838cc03397166c9564150342bde67d125ff64","unresolved":false,"context_lines":[{"line_number":18,"context_line":"       echo \"Installing RethinkDB Server\""},{"line_number":19,"context_line":"       osver\u003d`gawk -F\u003d \u0027/^NAME/{print $2}\u0027 /etc/os-release`"},{"line_number":20,"context_line":"       if [ $osver \u003d\u003d \"Ubuntu\" ]; then"},{"line_number":21,"context_line":"          source /etc/lsb-release \u0026\u0026 echo \"deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main\" | sudo tee /etc/apt/sources.list.d/rethinkdb.list"},{"line_number":22,"context_line":"          wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -"},{"line_number":23,"context_line":"          sudo apt-get update"},{"line_number":24,"context_line":"          sudo apt-get install rethinkdb"}],"source_content_type":"application/x-shellscript","patch_set":1,"id":"5a710552_315b5689","line":21,"updated":"2015-12-16 13:17:12.000000000","message":"I will add bug that rethinkDB is currently only supported in Ubuntu","commit_id":"bf7da180bba949d61a138d2b4b533d431994390f"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"f9fa8c998c0d466e8ca2efc6d05537fd4fc41170","unresolved":false,"context_lines":[{"line_number":29,"context_line":"function nb_db_driver_install_client {"},{"line_number":30,"context_line":"    echo \"Installing RethinkDB client\""},{"line_number":31,"context_line":"    sudo pip install rethinkdb"},{"line_number":32,"context_line":"    echo \"Finished installing rethinkdb\""},{"line_number":33,"context_line":"}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"function nb_db_driver_start_server {"}],"source_content_type":"application/x-shellscript","patch_set":1,"id":"3a7e1126_26ab638b","line":32,"range":{"start_line":32,"start_character":30,"end_line":32,"end_character":39},"updated":"2015-12-17 10:22:46.000000000","message":"Nit: it seems that RethinkDB is the right format in the context.","commit_id":"bf7da180bba949d61a138d2b4b533d431994390f"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"f9fa8c998c0d466e8ca2efc6d05537fd4fc41170","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    if is_service_enabled df-rethinkdb-server ; then"},{"line_number":37,"context_line":"        rethinkdb --bind all --daemon --driver-port ${RETHINKDB_PORT}"},{"line_number":38,"context_line":"    fi"},{"line_number":39,"context_line":"    sleep 10"},{"line_number":40,"context_line":"    python $DEST/dragonflow/dragonflow/db/drivers/table_setup_rethinkdb.py -t ${RETHINKDB_TABLE_NAMES} -i ${RETHINKDB_IP} -p ${RETHINKDB_PORT}"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":1,"id":"3a7e1126_a61af315","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":9},"updated":"2015-12-17 10:22:46.000000000","message":"sleep 10 is ambiguous. You can check the process status using pgrep then \u0027sleep 1\u0027 until the process is able to respond user requests.","commit_id":"bf7da180bba949d61a138d2b4b533d431994390f"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"278838cc03397166c9564150342bde67d125ff64","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        rethinkdb --bind all --daemon --driver-port ${RETHINKDB_PORT}"},{"line_number":38,"context_line":"    fi"},{"line_number":39,"context_line":"    sleep 10"},{"line_number":40,"context_line":"    python $DEST/dragonflow/dragonflow/db/drivers/table_setup_rethinkdb.py -t ${RETHINKDB_TABLE_NAMES} -i ${RETHINKDB_IP} -p ${RETHINKDB_PORT}"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"function nb_db_driver_stop_server {"}],"source_content_type":"application/x-shellscript","patch_set":1,"id":"5a710552_316ef601","line":40,"updated":"2015-12-16 13:17:12.000000000","message":"why is this not inside the if clause?","commit_id":"bf7da180bba949d61a138d2b4b533d431994390f"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"c7b9907a8495f388985137b9d3c0a9924b470ce5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    if is_service_enabled df-rethinkdb-server ; then"},{"line_number":18,"context_line":"       echo \"Installing RethinkDB Server\""},{"line_number":19,"context_line":"       osver\u003d`gawk -F\u003d \u0027/^NAME/{print $2}\u0027 /etc/os-release`"},{"line_number":20,"context_line":"       if [ $osver \u003d\u003d \"Ubuntu\" ]; then"},{"line_number":21,"context_line":"          source /etc/lsb-release \u0026\u0026 echo \"deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main\" | sudo tee /etc/apt/sources.list.d/rethinkdb.list"},{"line_number":22,"context_line":"          wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -"},{"line_number":23,"context_line":"          sudo apt-get update"}],"source_content_type":"application/x-shellscript","patch_set":2,"id":"3a7e1126_f81fb305","line":20,"range":{"start_line":20,"start_character":19,"end_line":20,"end_character":21},"updated":"2015-12-20 19:43:10.000000000","message":"why not use the devstack builtin variables \n\nif is_ubuntu; then","commit_id":"727af76f55242b16c2f61d56c30da285dd49e90e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"c7b9907a8495f388985137b9d3c0a9924b470ce5","unresolved":false,"context_lines":[{"line_number":22,"context_line":"          wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -"},{"line_number":23,"context_line":"          sudo apt-get update"},{"line_number":24,"context_line":"          sudo apt-get install rethinkdb"},{"line_number":25,"context_line":"       fi"},{"line_number":26,"context_line":"    fi"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":2,"id":"3a7e1126_f8e6d313","line":25,"range":{"start_line":25,"start_character":7,"end_line":25,"end_character":9},"updated":"2015-12-20 19:43:10.000000000","message":"what about fedora support ?","commit_id":"727af76f55242b16c2f61d56c30da285dd49e90e"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"53fcce8ba06f83f11fe279493e07524259e169fc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"          wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -"},{"line_number":22,"context_line":"          sudo apt-get update"},{"line_number":23,"context_line":"          sudo apt-get install rethinkdb"},{"line_number":24,"context_line":"       fi"},{"line_number":25,"context_line":"    fi"},{"line_number":26,"context_line":"}"},{"line_number":27,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":4,"id":"1a7b0d38_b71c4814","line":24,"range":{"start_line":24,"start_character":7,"end_line":24,"end_character":9},"updated":"2015-12-24 02:05:56.000000000","message":"Add an \u0027else\u0027 section to echo a warning \u0027RethinkDB backend doesn\u0027t support fedora, suse and centos.\u0027","commit_id":"bffc8305a998b5a335479f23712c5d4f0da63bdf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"da2b4987d46aa21d6ba3482fc389f7fb7c30c9cd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"          wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -"},{"line_number":22,"context_line":"          sudo apt-get update"},{"line_number":23,"context_line":"          sudo apt-get install rethinkdb"},{"line_number":24,"context_line":"       fi"},{"line_number":25,"context_line":"    fi"},{"line_number":26,"context_line":"}"},{"line_number":27,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":4,"id":"1a7b0d38_6277fb3a","line":24,"range":{"start_line":24,"start_character":7,"end_line":24,"end_character":9},"in_reply_to":"1a7b0d38_b71c4814","updated":"2015-12-24 07:35:49.000000000","message":"I agree we should add  bugs into the system to add support for fedora , centos ....","commit_id":"bffc8305a998b5a335479f23712c5d4f0da63bdf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"c6e86d54a342b0def1276f8a42d9d259a0ddb6d6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"          sudo apt-get install rethinkdb"},{"line_number":24,"context_line":"       else"},{"line_number":25,"context_line":"          echo \"Warning - RethinkDB is currently supported only for Ubuntu. Fedora, CentOS and others distros are currently not supported.\""},{"line_number":26,"context_line":"          exit"},{"line_number":27,"context_line":"       fi"},{"line_number":28,"context_line":"    fi"},{"line_number":29,"context_line":"}"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"1a7b0d38_2ae50fdb","line":26,"range":{"start_line":26,"start_character":10,"end_line":26,"end_character":14},"updated":"2015-12-27 11:46:04.000000000","message":"should be with exit code \nI think the best is to use the die command (please test that it works ) \n\ndie $LINENO  \"message\"","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"880c39f9824c0fffa0c98c9e29dc6ca69e2ee21b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"       echo \"sleep 5, waiting for rethinkdb to start\""},{"line_number":44,"context_line":"       sleep 5"},{"line_number":45,"context_line":"       echo \"RethinkDB tables setup\""},{"line_number":46,"context_line":"       python $DEST/dragonflow/dragonflow/db/drivers/table_setup_rethinkdb.py -t ${RETHINKDB_TABLE_NAMES} -i ${RETHINKDB_IP} -p ${RETHINKDB_PORT}"},{"line_number":47,"context_line":"    fi"},{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"fa69d971_927cee21","line":46,"range":{"start_line":46,"start_character":7,"end_line":46,"end_character":13},"updated":"2015-12-30 10:30:38.000000000","message":"table setup should be run only on install.\nRethink DB is persistence unlike RAMCloud","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8b591559550247e33eabd25a30c15d2e380266d0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    echo \"Finished installing RethinkDB\""},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"function nb_db_driver_start_server {"},{"line_number":57,"context_line":"    if is_service_enabled df-rethinkdb-server ; then"},{"line_number":58,"context_line":"       echo \"starting rethinkdb\""},{"line_number":59,"context_line":"       rethinkdb --bind all --daemon --driver-port ${RETHINKDB_PORT}"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"fa6399be_0081f18e","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":35},"updated":"2016-10-15 08:04:15.000000000","message":"It is best to use systemd on fedora and initd on Ubuntu to allow presidency of the installation across reboots.\n\nPlease look in the etcd driver , you can find example on how to create/configure sytemd/initd service for the db driver \n\nhttps://github.com/openstack/dragonflow/blob/master/devstack/etcd_driver","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5ff200c3788db26ddb077efbd23709a060532069","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    echo \"Finished installing RethinkDB\""},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"function nb_db_driver_start_server {"},{"line_number":57,"context_line":"    if is_service_enabled df-rethinkdb-server ; then"},{"line_number":58,"context_line":"       echo \"starting rethinkdb\""},{"line_number":59,"context_line":"       rethinkdb --bind all --daemon --driver-port ${RETHINKDB_PORT}"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"da6895a0_fdcb4351","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":35},"in_reply_to":"fa6399be_0081f18e","updated":"2016-10-25 08:26:16.000000000","message":"Ok, we can do that.\nHow long devstack will support Ubuntu Trusty? In Xenial there is systemd...","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8b591559550247e33eabd25a30c15d2e380266d0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    fi"},{"line_number":63,"context_line":"}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"function nb_db_driver_stop_server {"},{"line_number":66,"context_line":"    if is_service_enabled df-rethinkdb-server ; then"},{"line_number":67,"context_line":"        sudo killall rethinkdb"},{"line_number":68,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"fa6399be_a0468578","line":65,"range":{"start_line":65,"start_character":9,"end_line":65,"end_character":33},"updated":"2016-10-15 08:04:15.000000000","message":"ditto \nif is_ubuntu; then\n            sudo service rethinkdb stop || true\n        elif is_fedora; then\n            sudo systemctl rethinkdb etcd || true\nfi","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"08d9a969056b6ca34ccf744886eeda221de864b1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    fi"},{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"function nb_db_driver_install_client {"},{"line_number":59,"context_line":"    # We can\u0027t actually install rethinkdb due to licensing issues"},{"line_number":60,"context_line":"    echo \"WARNING: You have to install python\u0027s rethingdb yourself\""},{"line_number":61,"context_line":"    echo \u003e\u00262 \"WARNING: You have to install python\u0027s rethingdb yourself\""}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"7f287b81_a3aec195","line":58,"updated":"2017-09-03 07:47:30.000000000","message":"I think it\u0027s worth adding some check like\n\npython -c \u0027import rethindb\u0027 || die","commit_id":"c95cc02d9d10b8ecc91c167137b470ab1d54f008"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ce24242c56d8c96320ec83ad139d3c535622c6ff","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    fi"},{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"function nb_db_driver_install_client {"},{"line_number":59,"context_line":"    # We can\u0027t actually install rethinkdb due to licensing issues"},{"line_number":60,"context_line":"    echo \"WARNING: You have to install python\u0027s rethingdb yourself\""},{"line_number":61,"context_line":"    echo \u003e\u00262 \"WARNING: You have to install python\u0027s rethingdb yourself\""}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"7f287b81_e0727c7c","line":58,"in_reply_to":"7f287b81_a3aec195","updated":"2017-09-03 12:23:50.000000000","message":"Done","commit_id":"c95cc02d9d10b8ecc91c167137b470ab1d54f008"}],"dragonflow/db/drivers/rethink_db_driver.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        return True"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get_key(self, table, key):"},{"line_number":44,"context_line":"        ret_val \u003d jsonutils.dumps(self.client.db(\u0027dragonflow\u0027).table(table)."},{"line_number":45,"context_line":"                               get(key).run(self.conn))"},{"line_number":46,"context_line":"        if ret_val \u003d\u003d \u0027null\u0027:"},{"line_number":47,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_a7c77244","line":44,"range":{"start_line":44,"start_character":50,"end_line":44,"end_character":60},"updated":"2015-12-30 10:05:28.000000000","message":"self.db_name","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        return ret_val"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def set_key(self, table, key, value):"},{"line_number":51,"context_line":"        self.client.db(\u0027dragonflow\u0027).table(table).get(key).\\"},{"line_number":52,"context_line":"            update(jsonutils.loads(value), return_changes\u003dTrue).run(self.conn)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def create_key(self, table, key, value):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_c7e626e8","line":51,"range":{"start_line":51,"start_character":24,"end_line":51,"end_character":34},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            update(jsonutils.loads(value), return_changes\u003dTrue).run(self.conn)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def create_key(self, table, key, value):"},{"line_number":55,"context_line":"        self.client.db(\u0027dragonflow\u0027).table(table).\\"},{"line_number":56,"context_line":"            insert(jsonutils.loads(value), return_changes\u003dTrue).run(self.conn)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def delete_key(self, table, key):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_a7ce9258","line":55,"range":{"start_line":55,"start_character":24,"end_line":55,"end_character":34},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            insert(jsonutils.loads(value), return_changes\u003dTrue).run(self.conn)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def delete_key(self, table, key):"},{"line_number":59,"context_line":"        self.client.db(\u0027dragonflow\u0027).table(table).get(key).delete().\\"},{"line_number":60,"context_line":"            run(self.conn)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_all_entries(self, table):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_47db161c","line":59,"range":{"start_line":59,"start_character":24,"end_line":59,"end_character":34},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_all_entries(self, table):"},{"line_number":63,"context_line":"        res \u003d []"},{"line_number":64,"context_line":"        cursor \u003d self.client.db(\u0027dragonflow\u0027).table(table).run(self.conn)"},{"line_number":65,"context_line":"        for entry in cursor:"},{"line_number":66,"context_line":"            res.append(jsonutils.dumps(entry))"},{"line_number":67,"context_line":"        return res"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_e7024a6f","line":64,"range":{"start_line":64,"start_character":33,"end_line":64,"end_character":43},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def get_all_keys(self, table):"},{"line_number":70,"context_line":"        res \u003d []"},{"line_number":71,"context_line":"        cursor \u003d self.client.db(\u0027dragonflow\u0027).table(table).pluck(\"name\").\\"},{"line_number":72,"context_line":"            run(self.conn)"},{"line_number":73,"context_line":"        for entry in cursor:"},{"line_number":74,"context_line":"            res.append(entry[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_87f82e7e","line":71,"range":{"start_line":71,"start_character":33,"end_line":71,"end_character":43},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def single_feed(self, table, callback):"},{"line_number":78,"context_line":"        conn \u003d self.client.connect(host\u003dself.db_ip, port\u003dself.db_port)"},{"line_number":79,"context_line":"        cursor \u003d self.client.db(\u0027dragonflow\u0027).table(table).changes().run(conn)"},{"line_number":80,"context_line":"        for entry in cursor:"},{"line_number":81,"context_line":"            if entry[\u0027old_val\u0027] is None:"},{"line_number":82,"context_line":"                act \u003d \u0027create\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_47f2369c","line":79,"range":{"start_line":79,"start_character":33,"end_line":79,"end_character":43},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                        jsonutils.dumps(entry[\u0027new_val\u0027]))"},{"line_number":95,"context_line":"                    break"},{"line_number":96,"context_line":"                except Exception as e:"},{"line_number":97,"context_line":"                    if attempts \u003c 1000:"},{"line_number":98,"context_line":"                        pass"},{"line_number":99,"context_line":"                    else:"},{"line_number":100,"context_line":"                        raise e"},{"line_number":101,"context_line":"                attempts +\u003d 1"},{"line_number":102,"context_line":"                time.sleep(1)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_078f5e24","line":100,"range":{"start_line":97,"start_character":20,"end_line":100,"end_character":31},"updated":"2015-12-30 10:05:28.000000000","message":"please refactor it for readability.\n\nif attempts \u003e\u003d MAX_ATTEMPTS:\n    raise e","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                time.sleep(1)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def register_notification_callback(self, callback, prefix\u003d\"\"):"},{"line_number":105,"context_line":"        all_tables \u003d self.client.db(\u0027dragonflow\u0027).table_list().run(self.conn)"},{"line_number":106,"context_line":"        for table in all_tables:"},{"line_number":107,"context_line":"            if table.encode(\u0027ascii\u0027, \u0027ignore\u0027).startswith(prefix):"},{"line_number":108,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_072bdeec","line":105,"range":{"start_line":105,"start_character":37,"end_line":105,"end_character":47},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b0b1963390ad2a468b4c9ad65aab103086dc50ff","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        db_id \u003d 1"},{"line_number":120,"context_line":"        prev_value \u003d 0"},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            return_val \u003d self.client.db(\u0027dragonflow\u0027).table(table).\\"},{"line_number":123,"context_line":"                get(db_id).update({\u0027key\u0027: self.client.row[\u0027key\u0027]."},{"line_number":124,"context_line":"                                  add(1)}, return_changes\u003dTrue).run(self.conn)"},{"line_number":125,"context_line":"            new_value \u003d return_val[\u0027changes\u0027][0][\u0027new_val\u0027][\u0027key\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_27306256","line":122,"range":{"start_line":122,"start_character":41,"end_line":122,"end_character":51},"updated":"2015-12-30 10:05:28.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"beb3c40ca15cee97203d37a2922be97fcb451235","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            return new_value"},{"line_number":128,"context_line":"        except Exception as e:"},{"line_number":129,"context_line":"            if prev_value \u003d\u003d 0:"},{"line_number":130,"context_line":"                self.client.db(\u0027dragonflow\u0027).table(table).\\"},{"line_number":131,"context_line":"                    insert({\u0027name\u0027: db_id, \u0027key\u0027: 1},"},{"line_number":132,"context_line":"                           return_changes\u003dFalse).run(self.conn)"},{"line_number":133,"context_line":"                return 1"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_57240c0c","line":130,"range":{"start_line":130,"start_character":32,"end_line":130,"end_character":42},"updated":"2015-12-31 06:50:39.000000000","message":"ditto","commit_id":"32f8da5e9a708833b9d5f821010cf7567cf1e5d7"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"2188ac2145b8485292c34dc70a45a7009c185d12","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_serialization import jsonutils"},{"line_number":17,"context_line":"import rethinkdb as rdb"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from dragonflow.common.exceptions import DBKeyNotFound"},{"line_number":20,"context_line":"from dragonflow.db import db_api"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"_DF_DATABASE \u003d \u0027dragonflow\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa6399be_2b6faafc","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":54},"updated":"2016-10-17 07:08:21.000000000","message":"from dragonflow.common import exceptions\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5ff200c3788db26ddb077efbd23709a060532069","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_serialization import jsonutils"},{"line_number":17,"context_line":"import rethinkdb as rdb"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from dragonflow.common.exceptions import DBKeyNotFound"},{"line_number":20,"context_line":"from dragonflow.db import db_api"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"_DF_DATABASE \u003d \u0027dragonflow\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"da6895a0_1dc71746","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":54},"in_reply_to":"fa6399be_2b6faafc","updated":"2016-10-25 08:26:16.000000000","message":"ok, thanks","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8b591559550247e33eabd25a30c15d2e380266d0","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            cursor \u003d rdb.table(table).pluck(\"id\").run(conn)"},{"line_number":106,"context_line":"            return [entry[\u0027id\u0027] for entry in cursor]"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def register_notification_callback(self, callback, topics\u003dNone):"},{"line_number":109,"context_line":"        pass"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def register_topic_for_notification(self, topic):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa6399be_a03da5de","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":39},"updated":"2016-10-15 08:04:15.000000000","message":"I think that rethinkdb support this -\u003e\u003e \n\"push updated query results to applications in realtime\"","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"08d9a969056b6ca34ccf744886eeda221de864b1","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from dragonflow.db import db_api"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"_DF_DATABASE \u003d \u0027dragonflow\u0027"},{"line_number":22,"context_line":"_CONN_POOL_SIZE \u003d 10  # FIXME: move to configuration maybe?"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class RethinkDbDriver(db_api.DbApi):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f287b81_a387e10f","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":15},"updated":"2017-09-03 07:47:30.000000000","message":"+1","commit_id":"c95cc02d9d10b8ecc91c167137b470ab1d54f008"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ce24242c56d8c96320ec83ad139d3c535622c6ff","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from dragonflow.db import db_api"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"_DF_DATABASE \u003d \u0027dragonflow\u0027"},{"line_number":22,"context_line":"_CONN_POOL_SIZE \u003d 10  # FIXME: move to configuration maybe?"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class RethinkDbDriver(db_api.DbApi):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f287b81_a06c749c","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":15},"in_reply_to":"7f287b81_a387e10f","updated":"2017-09-03 12:23:50.000000000","message":"Done","commit_id":"c95cc02d9d10b8ecc91c167137b470ab1d54f008"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"08d9a969056b6ca34ccf744886eeda221de864b1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def initialize(self, db_ip, db_port, **args):"},{"line_number":52,"context_line":"        self._db_host \u003d db_ip"},{"line_number":53,"context_line":"        self._db_port \u003d db_port"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def support_publish_subscribe(self):"},{"line_number":56,"context_line":"        return False"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create_table(self, table):"},{"line_number":59,"context_line":"        with self._get_conn() as conn:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f287b81_4376fd40","line":56,"range":{"start_line":54,"start_character":0,"end_line":56,"end_character":20},"updated":"2017-09-03 07:47:30.000000000","message":"Deprecated","commit_id":"c95cc02d9d10b8ecc91c167137b470ab1d54f008"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ce24242c56d8c96320ec83ad139d3c535622c6ff","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def initialize(self, db_ip, db_port, **args):"},{"line_number":52,"context_line":"        self._db_host \u003d db_ip"},{"line_number":53,"context_line":"        self._db_port \u003d db_port"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def support_publish_subscribe(self):"},{"line_number":56,"context_line":"        return False"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create_table(self, table):"},{"line_number":59,"context_line":"        with self._get_conn() as conn:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f287b81_8069788c","line":56,"range":{"start_line":54,"start_character":0,"end_line":56,"end_character":20},"in_reply_to":"7f287b81_4376fd40","updated":"2017-09-03 12:23:50.000000000","message":"Removed.","commit_id":"c95cc02d9d10b8ecc91c167137b470ab1d54f008"}],"test-requirements.txt":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"c3f494b30e68d9083498adc1b335326a0e0b6afe","unresolved":false,"context_lines":[{"line_number":18,"context_line":"redis\u003e\u003d2.10.0 # MIT"},{"line_number":19,"context_line":"hiredis\u003e\u003d0.2.0 # BSD"},{"line_number":20,"context_line":"reno\u003e\u003d1.8.0 # Apache2"},{"line_number":21,"context_line":"rethinkdb\u003e\u003d2.3.0 # Apache2"}],"source_content_type":"text/plain","patch_set":10,"id":"fa6399be_2aa5f645","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":26},"updated":"2016-10-15 02:39:30.000000000","message":"I don\u0027t think it is a requirement. Redis is here because we have UT test cases for redis.","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5ff200c3788db26ddb077efbd23709a060532069","unresolved":false,"context_lines":[{"line_number":18,"context_line":"redis\u003e\u003d2.10.0 # MIT"},{"line_number":19,"context_line":"hiredis\u003e\u003d0.2.0 # BSD"},{"line_number":20,"context_line":"reno\u003e\u003d1.8.0 # Apache2"},{"line_number":21,"context_line":"rethinkdb\u003e\u003d2.3.0 # Apache2"}],"source_content_type":"text/plain","patch_set":10,"id":"da6895a0_3dc69b48","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":26},"in_reply_to":"fa6399be_2aa5f645","updated":"2016-10-25 08:26:16.000000000","message":"Ok","commit_id":"fcc7186f039010c91cbd9e39df13bf25c914f6d7"}]}
