)]}'
{"devstack/plugin.sh":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"4b42c2c389dfbc6b6e03b4b13125827685b1e4af","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"# init_nb_db() - Create all the tables in northbound database"},{"line_number":247,"context_line":"function init_nb_db {"},{"line_number":248,"context_line":"    df-db init"},{"line_number":249,"context_line":"}"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# start_df() - Start running processes, including screen"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bab6814e_ea392b43","line":248,"updated":"2016-05-18 06:25:17.000000000","message":"What if the tables already created and not deleted?\n\nDo we also need to make sure to remove them on unstack ?\n(For example for ramcloud i see there is a call for drop table before it is created)","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"4925fd378247156f9661ebcef523a336fbe46c78","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"# init_nb_db() - Create all the tables in northbound database"},{"line_number":247,"context_line":"function init_nb_db {"},{"line_number":248,"context_line":"    df-db init"},{"line_number":249,"context_line":"}"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# start_df() - Start running processes, including screen"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bab6814e_974ec3bf","line":248,"in_reply_to":"bab6814e_971a4316","updated":"2016-05-18 07:25:43.000000000","message":"But its not deleting the tables, its only deleting all the keys inside of them which is different then \"creating a table\", maybe just document that the create method might be called when the table is already created.\n\nAlso for the RAMCloud driver we need to call drop first as suggested by the code","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"caca171aa748c9c1f715571e3b682bb457426dcf","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"# init_nb_db() - Create all the tables in northbound database"},{"line_number":247,"context_line":"function init_nb_db {"},{"line_number":248,"context_line":"    df-db init"},{"line_number":249,"context_line":"}"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# start_df() - Start running processes, including screen"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bab6814e_10577903","line":248,"in_reply_to":"bab6814e_974ec3bf","updated":"2016-05-18 08:07:56.000000000","message":"Yes. I will add a delete_table interface in db-api.","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"f0b0539c317ba032766c8d9fcc12866d22b52fd8","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"# init_nb_db() - Create all the tables in northbound database"},{"line_number":247,"context_line":"function init_nb_db {"},{"line_number":248,"context_line":"    df-db init"},{"line_number":249,"context_line":"}"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# start_df() - Start running processes, including screen"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bab6814e_971a4316","line":248,"in_reply_to":"bab6814e_ea392b43","updated":"2016-05-18 07:18:11.000000000","message":"we call \u0027df-db clean\u0027 in unstack. it is implemented.","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"4b42c2c389dfbc6b6e03b4b13125827685b1e4af","unresolved":false,"context_lines":[{"line_number":252,"context_line":"function start_df {"},{"line_number":253,"context_line":"    echo \"Starting Dragonflow\""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    init_nb_db"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    if is_service_enabled df-controller ; then"},{"line_number":258,"context_line":"        sudo ovs-vsctl --no-wait set-controller br-int tcp:$HOST_IP:6633"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bab6814e_8a205ff9","line":255,"updated":"2016-05-18 06:25:17.000000000","message":"This needs to happen before Neutron plugin is up, the plugin might start adding entries (and i think its up before this function is called)","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"f0b0539c317ba032766c8d9fcc12866d22b52fd8","unresolved":false,"context_lines":[{"line_number":252,"context_line":"function start_df {"},{"line_number":253,"context_line":"    echo \"Starting Dragonflow\""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    init_nb_db"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    if is_service_enabled df-controller ; then"},{"line_number":258,"context_line":"        sudo ovs-vsctl --no-wait set-controller br-int tcp:$HOST_IP:6633"}],"source_content_type":"text/x-sh","patch_set":4,"id":"bab6814e_d7d20b34","line":255,"in_reply_to":"bab6814e_8a205ff9","updated":"2016-05-18 07:18:11.000000000","message":"Done","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3f7223d7321be46912828a2c850adf8915297081","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        # phase runs ovs-vsctl."},{"line_number":338,"context_line":"        nb_db_driver_start_server"},{"line_number":339,"context_line":"        # initialize the nb db"},{"line_number":340,"context_line":"        init_nb_db"},{"line_number":341,"context_line":"        start_ovs"},{"line_number":342,"context_line":"        disable_libvirt_apparmor"},{"line_number":343,"context_line":"    elif [[ \"$1\" \u003d\u003d \"stack\" \u0026\u0026 \"$2\" \u003d\u003d \"post-config\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":7,"id":"bab6814e_9d20924b","line":340,"updated":"2016-05-18 12:37:58.000000000","message":"I think this should be called after \u0027configure_df_plugin\u0027, since the database connection info is set in the configuration files there, and df-db relies on it.","commit_id":"7fd9659f96ebf2955f8e8fc2f08601803948cf96"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"08f4e69f63df8f4480ab038f466aae16ab8d2fed","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        # phase runs ovs-vsctl."},{"line_number":338,"context_line":"        nb_db_driver_start_server"},{"line_number":339,"context_line":"        # initialize the nb db"},{"line_number":340,"context_line":"        init_nb_db"},{"line_number":341,"context_line":"        start_ovs"},{"line_number":342,"context_line":"        disable_libvirt_apparmor"},{"line_number":343,"context_line":"    elif [[ \"$1\" \u003d\u003d \"stack\" \u0026\u0026 \"$2\" \u003d\u003d \"post-config\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":7,"id":"bab6814e_58cab8a2","line":340,"in_reply_to":"bab6814e_9d20924b","updated":"2016-05-18 12:40:36.000000000","message":"Thanks.","commit_id":"7fd9659f96ebf2955f8e8fc2f08601803948cf96"}],"devstack/ramcloud_driver":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8763fb4e9b5368d73fd30a877af04d4b6018a3be","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        $RAMCLOUD_BIN/server -L ${RAMCLOUD_TRANSPORT}:host\u003d${RAMCLOUD_MASTER_IP},port\u003d${RAMCLOUD_MASTER_PORT} -C ${RAMCLOUD_TRANSPORT}:host\u003d${RAMCLOUD_COORDINATOR_IP},port\u003d${RAMCLOUD_COORDINATOR_PORT} 2\u0026\u003e /dev/null || true \u0026"},{"line_number":82,"context_line":"        echo \"Sleep for 20 secs. Giving time for db to start working!!!\""},{"line_number":83,"context_line":"        sleep 20"},{"line_number":84,"context_line":"        echo \"CREATING RAMCLOUD TABLES...\""},{"line_number":85,"context_line":"        export PYTHONPATH\u003d$PYTHONPATH:$DEST/dragonflow/"},{"line_number":86,"context_line":"    fi"},{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"dab17558_ad3858ef","line":85,"range":{"start_line":84,"start_character":8,"end_line":85,"end_character":55},"updated":"2016-05-16 07:00:00.000000000","message":"We do not need this lines if we create the tables later in start_df\n\nRamcloud is in memory with no persistency in case of restart of the master cluster we need to recreate the tables \nI think we need a script to recreate the table and populate the Data from the SQL server(I will add BUG for that)","commit_id":"7095978e87fd2205d9aabdc40e38a3a1b2b9b5cc"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ad0d8afe5ca4b6c71fc7cb17802c7abcafd99bd4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        $RAMCLOUD_BIN/server -L ${RAMCLOUD_TRANSPORT}:host\u003d${RAMCLOUD_MASTER_IP},port\u003d${RAMCLOUD_MASTER_PORT} -C ${RAMCLOUD_TRANSPORT}:host\u003d${RAMCLOUD_COORDINATOR_IP},port\u003d${RAMCLOUD_COORDINATOR_PORT} 2\u0026\u003e /dev/null || true \u0026"},{"line_number":82,"context_line":"        echo \"Sleep for 20 secs. Giving time for db to start working!!!\""},{"line_number":83,"context_line":"        sleep 20"},{"line_number":84,"context_line":"        echo \"CREATING RAMCLOUD TABLES...\""},{"line_number":85,"context_line":"        export PYTHONPATH\u003d$PYTHONPATH:$DEST/dragonflow/"},{"line_number":86,"context_line":"    fi"},{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"dab17558_b9a25afa","line":85,"range":{"start_line":84,"start_character":8,"end_line":85,"end_character":55},"in_reply_to":"dab17558_ad3858ef","updated":"2016-05-16 08:19:58.000000000","message":"OK. I will remove these lines.","commit_id":"7095978e87fd2205d9aabdc40e38a3a1b2b9b5cc"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"4b42c2c389dfbc6b6e03b4b13125827685b1e4af","unresolved":false,"context_lines":[{"line_number":17,"context_line":"RAMCLOUD_MASTER_PORT\u003d${RAMCLOUD_MASTER_PORT:-\u002721221\u0027}"},{"line_number":18,"context_line":"RAMCLOUD_COORDINATOR_PORT\u003d${RAMCLOUD_COORDINATOR_PORT:-\u002721222\u0027}"},{"line_number":19,"context_line":"RAMCLOUD_TRANSPORT\u003d${RAMCLOUD_TRANSPORT:-\u0027fast+udp\u0027}"},{"line_number":20,"context_line":"RAMCLOUD_TABLE_NAMES\u003d${RAMCLOUD_TABLE_NAMES:-\u0027secgroup\u0027,\u0027dragonflow\u0027,\u0027chassis\u0027,\u0027lswitch\u0027,\u0027lport\u0027,\u0027lrouter\u0027,\u0027tunnel_key\u0027}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"LIB_BOOST_MAJOR_VERSION\u003d1"},{"line_number":23,"context_line":"LIB_BOOST_MINOR_VERSION\u003d54"}],"source_content_type":"application/x-shellscript","patch_set":4,"id":"bab6814e_6aaa5b72","line":20,"updated":"2016-05-18 06:25:17.000000000","message":"this can be removed","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"f0b0539c317ba032766c8d9fcc12866d22b52fd8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"RAMCLOUD_MASTER_PORT\u003d${RAMCLOUD_MASTER_PORT:-\u002721221\u0027}"},{"line_number":18,"context_line":"RAMCLOUD_COORDINATOR_PORT\u003d${RAMCLOUD_COORDINATOR_PORT:-\u002721222\u0027}"},{"line_number":19,"context_line":"RAMCLOUD_TRANSPORT\u003d${RAMCLOUD_TRANSPORT:-\u0027fast+udp\u0027}"},{"line_number":20,"context_line":"RAMCLOUD_TABLE_NAMES\u003d${RAMCLOUD_TABLE_NAMES:-\u0027secgroup\u0027,\u0027dragonflow\u0027,\u0027chassis\u0027,\u0027lswitch\u0027,\u0027lport\u0027,\u0027lrouter\u0027,\u0027tunnel_key\u0027}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"LIB_BOOST_MAJOR_VERSION\u003d1"},{"line_number":23,"context_line":"LIB_BOOST_MINOR_VERSION\u003d54"}],"source_content_type":"application/x-shellscript","patch_set":4,"id":"bab6814e_17abf38a","line":20,"in_reply_to":"bab6814e_6aaa5b72","updated":"2016-05-18 07:18:11.000000000","message":"Done","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"}],"dragonflow/cli/df_db.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"681599a66fc87aa18fd37b4e243fcb5916e6579d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # The db api doesn\u0027t provide table creation api,"},{"line_number":115,"context_line":"        # So we first create a dummy key and then delete it,"},{"line_number":116,"context_line":"        # in order to simulate a table creation action."},{"line_number":117,"context_line":"        db_driver.create_key(table, \u0027dummy\u0027, \u00270\u0027)"},{"line_number":118,"context_line":"        db_driver.delete_key(table, \u0027dummy\u0027)"},{"line_number":119,"context_line":"    except df_exceptions.DBKeyNotFound:"},{"line_number":120,"context_line":"        print(\u0027Table not found: \u0027 + table)"},{"line_number":121,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_462414c4","line":118,"range":{"start_line":117,"start_character":8,"end_line":118,"end_character":44},"updated":"2016-05-10 15:21:37.000000000","message":"I am not sure that this will work with all the drivers \n\nI think it will be best to define an Explicit create_table API and add it to the DB driver interface, what do you think?\n\nRAMCLoud need the same functionality actually each time the RAMCloud cluster is restated","commit_id":"bc5d0562dbf07efaadf6d6c2afd6a41f9cccc2f9"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"fa0014f05d84695f33548765c14c13025cbb3f8d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # The db api doesn\u0027t provide table creation api,"},{"line_number":115,"context_line":"        # So we first create a dummy key and then delete it,"},{"line_number":116,"context_line":"        # in order to simulate a table creation action."},{"line_number":117,"context_line":"        db_driver.create_key(table, \u0027dummy\u0027, \u00270\u0027)"},{"line_number":118,"context_line":"        db_driver.delete_key(table, \u0027dummy\u0027)"},{"line_number":119,"context_line":"    except df_exceptions.DBKeyNotFound:"},{"line_number":120,"context_line":"        print(\u0027Table not found: \u0027 + table)"},{"line_number":121,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_2870a4db","line":118,"range":{"start_line":117,"start_character":8,"end_line":118,"end_character":44},"in_reply_to":"dab17558_462414c4","updated":"2016-05-11 01:11:03.000000000","message":"That sounds reasonable. I\u0027ll provide a patch soon.","commit_id":"bc5d0562dbf07efaadf6d6c2afd6a41f9cccc2f9"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"f9aee7ef2f5926800c77961988b89547484a7270","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        return"},{"line_number":107,"context_line":"    for key in keys:"},{"line_number":108,"context_line":"        db_driver.delete_key(table, key)"},{"line_number":109,"context_line":"    db_driver.delete_table(table)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def create_table(db_driver, table):"}],"source_content_type":"text/x-python","patch_set":8,"id":"bab6814e_94731980","line":109,"updated":"2016-05-19 08:48:26.000000000","message":"I am sorry for re-commenting, but i think that the \u0027clean\u0027 command should just delete the keys, otherwise if the user want to clean a table he doesnt mean to delete the table it self (especially since we dont have create command)\n\nI think the correct behavior should be to call this delete on unstack (opposite to create)\n\nBut open for other opinions","commit_id":"be503d9163c7a251bec97f738275bdd3c5d2b5fb"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"32d7be0550c8ff3a8387ed5f10955c6fa0549f2c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            \"5) df-db clean - clean up all keys\\n\" \\"},{"line_number":36,"context_line":"            \"6) df-db rm \u003ctable name\u003e \u003ckey\u003e - remove the specified db record\\n\" \\"},{"line_number":37,"context_line":"            \"7) df-db init - initialize all tables\\n\" \\"},{"line_number":38,"context_line":"            \"8) df-db dropall - draop all tables\\n\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def print_tables():"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_ceaead97","line":38,"updated":"2016-05-19 10:10:22.000000000","message":"draop\u003ddrop","commit_id":"13ee8ce946d1f867b3c5aef0cd2710d8aea058e1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"32d7be0550c8ff3a8387ed5f10955c6fa0549f2c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        db_driver.delete_table(table)"},{"line_number":115,"context_line":"    except df_exceptions.DBKeyNotFound:"},{"line_number":116,"context_line":"        print(\u0027Table not found: \u0027 + table)"},{"line_number":117,"context_line":"        return"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def create_table(db_driver, table):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_4e9bdd72","line":117,"updated":"2016-05-19 10:10:22.000000000","message":"not needed","commit_id":"13ee8ce946d1f867b3c5aef0cd2710d8aea058e1"}],"dragonflow/db/db_api.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"39222facf8d2052650e9b5ee1f41c7a605ab5650","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        :param table:      table name"},{"line_number":49,"context_line":"        :type table:       string"},{"line_number":50,"context_line":"        :param topic:      topic for key"},{"line_number":51,"context_line":"        :type topic:       string"},{"line_number":52,"context_line":"        :returns:          None"},{"line_number":53,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_444ef06f","line":50,"updated":"2016-05-15 19:07:06.000000000","message":"Why is topic parameter needed here? Isn\u0027t topic a per-row attribute?","commit_id":"bde6a1267c6518ef3fdcb87fd3559c103a7447bb"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"8026dcc0b98fca6fb9580ca0c80b86139456e33e","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        :param table:      table name"},{"line_number":49,"context_line":"        :type table:       string"},{"line_number":50,"context_line":"        :param topic:      topic for key"},{"line_number":51,"context_line":"        :type topic:       string"},{"line_number":52,"context_line":"        :returns:          None"},{"line_number":53,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_8a0c5fed","line":50,"in_reply_to":"dab17558_444ef06f","updated":"2016-05-16 00:44:15.000000000","message":"Ahh, yes, I will remove it. I didn\u0027t notice this parameter.","commit_id":"bde6a1267c6518ef3fdcb87fd3559c103a7447bb"}],"dragonflow/db/drivers/etcd_db_driver.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"4b42c2c389dfbc6b6e03b4b13125827685b1e4af","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        return True"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create_table(self, table):"},{"line_number":106,"context_line":"        # Need not to implement in etcd"},{"line_number":107,"context_line":"        pass"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def get_key(self, table, key, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_2a6a131b","line":106,"updated":"2016-05-18 06:25:17.000000000","message":"# Not needed in etcd","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"f0b0539c317ba032766c8d9fcc12866d22b52fd8","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        return True"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create_table(self, table):"},{"line_number":106,"context_line":"        # Need not to implement in etcd"},{"line_number":107,"context_line":"        pass"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def get_key(self, table, key, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_c57898fb","line":106,"in_reply_to":"bab6814e_2a6a131b","updated":"2016-05-18 07:18:11.000000000","message":"Done","commit_id":"a5aa1aec933c72f01e3b0a93449ee95a79e3488c"}]}
