)]}'
{"devstack/lib/zun":[{"author":{"_account_id":12297,"name":"duhu","email":"xuxiaojun3@huawei.com","username":"xxj"},"change_message_id":"fe0317b1dc23cf114b0a1596650e0d92da51f5d7","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    if [ $(sudo docker ps -a | awk \u0027{print $NF}\u0027 | grep -w etcd) ]; then"},{"line_number":275,"context_line":"\t    sudo docker rm -f etcd"},{"line_number":276,"context_line":"    fi"},{"line_number":277,"context_line":"    sudo docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 \\"},{"line_number":278,"context_line":"\t            --name etcd quay.io/coreos/etcd:${ETCD_VERSION} \\"},{"line_number":279,"context_line":"\t            -name etcd0 \\"},{"line_number":280,"context_line":"\t            -advertise-client-urls http://${ETCD_HOST}:2379,http://${ETCD_HOST}:4001 \\"}],"source_content_type":"application/x-shellscript","patch_set":20,"id":"fa6399be_f82b6692","line":277,"updated":"2016-10-12 12:07:48.000000000","message":"As you know, there is an option which is \"--restart\u003dalways\". If set it, when docker daemon restart, the container will start up immediately after the docker daemon. If not set it, the container must be manually started up which is the default behavior. Sugguest to add it.","commit_id":"62df778289237c137199322aef3dd9894010f6b4"}],"zun/conf/database.py":[{"author":{"_account_id":12407,"name":"Shubham Kumar Sharma","email":"shubham.git@gmail.com","username":"shubham.git"},"change_message_id":"9d9016c6d98483f1bcd3729cc7c5c6b580876a61","unresolved":false,"context_lines":[{"line_number":20,"context_line":"               default\u003d\u0027sql\u0027,"},{"line_number":21,"context_line":"               help\u003d\"\"\"Defines which db type to use for storing container."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Possible Values: sql, etcd"},{"line_number":24,"context_line":"\"\"\")"},{"line_number":25,"context_line":"]"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_ef783c92","line":23,"updated":"2016-11-07 13:55:44.000000000","message":"nit : I think this text needs indentation.","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":20,"context_line":"               default\u003d\u0027sql\u0027,"},{"line_number":21,"context_line":"               help\u003d\"\"\"Defines which db type to use for storing container."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Possible Values: sql, etcd"},{"line_number":24,"context_line":"\"\"\")"},{"line_number":25,"context_line":"]"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_0b562429","line":23,"in_reply_to":"9a629dbe_ef783c92","updated":"2016-11-08 06:00:01.000000000","message":"Done","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":30,"context_line":"               help\u003d\u0027MySQL engine to use.\u0027)"},{"line_number":31,"context_line":"]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"etcd_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027etcd_host\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"},{"line_number":36,"context_line":"               help\u003d\"Host IP address on which etcd service running.\"),"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_2926af68","line":33,"updated":"2016-11-07 15:07:14.000000000","message":"i think its better to move etcd_opts and etcd_group in different file, what do you think?","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":30,"context_line":"               help\u003d\u0027MySQL engine to use.\u0027)"},{"line_number":31,"context_line":"]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"etcd_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027etcd_host\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"},{"line_number":36,"context_line":"               help\u003d\"Host IP address on which etcd service running.\"),"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_6bfec06c","line":33,"in_reply_to":"9a629dbe_2926af68","updated":"2016-11-08 06:00:01.000000000","message":"Since we use etcd as a db backend in Zun, IMO we should treat etcd the same as other db backend.","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":12407,"name":"Shubham Kumar Sharma","email":"shubham.git@gmail.com","username":"shubham.git"},"change_message_id":"9d9016c6d98483f1bcd3729cc7c5c6b580876a61","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                help\u003d\"Port on which etcd listen client request.\")"},{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"etcd_group \u003d cfg.OptGroup(name\u003d\u0027etcd\u0027, title\u003d\u0027Optioins for etcd connection\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"ALL_OPTS \u003d (db_opts + sql_opts + etcd_opts)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_f4c011e3","line":42,"range":{"start_line":42,"start_character":46,"end_line":42,"end_character":54},"updated":"2016-11-07 13:55:44.000000000","message":"nit : s/Optioins/options ?","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                help\u003d\"Port on which etcd listen client request.\")"},{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"etcd_group \u003d cfg.OptGroup(name\u003d\u0027etcd\u0027, title\u003d\u0027Optioins for etcd connection\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"ALL_OPTS \u003d (db_opts + sql_opts + etcd_opts)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_eb581059","line":42,"range":{"start_line":42,"start_character":46,"end_line":42,"end_character":54},"in_reply_to":"9a629dbe_f4c011e3","updated":"2016-11-08 06:00:01.000000000","message":"Done","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"}],"zun/db/api.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"dec0459b3261b58c9fbd3620c8f024736dc650fc","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"\"\"\"Add the database backend mapping here\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"db_opts \u003d ["},{"line_number":27,"context_line":"    # TODO(yuywz): Change to etcd after all etcd db driver code is landed"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027db_type\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027sql\u0027,"},{"line_number":30,"context_line":"               help\u003d\"\"\"Defines which db type to use for storing container."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Possible Values: sql, etcd"},{"line_number":33,"context_line":"\"\"\")"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"CONF.register_opts(db_opts)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"_BACKEND_MAPPING \u003d {\u0027sqlalchemy\u0027: \u0027zun.db.sqlalchemy.api\u0027}"},{"line_number":40,"context_line":"IMPL \u003d db_api.DBAPI.from_config(cfg.CONF, backend_mapping\u003d_BACKEND_MAPPING,"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_362b6832","line":37,"range":{"start_line":26,"start_character":0,"end_line":37,"end_character":27},"updated":"2016-10-21 08:27:53.000000000","message":"I would like to say that we need to move this to https://github.com/openstack/zun/tree/master/zun/conf\nfor centralize config.","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"7f7fc2054374263e2e5bef9411f19dccf9499677","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"\"\"\"Add the database backend mapping here\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"db_opts \u003d ["},{"line_number":27,"context_line":"    # TODO(yuywz): Change to etcd after all etcd db driver code is landed"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027db_type\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027sql\u0027,"},{"line_number":30,"context_line":"               help\u003d\"\"\"Defines which db type to use for storing container."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Possible Values: sql, etcd"},{"line_number":33,"context_line":"\"\"\")"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"CONF.register_opts(db_opts)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"_BACKEND_MAPPING \u003d {\u0027sqlalchemy\u0027: \u0027zun.db.sqlalchemy.api\u0027}"},{"line_number":40,"context_line":"IMPL \u003d db_api.DBAPI.from_config(cfg.CONF, backend_mapping\u003d_BACKEND_MAPPING,"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_c7378fae","line":37,"range":{"start_line":26,"start_character":0,"end_line":37,"end_character":27},"in_reply_to":"da6895a0_362b6832","updated":"2016-10-25 06:56:08.000000000","message":"ACK, will centralize all the database config opts in another patch.","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"dec0459b3261b58c9fbd3620c8f024736dc650fc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        import zun.db.etcd.api as etcd_api"},{"line_number":50,"context_line":"        return etcd_api.get_connection()"},{"line_number":51,"context_line":"    else:"},{"line_number":52,"context_line":"        raise Exception()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_b61778ec","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":25},"updated":"2016-10-21 08:27:53.000000000","message":"Can we make this exception message more detail?","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"7f7fc2054374263e2e5bef9411f19dccf9499677","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        import zun.db.etcd.api as etcd_api"},{"line_number":50,"context_line":"        return etcd_api.get_connection()"},{"line_number":51,"context_line":"    else:"},{"line_number":52,"context_line":"        raise Exception()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_e761f3a9","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":25},"in_reply_to":"da6895a0_b61778ec","updated":"2016-10-25 06:56:08.000000000","message":"Done","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"939cc918dbc24ce94980091deb6d7163f6a49456","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def destroy_container(self, context, container_id):"},{"line_number":144,"context_line":"        \"\"\"Destroy a container and all associated interfaces."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        dbdriver \u003d get_instance()"},{"line_number":149,"context_line":"        return dbdriver.destroy_container(context, container_id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da6895a0_7dd4931f","line":146,"updated":"2016-10-25 08:06:09.000000000","message":"can we add context in param here?","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def destroy_container(self, context, container_id):"},{"line_number":144,"context_line":"        \"\"\"Destroy a container and all associated interfaces."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        dbdriver \u003d get_instance()"},{"line_number":149,"context_line":"        return dbdriver.destroy_container(context, container_id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_5ac53f59","line":146,"in_reply_to":"da6895a0_7dd4931f","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"939cc918dbc24ce94980091deb6d7163f6a49456","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def update_container(self, context, container_id, values):"},{"line_number":153,"context_line":"        \"\"\"Update properties of a container."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":156,"context_line":"        :returns: A container."},{"line_number":157,"context_line":"        :raises: ContainerNotFound"},{"line_number":158,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"da6895a0_9dd7a722","line":155,"updated":"2016-10-25 08:06:09.000000000","message":"ditto","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def update_container(self, context, container_id, values):"},{"line_number":153,"context_line":"        \"\"\"Update properties of a container."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":156,"context_line":"        :returns: A container."},{"line_number":157,"context_line":"        :raises: ContainerNotFound"},{"line_number":158,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_9aa517b7","line":155,"in_reply_to":"da6895a0_9dd7a722","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"939cc918dbc24ce94980091deb6d7163f6a49456","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        \"\"\"Update properties of a container."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":156,"context_line":"        :returns: A container."},{"line_number":157,"context_line":"        :raises: ContainerNotFound"},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        dbdriver \u003d get_instance()"}],"source_content_type":"text/x-python","patch_set":30,"id":"da6895a0_bdde2b3d","line":156,"updated":"2016-10-25 08:06:09.000000000","message":"ditto","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        \"\"\"Update properties of a container."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":156,"context_line":"        :returns: A container."},{"line_number":157,"context_line":"        :raises: ContainerNotFound"},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        dbdriver \u003d get_instance()"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_baaadb83","line":156,"in_reply_to":"da6895a0_bdde2b3d","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def get_instance():"},{"line_number":36,"context_line":"    \"\"\"Return a DB API instance.\"\"\""},{"line_number":37,"context_line":"    if zun.conf.CONF.db_type \u003d\u003d \u0027sql\u0027:"},{"line_number":38,"context_line":"        return IMPL"},{"line_number":39,"context_line":"    elif zun.conf.CONF.db_type \u003d\u003d \u0027etcd\u0027:"},{"line_number":40,"context_line":"        import zun.db.etcd.api as etcd_api"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_097e4be4","line":37,"updated":"2016-11-07 15:07:14.000000000","message":"isn\u0027t it better to initialise CONF \u003d zun.conf.CONF at start. and then use CONF, that way less typing?","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def get_instance():"},{"line_number":36,"context_line":"    \"\"\"Return a DB API instance.\"\"\""},{"line_number":37,"context_line":"    if zun.conf.CONF.db_type \u003d\u003d \u0027sql\u0027:"},{"line_number":38,"context_line":"        return IMPL"},{"line_number":39,"context_line":"    elif zun.conf.CONF.db_type \u003d\u003d \u0027etcd\u0027:"},{"line_number":40,"context_line":"        import zun.db.etcd.api as etcd_api"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_eb06501f","line":37,"in_reply_to":"9a629dbe_097e4be4","updated":"2016-11-08 06:00:01.000000000","message":"Done","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        import zun.db.etcd.api as etcd_api"},{"line_number":41,"context_line":"        return etcd_api.get_connection()"},{"line_number":42,"context_line":"    else:"},{"line_number":43,"context_line":"        raise exception.ConfigInvalid("},{"line_number":44,"context_line":"            _(\"db_type value of %s is invalid, \""},{"line_number":45,"context_line":"              \"must be sql or etcd\") % zun.conf.CONF.db_type)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_0cd57942","line":43,"updated":"2016-11-07 15:07:14.000000000","message":"i think we can rename the exception to InvalidConfig and inherit that from Invalid exception? any thoughts?","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def update_container(self, context, container_id, values):"},{"line_number":142,"context_line":"        \"\"\"Update properties of a container."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :context: Request context"},{"line_number":145,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":146,"context_line":"        :values: The properties to be updated"},{"line_number":147,"context_line":"        :returns: A container."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_6c4b552c","line":144,"updated":"2016-11-07 15:07:14.000000000","message":"can we add param here?","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def update_container(self, context, container_id, values):"},{"line_number":142,"context_line":"        \"\"\"Update properties of a container."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :context: Request context"},{"line_number":145,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":146,"context_line":"        :values: The properties to be updated"},{"line_number":147,"context_line":"        :returns: A container."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_ab0c5843","line":144,"in_reply_to":"9a629dbe_6c4b552c","updated":"2016-11-08 06:00:01.000000000","message":"Done","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :context: Request context"},{"line_number":145,"context_line":"        :param container_id: The id or uuid of a container."},{"line_number":146,"context_line":"        :values: The properties to be updated"},{"line_number":147,"context_line":"        :returns: A container."},{"line_number":148,"context_line":"        :raises: ContainerNotFound"},{"line_number":149,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_ac556dc7","line":146,"updated":"2016-11-07 15:07:14.000000000","message":"ditto","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"}],"zun/db/etcd/api.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"42e82409fef4c403387b1be0e0aaae243ecd870d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        raise"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class EtcdAPI(object):"},{"line_number":67,"context_line":"    \"\"\"etcd API.\"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_316ae8ed","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":20},"updated":"2016-09-02 14:56:06.000000000","message":"how about inheriting from base.Connection, like sqlalchemy.","commit_id":"d5fe1da32899abe5cfc257d5c48e15691d0b13de"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"dec0459b3261b58c9fbd3620c8f024736dc650fc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from zun.db import api as dbapi"},{"line_number":29,"context_line":"from zun.db.etcd import models"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"etcd_opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027etcd_host\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"},{"line_number":34,"context_line":"               help\u003d\"Host IP address on which etcd service running.\"),"},{"line_number":35,"context_line":"    cfg.PortOpt(\u0027etcd_port\u0027,"},{"line_number":36,"context_line":"                default\u003d2379,"},{"line_number":37,"context_line":"                help\u003d\"Port on which etcd listen client request.\")"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"etcd_group \u003d cfg.OptGroup("},{"line_number":41,"context_line":"    name\u003d\u0027etcd\u0027, title\u003d\u0027Options for etcd connection\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_f6d73021","line":38,"range":{"start_line":31,"start_character":0,"end_line":38,"end_character":1},"updated":"2016-10-21 08:27:53.000000000","message":"ditto for centralize config","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"7f7fc2054374263e2e5bef9411f19dccf9499677","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from zun.db import api as dbapi"},{"line_number":29,"context_line":"from zun.db.etcd import models"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"etcd_opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027etcd_host\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"},{"line_number":34,"context_line":"               help\u003d\"Host IP address on which etcd service running.\"),"},{"line_number":35,"context_line":"    cfg.PortOpt(\u0027etcd_port\u0027,"},{"line_number":36,"context_line":"                default\u003d2379,"},{"line_number":37,"context_line":"                help\u003d\"Port on which etcd listen client request.\")"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"etcd_group \u003d cfg.OptGroup("},{"line_number":41,"context_line":"    name\u003d\u0027etcd\u0027, title\u003d\u0027Options for etcd connection\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_474c5f42","line":38,"range":{"start_line":31,"start_character":0,"end_line":38,"end_character":1},"in_reply_to":"da6895a0_f6d73021","updated":"2016-10-25 06:56:08.000000000","message":"ACK, will centralize all the database config opts in another patch.","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"dec0459b3261b58c9fbd3620c8f024736dc650fc","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def get_connection():"},{"line_number":49,"context_line":"    connection \u003d EtcdAPI()"},{"line_number":50,"context_line":"    connection.initialize(host\u003dCONF.etcd.etcd_host,"},{"line_number":51,"context_line":"                          port\u003dCONF.etcd.etcd_port)"},{"line_number":52,"context_line":"    return connection"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_56ce1c84","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":26},"updated":"2016-10-21 08:27:53.000000000","message":"This could be a global variable right? I mean we don\u0027t need to create many connections","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"7f7fc2054374263e2e5bef9411f19dccf9499677","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def get_connection():"},{"line_number":49,"context_line":"    connection \u003d EtcdAPI()"},{"line_number":50,"context_line":"    connection.initialize(host\u003dCONF.etcd.etcd_host,"},{"line_number":51,"context_line":"                          port\u003dCONF.etcd.etcd_port)"},{"line_number":52,"context_line":"    return connection"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_c75eafe8","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":26},"in_reply_to":"da6895a0_56ce1c84","updated":"2016-10-25 06:56:08.000000000","message":"Done, good point!","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"dec0459b3261b58c9fbd3620c8f024736dc650fc","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        return translate_etcd_result(target)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def destroy_zun_service(self, zun_service_id):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def update_zun_service(self, zun_service_id, values):"},{"line_number":252,"context_line":"        pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_zun_service_by_host_and_binary(self, context, host, binary):"},{"line_number":255,"context_line":"        pass"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def create_zun_service(self, values):"},{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def get_zun_service_list(self, context, disabled\u003dNone, limit\u003dNone,"},{"line_number":261,"context_line":"                             marker\u003dNone, sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":262,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_b69cd86a","line":262,"range":{"start_line":248,"start_character":0,"end_line":262,"end_character":12},"updated":"2016-10-21 08:27:53.000000000","message":"Plan to support them later ? If that please leave TODO tag","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"7f7fc2054374263e2e5bef9411f19dccf9499677","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        return translate_etcd_result(target)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def destroy_zun_service(self, zun_service_id):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def update_zun_service(self, zun_service_id, values):"},{"line_number":252,"context_line":"        pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_zun_service_by_host_and_binary(self, context, host, binary):"},{"line_number":255,"context_line":"        pass"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def create_zun_service(self, values):"},{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def get_zun_service_list(self, context, disabled\u003dNone, limit\u003dNone,"},{"line_number":261,"context_line":"                             marker\u003dNone, sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":262,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":29,"id":"da6895a0_a751bbda","line":262,"range":{"start_line":248,"start_character":0,"end_line":262,"end_character":12},"in_reply_to":"da6895a0_b69cd86a","updated":"2016-10-25 06:56:08.000000000","message":"Done","commit_id":"22e031339889628a14a28c31953eec7628cb8fe3"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"def translate_etcd_result(etcd_result):"},{"line_number":78,"context_line":"    \"\"\"Translate etcd unicode result to etcd.models.Container.\"\"\""},{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        container_data \u003d ast.literal_eval(etcd_result.value)"},{"line_number":81,"context_line":"        return models.Container(container_data)"},{"line_number":82,"context_line":"    except Exception:"},{"line_number":83,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_20698ef9","line":80,"range":{"start_line":80,"start_character":29,"end_line":80,"end_character":41},"updated":"2016-11-03 14:32:51.000000000","message":"I wonder if the value is of json format. If yes, using json.load is better.","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"def translate_etcd_result(etcd_result):"},{"line_number":78,"context_line":"    \"\"\"Translate etcd unicode result to etcd.models.Container.\"\"\""},{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        container_data \u003d ast.literal_eval(etcd_result.value)"},{"line_number":81,"context_line":"        return models.Container(container_data)"},{"line_number":82,"context_line":"    except Exception:"},{"line_number":83,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_bae65be6","line":80,"range":{"start_line":80,"start_character":29,"end_line":80,"end_character":41},"in_reply_to":"ba5da102_20698ef9","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"0be48f027c3c7869a075c997808a4a54df1e3ced","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        container_data \u003d ast.literal_eval(etcd_result.value)"},{"line_number":81,"context_line":"        return models.Container(container_data)"},{"line_number":82,"context_line":"    except Exception:"},{"line_number":83,"context_line":"        raise"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_354b672d","line":82,"range":{"start_line":82,"start_character":11,"end_line":82,"end_character":20},"updated":"2016-10-26 12:23:05.000000000","message":"We should log this exceptions for debugging.","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"939cc918dbc24ce94980091deb6d7163f6a49456","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        container_data \u003d ast.literal_eval(etcd_result.value)"},{"line_number":81,"context_line":"        return models.Container(container_data)"},{"line_number":82,"context_line":"    except Exception:"},{"line_number":83,"context_line":"        raise"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da6895a0_fd96e34a","line":82,"updated":"2016-10-25 08:06:09.000000000","message":"is it correct to catch the generic exception or we dont know the exact exception? Any thoughts?","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        container_data \u003d ast.literal_eval(etcd_result.value)"},{"line_number":81,"context_line":"        return models.Container(container_data)"},{"line_number":82,"context_line":"    except Exception:"},{"line_number":83,"context_line":"        raise"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_b5082c2a","line":82,"range":{"start_line":82,"start_character":11,"end_line":82,"end_character":20},"in_reply_to":"ba5da102_354b672d","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        container_data \u003d ast.literal_eval(etcd_result.value)"},{"line_number":81,"context_line":"        return models.Container(container_data)"},{"line_number":82,"context_line":"    except Exception:"},{"line_number":83,"context_line":"        raise"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_d50da038","line":82,"in_reply_to":"da6895a0_fd96e34a","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"0be48f027c3c7869a075c997808a4a54df1e3ced","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            for d in self.client.read(\u0027/\u0027).children:"},{"line_number":96,"context_line":"                if d.key in (\u0027/containers\u0027,):"},{"line_number":97,"context_line":"                    self.client.delete(d.key, recursive\u003dTrue)"},{"line_number":98,"context_line":"        except Exception:"},{"line_number":99,"context_line":"            raise"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _add_tenant_filters(self, context, filters):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_5548db2d","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":24},"updated":"2016-10-26 12:23:05.000000000","message":"ditto","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            for d in self.client.read(\u0027/\u0027).children:"},{"line_number":96,"context_line":"                if d.key in (\u0027/containers\u0027,):"},{"line_number":97,"context_line":"                    self.client.delete(d.key, recursive\u003dTrue)"},{"line_number":98,"context_line":"        except Exception:"},{"line_number":99,"context_line":"            raise"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _add_tenant_filters(self, context, filters):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_1510f84d","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":24},"in_reply_to":"ba5da102_5548db2d","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        for c in list(containers):"},{"line_number":115,"context_line":"            for k, v in six.iteritems(filters):"},{"line_number":116,"context_line":"                if c.get(k) !\u003d v:"},{"line_number":117,"context_line":"                    containers.remove(c)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        return containers"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_6070e6a4","line":117,"updated":"2016-11-03 14:32:51.000000000","message":"It seems you need a \"break\" to break out the filter loop earlier.","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        for c in list(containers):"},{"line_number":115,"context_line":"            for k, v in six.iteritems(filters):"},{"line_number":116,"context_line":"                if c.get(k) !\u003d v:"},{"line_number":117,"context_line":"                    containers.remove(c)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        return containers"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_75e85417","line":117,"in_reply_to":"ba5da102_6070e6a4","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                       marker\u003dNone, sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":136,"context_line":"        try:"},{"line_number":137,"context_line":"            res \u003d getattr(self.client.read(\u0027/containers\u0027), \u0027children\u0027, None)"},{"line_number":138,"context_line":"        except Exception:"},{"line_number":139,"context_line":"            raise"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        containers \u003d []"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_6028e633","line":138,"updated":"2016-11-03 14:32:51.000000000","message":"I guess you want to log something before raise?","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                       marker\u003dNone, sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":136,"context_line":"        try:"},{"line_number":137,"context_line":"            res \u003d getattr(self.client.read(\u0027/containers\u0027), \u0027children\u0027, None)"},{"line_number":138,"context_line":"        except Exception:"},{"line_number":139,"context_line":"            raise"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        containers \u003d []"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_b5f2ec04","line":138,"in_reply_to":"ba5da102_6028e633","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            res \u003d self.client.read(\u0027/containers/\u0027 + container_uuid)"},{"line_number":180,"context_line":"            container \u003d translate_etcd_result(res)"},{"line_number":181,"context_line":"            if container.get(\u0027project_id\u0027) \u003d\u003d context.project_id or\\"},{"line_number":182,"context_line":"                    container.get(\u0027user_id\u0027) \u003d\u003d context.user_id:"},{"line_number":183,"context_line":"                        return container"},{"line_number":184,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_80425aac","line":181,"range":{"start_line":181,"start_character":67,"end_line":181,"end_character":68},"updated":"2016-11-03 14:32:51.000000000","message":"nit: space before \u0027\\\u0027","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            res \u003d self.client.read(\u0027/containers/\u0027 + container_uuid)"},{"line_number":180,"context_line":"            container \u003d translate_etcd_result(res)"},{"line_number":181,"context_line":"            if container.get(\u0027project_id\u0027) \u003d\u003d context.project_id or\\"},{"line_number":182,"context_line":"                    container.get(\u0027user_id\u0027) \u003d\u003d context.user_id:"},{"line_number":183,"context_line":"                        return container"},{"line_number":184,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_f5f8e4c6","line":181,"range":{"start_line":181,"start_character":67,"end_line":181,"end_character":68},"in_reply_to":"ba5da102_80425aac","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            res \u003d self.client.read(\u0027/containers/\u0027 + container_uuid)"},{"line_number":180,"context_line":"            container \u003d translate_etcd_result(res)"},{"line_number":181,"context_line":"            if container.get(\u0027project_id\u0027) \u003d\u003d context.project_id or\\"},{"line_number":182,"context_line":"                    container.get(\u0027user_id\u0027) \u003d\u003d context.user_id:"},{"line_number":183,"context_line":"                        return container"},{"line_number":184,"context_line":"            else:"},{"line_number":185,"context_line":"                raise exception.ContainerNotFound(container\u003dcontainer_uuid)"},{"line_number":186,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_400be27c","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":40},"updated":"2016-11-03 14:32:51.000000000","message":"The indentation seems wrong.","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            res \u003d self.client.read(\u0027/containers/\u0027 + container_uuid)"},{"line_number":180,"context_line":"            container \u003d translate_etcd_result(res)"},{"line_number":181,"context_line":"            if container.get(\u0027project_id\u0027) \u003d\u003d context.project_id or\\"},{"line_number":182,"context_line":"                    container.get(\u0027user_id\u0027) \u003d\u003d context.user_id:"},{"line_number":183,"context_line":"                        return container"},{"line_number":184,"context_line":"            else:"},{"line_number":185,"context_line":"                raise exception.ContainerNotFound(container\u003dcontainer_uuid)"},{"line_number":186,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_15f638d7","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":40},"in_reply_to":"ba5da102_400be27c","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            target_uuid \u003d self._get_container_by_ident("},{"line_number":234,"context_line":"                context, container_ident).uuid"},{"line_number":235,"context_line":"            target \u003d self.client.read(\u0027/containers/\u0027 + target_uuid)"},{"line_number":236,"context_line":"            target_value \u003d ast.literal_eval(target.value)"},{"line_number":237,"context_line":"            target_value.update(values)"},{"line_number":238,"context_line":"            target.value \u003d json.dumps(target_value)"},{"line_number":239,"context_line":"            self.client.update(target)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_fb0747c7","line":236,"range":{"start_line":236,"start_character":31,"end_line":236,"end_character":43},"updated":"2016-11-03 14:32:51.000000000","message":"ditto. How about using json.load","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            target_uuid \u003d self._get_container_by_ident("},{"line_number":234,"context_line":"                context, container_ident).uuid"},{"line_number":235,"context_line":"            target \u003d self.client.read(\u0027/containers/\u0027 + target_uuid)"},{"line_number":236,"context_line":"            target_value \u003d ast.literal_eval(target.value)"},{"line_number":237,"context_line":"            target_value.update(values)"},{"line_number":238,"context_line":"            target.value \u003d json.dumps(target_value)"},{"line_number":239,"context_line":"            self.client.update(target)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_351a5c18","line":236,"range":{"start_line":236,"start_character":31,"end_line":236,"end_character":43},"in_reply_to":"ba5da102_fb0747c7","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        container_data \u003d json.loads(etcd_result.value)"},{"line_number":69,"context_line":"        return models.Container(container_data)"},{"line_number":70,"context_line":"    except (ValueError, TypeError) as e:"},{"line_number":71,"context_line":"        LOG.error(_LE(\"Error occured while tranlating etcd result: %s\"),"},{"line_number":72,"context_line":"                  six.text_type(e))"},{"line_number":73,"context_line":"        raise"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_2c995d6f","line":71,"updated":"2016-11-07 15:07:14.000000000","message":"s/tranlating/translating/\ns/occured/occurred/","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        container_data \u003d json.loads(etcd_result.value)"},{"line_number":69,"context_line":"        return models.Container(container_data)"},{"line_number":70,"context_line":"    except (ValueError, TypeError) as e:"},{"line_number":71,"context_line":"        LOG.error(_LE(\"Error occured while tranlating etcd result: %s\"),"},{"line_number":72,"context_line":"                  six.text_type(e))"},{"line_number":73,"context_line":"        raise"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_c66503e2","line":71,"in_reply_to":"9a629dbe_2c995d6f","updated":"2016-11-08 06:00:01.000000000","message":"Done","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            filters \u003d self._add_tenant_filters("},{"line_number":162,"context_line":"                context, {\u0027id\u0027: container_id})"},{"line_number":163,"context_line":"            containers \u003d self.list_container(context, filters\u003dfilters)"},{"line_number":164,"context_line":"        except Exception:"},{"line_number":165,"context_line":"            raise exception.ContainerNotFound(container\u003dcontainer_id)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        if len(containers) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_4f468324","line":164,"updated":"2016-11-07 15:07:14.000000000","message":"i think its better to handle etcd.EtcdKeyNotFound  first and then generic exception, otherwise returning 404 in case of other error is not good. What do you think?","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            filters \u003d self._add_tenant_filters("},{"line_number":162,"context_line":"                context, {\u0027id\u0027: container_id})"},{"line_number":163,"context_line":"            containers \u003d self.list_container(context, filters\u003dfilters)"},{"line_number":164,"context_line":"        except Exception:"},{"line_number":165,"context_line":"            raise exception.ContainerNotFound(container\u003dcontainer_id)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        if len(containers) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_c6c18382","line":164,"in_reply_to":"9a629dbe_4f468324","updated":"2016-11-08 06:00:01.000000000","message":"Done, good point.","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                return container"},{"line_number":179,"context_line":"            else:"},{"line_number":180,"context_line":"                raise exception.ContainerNotFound(container\u003dcontainer_uuid)"},{"line_number":181,"context_line":"        except Exception:"},{"line_number":182,"context_line":"            raise exception.ContainerNotFound(container\u003dcontainer_uuid)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def get_container_by_name(self, context, container_name):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_cf00d3ad","line":181,"updated":"2016-11-07 15:07:14.000000000","message":"ditto","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                return container"},{"line_number":179,"context_line":"            else:"},{"line_number":180,"context_line":"                raise exception.ContainerNotFound(container\u003dcontainer_uuid)"},{"line_number":181,"context_line":"        except Exception:"},{"line_number":182,"context_line":"            raise exception.ContainerNotFound(container\u003dcontainer_uuid)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def get_container_by_name(self, context, container_name):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_e6be87fe","line":181,"in_reply_to":"9a629dbe_cf00d3ad","updated":"2016-11-08 06:00:01.000000000","message":"Done","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"fdbd3dcc8c5fdc899df1fd93803c888f30b5ec07","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            filters \u003d self._add_tenant_filters("},{"line_number":187,"context_line":"                context, {\u0027name\u0027: container_name})"},{"line_number":188,"context_line":"            containers \u003d self.list_container(context, filters\u003dfilters)"},{"line_number":189,"context_line":"        except Exception:"},{"line_number":190,"context_line":"            raise exception.ContainerNotFound(container\u003dcontainer_name)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        if len(containers) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_0f31eba2","line":189,"updated":"2016-11-07 15:07:14.000000000","message":"ditto","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"e007baa791218a24b85abbb26cf7f7cc1a30b492","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            filters \u003d self._add_tenant_filters("},{"line_number":187,"context_line":"                context, {\u0027name\u0027: container_name})"},{"line_number":188,"context_line":"            containers \u003d self.list_container(context, filters\u003dfilters)"},{"line_number":189,"context_line":"        except Exception:"},{"line_number":190,"context_line":"            raise exception.ContainerNotFound(container\u003dcontainer_name)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        if len(containers) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_06bc5b04","line":189,"in_reply_to":"9a629dbe_0f31eba2","updated":"2016-11-08 06:00:01.000000000","message":"Done","commit_id":"65c0e0a35e5230051dbd560c4ba3ea638db1a1f7"}],"zun/db/etcd/models.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    _path \u003d \u0027/zun_service\u0027"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    _fields \u003d [\u0027id\u0027, \u0027host\u0027, \u0027binary\u0027, \u0027disabled\u0027,"},{"line_number":72,"context_line":"               \u0027disabled_reason\u0027, \u0027last_seen_up\u0027,"},{"line_number":73,"context_line":"               \u0027forced_down\u0027, \u0027report_count\u0027]"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_fb2d87fe","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":11},"updated":"2016-11-03 14:32:51.000000000","message":"I think it is better to consolidate these fields into one place (shared by sqlalchemy and etcd). Otherwise, adding/removing fields need to be populated in each db drivers, which is not DRY.","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    _path \u003d \u0027/zun_service\u0027"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    _fields \u003d [\u0027id\u0027, \u0027host\u0027, \u0027binary\u0027, \u0027disabled\u0027,"},{"line_number":72,"context_line":"               \u0027disabled_reason\u0027, \u0027last_seen_up\u0027,"},{"line_number":73,"context_line":"               \u0027forced_down\u0027, \u0027report_count\u0027]"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_4d1ae86f","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":11},"in_reply_to":"ba5da102_fb2d87fe","updated":"2016-11-07 05:55:25.000000000","message":"Done, since we don\u0027t need to specify a column data type for etcd like sqlalchemy does. We can just use the fields defined in \u0027zun.objects.Container\u0027.","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"daf4cb46349c318d58cd3b905c2845cfc9fff70a","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    _path \u003d \u0027/containers\u0027"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    _fields \u003d [\u0027id\u0027, \u0027project_id\u0027, \u0027user_id\u0027, \u0027uuid\u0027,"},{"line_number":96,"context_line":"               \u0027container_id\u0027, \u0027name\u0027, \u0027image\u0027, \u0027cpu\u0027,"},{"line_number":97,"context_line":"               \u0027command\u0027, \u0027memory\u0027, \u0027status\u0027, \u0027task_state\u0027,"},{"line_number":98,"context_line":"               \u0027environment\u0027, \u0027workdir\u0027, \u0027ports\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_9b3d6b2d","line":95,"range":{"start_line":95,"start_character":4,"end_line":95,"end_character":11},"updated":"2016-11-03 14:32:51.000000000","message":"Ditto. Better to consolidate fields in one place.","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"216632a066c090595572f00c8979e95a027aef7e","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    _path \u003d \u0027/containers\u0027"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    _fields \u003d [\u0027id\u0027, \u0027project_id\u0027, \u0027user_id\u0027, \u0027uuid\u0027,"},{"line_number":96,"context_line":"               \u0027container_id\u0027, \u0027name\u0027, \u0027image\u0027, \u0027cpu\u0027,"},{"line_number":97,"context_line":"               \u0027command\u0027, \u0027memory\u0027, \u0027status\u0027, \u0027task_state\u0027,"},{"line_number":98,"context_line":"               \u0027environment\u0027, \u0027workdir\u0027, \u0027ports\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5da102_6d4c0c77","line":95,"range":{"start_line":95,"start_character":4,"end_line":95,"end_character":11},"in_reply_to":"ba5da102_9b3d6b2d","updated":"2016-11-07 05:55:25.000000000","message":"Done","commit_id":"95d7417d84a50584e7567038ad1dc72273b68ad3"}]}
