)]}'
{"devstack/settings":[{"author":{"_account_id":12297,"name":"duhu","email":"xuxiaojun3@huawei.com","username":"xxj"},"change_message_id":"36a5b365982c9312566380f8eebfe9c5378b3083","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# PHYSICAL_NETWORK\u003dpublic"},{"line_number":16,"context_line":"# OVS_PHYSICAL_BRIDGE\u003dbr-ex"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Enable Neutron which is required by Magnum and disable nova-network."},{"line_number":19,"context_line":"disable_service n-net"},{"line_number":20,"context_line":"enable_service q-svc"},{"line_number":21,"context_line":"enable_service q-agt"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"fa6399be_d4685b8a","line":18,"updated":"2016-10-18 09:43:31.000000000","message":"Is \"Magnum\" here is a typo? It should be \"Zun\", right?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# PHYSICAL_NETWORK\u003dpublic"},{"line_number":16,"context_line":"# OVS_PHYSICAL_BRIDGE\u003dbr-ex"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Enable Neutron which is required by Magnum and disable nova-network."},{"line_number":19,"context_line":"disable_service n-net"},{"line_number":20,"context_line":"enable_service q-svc"},{"line_number":21,"context_line":"enable_service q-agt"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"ba5da102_bbcd8c5f","line":18,"in_reply_to":"fa6399be_d4685b8a","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"9169cee1068d2a88247b09be97320eb33f2c01bd","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# PHYSICAL_NETWORK\u003dpublic"},{"line_number":16,"context_line":"# OVS_PHYSICAL_BRIDGE\u003dbr-ex"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Enable Neutron which is required by Magnum and disable nova-network."},{"line_number":19,"context_line":"disable_service n-net"},{"line_number":20,"context_line":"enable_service q-svc"},{"line_number":21,"context_line":"enable_service q-agt"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"fa6399be_f8dc5f76","line":18,"in_reply_to":"fa6399be_d4685b8a","updated":"2016-10-18 14:58:43.000000000","message":"Thanks for pointing it out. Will fix it in the next patchset.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"}],"zun/api/controllers/v1/containers.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        containers \u003d []"},{"line_number":260,"context_line":"        for c in rpc_containers:"},{"line_number":261,"context_line":"            container \u003d Container.convert_with_links(c, expand)"},{"line_number":262,"context_line":"            container.addresses \u003d self._get_container_addresses(c)"},{"line_number":263,"context_line":"            containers.append(container)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        collection \u003d ContainerCollection()"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_873a3bcc","line":262,"range":{"start_line":262,"start_character":12,"end_line":262,"end_character":66},"updated":"2016-10-27 05:32:21.000000000","message":"Why do we have to get addresses explicitly? Isn\u0027t it set in container object?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        containers \u003d []"},{"line_number":260,"context_line":"        for c in rpc_containers:"},{"line_number":261,"context_line":"            container \u003d Container.convert_with_links(c, expand)"},{"line_number":262,"context_line":"            container.addresses \u003d self._get_container_addresses(c)"},{"line_number":263,"context_line":"            containers.append(container)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        collection \u003d ContainerCollection()"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_dbda4017","line":262,"range":{"start_line":262,"start_character":12,"end_line":262,"end_character":66},"in_reply_to":"ba5da102_873a3bcc","updated":"2016-11-05 18:21:15.000000000","message":"will fix it later","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":12297,"name":"duhu","email":"xuxiaojun3@huawei.com","username":"xxj"},"change_message_id":"36a5b365982c9312566380f8eebfe9c5378b3083","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        context \u003d pecan.request.context"},{"line_number":451,"context_line":"        pecan.request.rpcapi.container_kill(context,"},{"line_number":452,"context_line":"                                            container, kw.get(\u0027signal\u0027, None))"},{"line_number":453,"context_line":"        return Container.convert_with_links(container)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def _build_show_response(self, rpc_container):"},{"line_number":456,"context_line":"        container \u003d Container.convert_with_links(rpc_container)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_54a9abde","line":453,"updated":"2016-10-18 09:43:31.000000000","message":"I think this line should also be changed to\n \nreturn self._build_show_response(container)","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        context \u003d pecan.request.context"},{"line_number":451,"context_line":"        pecan.request.rpcapi.container_kill(context,"},{"line_number":452,"context_line":"                                            container, kw.get(\u0027signal\u0027, None))"},{"line_number":453,"context_line":"        return Container.convert_with_links(container)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def _build_show_response(self, rpc_container):"},{"line_number":456,"context_line":"        container \u003d Container.convert_with_links(rpc_container)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_1b03d877","line":453,"in_reply_to":"fa6399be_54a9abde","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"9169cee1068d2a88247b09be97320eb33f2c01bd","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        context \u003d pecan.request.context"},{"line_number":451,"context_line":"        pecan.request.rpcapi.container_kill(context,"},{"line_number":452,"context_line":"                                            container, kw.get(\u0027signal\u0027, None))"},{"line_number":453,"context_line":"        return Container.convert_with_links(container)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def _build_show_response(self, rpc_container):"},{"line_number":456,"context_line":"        container \u003d Container.convert_with_links(rpc_container)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_58e46b3a","line":453,"in_reply_to":"fa6399be_54a9abde","updated":"2016-10-18 14:58:43.000000000","message":"Good point. Will fix it.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"}],"zun/common/nova.py":[{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5af55b1dbeba5855f033e1ece665898754cbfdb2","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \"\"\"Get an image by name or ID.\"\"\""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            return self.client().glance.find_image(image_ident)"},{"line_number":90,"context_line":"        except (exceptions.NotFound, exceptions.NoUniqueMatch) as e:"},{"line_number":91,"context_line":"            raise exception.ImageNotFound(six.text_type(e))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_flavor_by_name_or_id(self, flavor_ident):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_151e380c","line":90,"updated":"2016-10-28 05:35:29.000000000","message":"Is it correct to return 404 when there is no unique match, isn\u0027t  returning conflict correct for that case?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"0e43830298f1ca54fc69164d9a79105bce81febe","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \"\"\"Get an image by name or ID.\"\"\""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            return self.client().glance.find_image(image_ident)"},{"line_number":90,"context_line":"        except (exceptions.NotFound, exceptions.NoUniqueMatch) as e:"},{"line_number":91,"context_line":"            raise exception.ImageNotFound(six.text_type(e))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_flavor_by_name_or_id(self, flavor_ident):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_27de926d","line":90,"in_reply_to":"ba5da102_151e380c","updated":"2016-10-31 05:35:58.000000000","message":"+1","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \"\"\"Get an image by name or ID.\"\"\""},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            return self.client().glance.find_image(image_ident)"},{"line_number":90,"context_line":"        except (exceptions.NotFound, exceptions.NoUniqueMatch) as e:"},{"line_number":91,"context_line":"            raise exception.ImageNotFound(six.text_type(e))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_flavor_by_name_or_id(self, flavor_ident):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_5bfd506d","line":90,"in_reply_to":"ba5da102_151e380c","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"}],"zun/common/utils.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    \"\"\"Retrieves object until it passes condition, then returns it."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    If time_out_limit is passed in, PollTimeOut will be raised once that"},{"line_number":141,"context_line":"    amount of time is eclipsed."},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":"    start_time \u003d time.time()"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_e748575e","line":141,"range":{"start_line":141,"start_character":22,"end_line":141,"end_character":30},"updated":"2016-10-27 05:32:21.000000000","message":"s/eclipsed/elapsed/","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    \"\"\"Retrieves object until it passes condition, then returns it."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    If time_out_limit is passed in, PollTimeOut will be raised once that"},{"line_number":141,"context_line":"    amount of time is eclipsed."},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":"    start_time \u003d time.time()"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_7b021471","line":141,"range":{"start_line":141,"start_character":22,"end_line":141,"end_character":30},"in_reply_to":"ba5da102_e748575e","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"}],"zun/compute/manager.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c4577ee604cd0d95378061d7d850d0ddc9e1164c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            name \u003d self._get_sandbox_name(container)"},{"line_number":73,"context_line":"            sandbox \u003d self.driver.create_sandbox(context, name)"},{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), six.text_type(e))"},{"line_number":76,"context_line":"            self._fail_container(container)"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.driver.set_sandbox_id(container, sandbox.id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_902f9e87","line":76,"range":{"start_line":75,"start_character":0,"end_line":76,"end_character":43},"updated":"2016-10-19 06:49:36.000000000","message":"To be honest, this fail is not enough, we need to record as much as detail fail reason to container object for further debugging.\n\nIt\u0027s okay to go with this patch, file a bug to track this.\nhttps://bugs.launchpad.net/zun/+bug/1634760","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            name \u003d self._get_sandbox_name(container)"},{"line_number":73,"context_line":"            sandbox \u003d self.driver.create_sandbox(context, name)"},{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), six.text_type(e))"},{"line_number":76,"context_line":"            self._fail_container(container)"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.driver.set_sandbox_id(container, sandbox.id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_bbf4ac87","line":76,"range":{"start_line":75,"start_character":0,"end_line":76,"end_character":43},"in_reply_to":"ba5da102_27796f94","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            name \u003d self._get_sandbox_name(container)"},{"line_number":73,"context_line":"            sandbox \u003d self.driver.create_sandbox(context, name)"},{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), six.text_type(e))"},{"line_number":76,"context_line":"            self._fail_container(container)"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.driver.set_sandbox_id(container, sandbox.id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_27796f94","line":76,"range":{"start_line":75,"start_character":0,"end_line":76,"end_character":43},"in_reply_to":"fa6399be_902f9e87","updated":"2016-10-27 05:32:21.000000000","message":"Agree. It\u0027s not good to handle naked exceptions.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), six.text_type(e))"},{"line_number":76,"context_line":"            self._fail_container(container)"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.driver.set_sandbox_id(container, sandbox.id)"},{"line_number":80,"context_line":"        container.task_state \u003d fields.TaskState.IMAGE_PULLING"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_677367b2","line":77,"range":{"start_line":77,"start_character":12,"end_line":77,"end_character":18},"updated":"2016-10-27 05:32:21.000000000","message":"We should reraise the exception here. Just \u0027return\u0027 statement will hide the error.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), six.text_type(e))"},{"line_number":76,"context_line":"            self._fail_container(container)"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.driver.set_sandbox_id(container, sandbox.id)"},{"line_number":80,"context_line":"        container.task_state \u003d fields.TaskState.IMAGE_PULLING"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_db4880cf","line":77,"range":{"start_line":77,"start_character":12,"end_line":77,"end_character":18},"in_reply_to":"ba5da102_677367b2","updated":"2016-11-05 18:21:15.000000000","message":"This method is executed in a thread, so we should not raise uncatch exception in a thread. I set the exception to \u0027status_reason\u0027 instead.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            try:"},{"line_number":132,"context_line":"                self.driver.delete_sandbox(context, sandbox_id)"},{"line_number":133,"context_line":"            except Exception as e:"},{"line_number":134,"context_line":"                LOG.exception(_LE(\"Unexpected exception: %s\"), str(e))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        return container"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_c76273d8","line":133,"range":{"start_line":133,"start_character":12,"end_line":133,"end_character":33},"updated":"2016-10-27 05:32:21.000000000","message":"raise is missing.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            try:"},{"line_number":132,"context_line":"                self.driver.delete_sandbox(context, sandbox_id)"},{"line_number":133,"context_line":"            except Exception as e:"},{"line_number":134,"context_line":"                LOG.exception(_LE(\"Unexpected exception: %s\"), str(e))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        return container"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_fb4544b3","line":133,"range":{"start_line":133,"start_character":12,"end_line":133,"end_character":33},"in_reply_to":"ba5da102_c76273d8","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), str(e))"},{"line_number":309,"context_line":"            raise e"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _get_sandbox_name(self, container):"},{"line_number":312,"context_line":"        return container.name"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _get_container_name(self, sandbox):"},{"line_number":315,"context_line":"        return \u0027nova-\u0027 + sandbox.id"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_477ca372","line":315,"range":{"start_line":311,"start_character":0,"end_line":315,"end_character":35},"updated":"2016-10-27 05:32:21.000000000","message":"Hongbin, I think the method _get_sandbox_name should return the name with \u0027nova-\u0027 as this sandbox will be created by nova.\nAnd the method _get_container_name should return the actual container name that is provided by users.\n\nAlso I think the sandbox name should be unique. What do you think?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), str(e))"},{"line_number":309,"context_line":"            raise e"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _get_sandbox_name(self, container):"},{"line_number":312,"context_line":"        return container.name"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _get_container_name(self, sandbox):"},{"line_number":315,"context_line":"        return \u0027nova-\u0027 + sandbox.id"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_bb690c28","line":315,"range":{"start_line":311,"start_character":0,"end_line":315,"end_character":35},"in_reply_to":"ba5da102_477ca372","updated":"2016-11-05 18:21:15.000000000","message":"_get_sandbox_name will return the name of the nova instance (showed in \"nova list\"), so I think it is more clear to prefix it with \"zun-\".\n\n_get_container_name will return the name of the sandbox container (showed in \"docker ps\"), so I think it is more clear to prefix it with \"nova-\". That is because this container is actually created by Nova.\n\nHowever, I renamed the method name to make everything clear. Hope there is less confusion now.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5af55b1dbeba5855f033e1ece665898754cbfdb2","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            LOG.exception(_LE(\"Unexpected exception: %s\"), str(e))"},{"line_number":309,"context_line":"            raise e"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _get_sandbox_name(self, container):"},{"line_number":312,"context_line":"        return container.name"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _get_container_name(self, sandbox):"},{"line_number":315,"context_line":"        return \u0027nova-\u0027 + sandbox.id"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_950a48d1","line":315,"range":{"start_line":311,"start_character":0,"end_line":315,"end_character":35},"in_reply_to":"ba5da102_477ca372","updated":"2016-10-28 05:35:29.000000000","message":"agree with madhuri!","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"}],"zun/container/docker/driver.py":[{"author":{"_account_id":12297,"name":"duhu","email":"xuxiaojun3@huawei.com","username":"xxj"},"change_message_id":"36a5b365982c9312566380f8eebfe9c5378b3083","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"opts \u003d ["},{"line_number":34,"context_line":"    cfg.IntOpt(\u0027default_sleep_time\u0027, default\u003d1,"},{"line_number":35,"context_line":"               help\u003d\u0027Time to sleep during the check for an active instance.\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027default_timeout\u0027, default\u003d60 * 10,"},{"line_number":37,"context_line":"               help\u003d\u0027Maximum time (in seconds) to wait for an instance to \u0027"},{"line_number":38,"context_line":"                    \u0027become active.\u0027),"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_f65484cb","line":35,"updated":"2016-10-18 09:43:31.000000000","message":"Tell what\u0027s the time unit will be friedly.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"opts \u003d ["},{"line_number":34,"context_line":"    cfg.IntOpt(\u0027default_sleep_time\u0027, default\u003d1,"},{"line_number":35,"context_line":"               help\u003d\u0027Time to sleep during the check for an active instance.\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027default_timeout\u0027, default\u003d60 * 10,"},{"line_number":37,"context_line":"               help\u003d\u0027Maximum time (in seconds) to wait for an instance to \u0027"},{"line_number":38,"context_line":"                    \u0027become active.\u0027),"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_1bc67816","line":35,"in_reply_to":"fa6399be_f65484cb","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"9169cee1068d2a88247b09be97320eb33f2c01bd","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"opts \u003d ["},{"line_number":34,"context_line":"    cfg.IntOpt(\u0027default_sleep_time\u0027, default\u003d1,"},{"line_number":35,"context_line":"               help\u003d\u0027Time to sleep during the check for an active instance.\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027default_timeout\u0027, default\u003d60 * 10,"},{"line_number":37,"context_line":"               help\u003d\u0027Maximum time (in seconds) to wait for an instance to \u0027"},{"line_number":38,"context_line":"                    \u0027become active.\u0027),"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_983b639c","line":35,"in_reply_to":"fa6399be_f65484cb","updated":"2016-10-18 14:58:43.000000000","message":"Sure. Will do that.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c4577ee604cd0d95378061d7d850d0ddc9e1164c","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def create_sandbox(self, context, name, key_name\u003dNone, flavor\u003d\u0027m1.small\u0027,"},{"line_number":208,"context_line":"                       image\u003d\u0027kubernetes/pause\u0027, nics\u003d\u0027auto\u0027):"},{"line_number":209,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":210,"context_line":"        server \u003d self.nova.create_server(name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":211,"context_line":"                                         key_name\u003dkey_name, nics\u003dnics)"},{"line_number":212,"context_line":"        self._ensure_active(server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_d0067684","line":209,"range":{"start_line":209,"start_character":8,"end_line":209,"end_character":44},"updated":"2016-10-19 06:49:36.000000000","message":"hmm... do you need to set nova client as a member of Driver client?\n\nI feel all the clients should be get in zun manager instead of driver class.\n\nOr , would that nova driver(maybe sandbox) docker driver specify?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def create_sandbox(self, context, name, key_name\u003dNone, flavor\u003d\u0027m1.small\u0027,"},{"line_number":208,"context_line":"                       image\u003d\u0027kubernetes/pause\u0027, nics\u003d\u0027auto\u0027):"},{"line_number":209,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":210,"context_line":"        server \u003d self.nova.create_server(name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":211,"context_line":"                                         key_name\u003dkey_name, nics\u003dnics)"},{"line_number":212,"context_line":"        self._ensure_active(server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_3bcb3c20","line":209,"range":{"start_line":209,"start_character":8,"end_line":209,"end_character":44},"in_reply_to":"fa6399be_5ed33e38","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ac92e414440e0d79bf2aa1eca83ce6f3392a01dc","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def create_sandbox(self, context, name, key_name\u003dNone, flavor\u003d\u0027m1.small\u0027,"},{"line_number":208,"context_line":"                       image\u003d\u0027kubernetes/pause\u0027, nics\u003d\u0027auto\u0027):"},{"line_number":209,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":210,"context_line":"        server \u003d self.nova.create_server(name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":211,"context_line":"                                         key_name\u003dkey_name, nics\u003dnics)"},{"line_number":212,"context_line":"        self._ensure_active(server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_5ed33e38","line":209,"range":{"start_line":209,"start_character":8,"end_line":209,"end_character":44},"in_reply_to":"fa6399be_d0067684","updated":"2016-10-19 15:45:17.000000000","message":"It seems I don\u0027t have to set it as instance variable. Will address it in the next patchset.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c4577ee604cd0d95378061d7d850d0ddc9e1164c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def create_sandbox(self, context, name, key_name\u003dNone, flavor\u003d\u0027m1.small\u0027,"},{"line_number":208,"context_line":"                       image\u003d\u0027kubernetes/pause\u0027, nics\u003d\u0027auto\u0027):"},{"line_number":209,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":210,"context_line":"        server \u003d self.nova.create_server(name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":211,"context_line":"                                         key_name\u003dkey_name, nics\u003dnics)"},{"line_number":212,"context_line":"        self._ensure_active(server)"},{"line_number":213,"context_line":"        return server"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_10f62ef9","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":14},"updated":"2016-10-19 06:49:36.000000000","message":"how about naming it as sandbox as your function name is \"create_sandbox\"","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def create_sandbox(self, context, name, key_name\u003dNone, flavor\u003d\u0027m1.small\u0027,"},{"line_number":208,"context_line":"                       image\u003d\u0027kubernetes/pause\u0027, nics\u003d\u0027auto\u0027):"},{"line_number":209,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":210,"context_line":"        server \u003d self.nova.create_server(name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":211,"context_line":"                                         key_name\u003dkey_name, nics\u003dnics)"},{"line_number":212,"context_line":"        self._ensure_active(server)"},{"line_number":213,"context_line":"        return server"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_5bd0f0c9","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":14},"in_reply_to":"ba5da102_8796bb92","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def create_sandbox(self, context, name, key_name\u003dNone, flavor\u003d\u0027m1.small\u0027,"},{"line_number":208,"context_line":"                       image\u003d\u0027kubernetes/pause\u0027, nics\u003d\u0027auto\u0027):"},{"line_number":209,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":210,"context_line":"        server \u003d self.nova.create_server(name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":211,"context_line":"                                         key_name\u003dkey_name, nics\u003dnics)"},{"line_number":212,"context_line":"        self._ensure_active(server)"},{"line_number":213,"context_line":"        return server"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_8796bb92","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":14},"in_reply_to":"fa6399be_10f62ef9","updated":"2016-10-27 05:32:21.000000000","message":"+1. Renaming it to sandbox is better. Afterall sandbox in Zun is Nova instance/server only.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ac92e414440e0d79bf2aa1eca83ce6f3392a01dc","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def create_sandbox(self, context, name, key_name\u003dNone, flavor\u003d\u0027m1.small\u0027,"},{"line_number":208,"context_line":"                       image\u003d\u0027kubernetes/pause\u0027, nics\u003d\u0027auto\u0027):"},{"line_number":209,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":210,"context_line":"        server \u003d self.nova.create_server(name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":211,"context_line":"                                         key_name\u003dkey_name, nics\u003dnics)"},{"line_number":212,"context_line":"        self._ensure_active(server)"},{"line_number":213,"context_line":"        return server"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_9e995671","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":14},"in_reply_to":"fa6399be_10f62ef9","updated":"2016-10-19 15:45:17.000000000","message":"I am not sure about that. Nova doesn\u0027t have the concept of sandbox. Rename it as nova.create_sandbox look a bit odd to me. Maybe rename it to create_instance?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5af55b1dbeba5855f033e1ece665898754cbfdb2","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self._ensure_active(server)"},{"line_number":213,"context_line":"        return server"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _ensure_active(self, server, timeout\u003d300):"},{"line_number":216,"context_line":"        \u0027\u0027\u0027Wait until the Nova instance to become active.\u0027\u0027\u0027"},{"line_number":217,"context_line":"        def _check_active():"},{"line_number":218,"context_line":"            return self.nova.check_active(server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_15947889","line":215,"updated":"2016-10-28 05:35:29.000000000","message":"is timeout parameter necessary, i think we are not using it, am i right?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"0e43830298f1ca54fc69164d9a79105bce81febe","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self._ensure_active(server)"},{"line_number":213,"context_line":"        return server"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _ensure_active(self, server, timeout\u003d300):"},{"line_number":216,"context_line":"        \u0027\u0027\u0027Wait until the Nova instance to become active.\u0027\u0027\u0027"},{"line_number":217,"context_line":"        def _check_active():"},{"line_number":218,"context_line":"            return self.nova.check_active(server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_598a8ac0","line":215,"in_reply_to":"ba5da102_15947889","updated":"2016-10-31 05:35:58.000000000","message":"should set time_out\u003dtimeout or CONF.default_timeout when calling utils.poll_util","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self._ensure_active(server)"},{"line_number":213,"context_line":"        return server"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def _ensure_active(self, server, timeout\u003d300):"},{"line_number":216,"context_line":"        \u0027\u0027\u0027Wait until the Nova instance to become active.\u0027\u0027\u0027"},{"line_number":217,"context_line":"        def _check_active():"},{"line_number":218,"context_line":"            return self.nova.check_active(server)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_bbd74cbe","line":215,"in_reply_to":"ba5da102_598a8ac0","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                             sleep_time\u003dCONF.default_sleep_time,"},{"line_number":223,"context_line":"                             time_out\u003dCONF.default_timeout)"},{"line_number":224,"context_line":"            LOG.info(_(\"Created server %s successfully.\") % server.id)"},{"line_number":225,"context_line":"        except exception.PollTimeOut:"},{"line_number":226,"context_line":"            LOG.error(_(\"Failed to create server %s. Timeout waiting for \""},{"line_number":227,"context_line":"                        \"server to become active.\") % server.id)"},{"line_number":228,"context_line":"        except Exception:"},{"line_number":229,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def delete_sandbox(self, context, id):"},{"line_number":232,"context_line":"        self.nova \u003d nova.NovaClient(context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_67f8c7e6","line":229,"range":{"start_line":225,"start_character":0,"end_line":229,"end_character":62},"updated":"2016-10-27 05:32:21.000000000","message":"Here we are suppressing the exceptions, so we will not know when our sandbox creation fails and we continue with creating container which is not desirable. Please raise these exceptions.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"0e43830298f1ca54fc69164d9a79105bce81febe","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                             sleep_time\u003dCONF.default_sleep_time,"},{"line_number":223,"context_line":"                             time_out\u003dCONF.default_timeout)"},{"line_number":224,"context_line":"            LOG.info(_(\"Created server %s successfully.\") % server.id)"},{"line_number":225,"context_line":"        except exception.PollTimeOut:"},{"line_number":226,"context_line":"            LOG.error(_(\"Failed to create server %s. Timeout waiting for \""},{"line_number":227,"context_line":"                        \"server to become active.\") % server.id)"},{"line_number":228,"context_line":"        except Exception:"},{"line_number":229,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def delete_sandbox(self, context, id):"},{"line_number":232,"context_line":"        self.nova \u003d nova.NovaClient(context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_999422e3","line":229,"range":{"start_line":225,"start_character":0,"end_line":229,"end_character":62},"in_reply_to":"ba5da102_67f8c7e6","updated":"2016-10-31 05:35:58.000000000","message":"+1","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5af55b1dbeba5855f033e1ece665898754cbfdb2","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                             sleep_time\u003dCONF.default_sleep_time,"},{"line_number":223,"context_line":"                             time_out\u003dCONF.default_timeout)"},{"line_number":224,"context_line":"            LOG.info(_(\"Created server %s successfully.\") % server.id)"},{"line_number":225,"context_line":"        except exception.PollTimeOut:"},{"line_number":226,"context_line":"            LOG.error(_(\"Failed to create server %s. Timeout waiting for \""},{"line_number":227,"context_line":"                        \"server to become active.\") % server.id)"},{"line_number":228,"context_line":"        except Exception:"},{"line_number":229,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def delete_sandbox(self, context, id):"},{"line_number":232,"context_line":"        self.nova \u003d nova.NovaClient(context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_558ef078","line":229,"range":{"start_line":225,"start_character":0,"end_line":229,"end_character":62},"in_reply_to":"ba5da102_67f8c7e6","updated":"2016-10-28 05:35:29.000000000","message":"+1 @madhuri","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                             sleep_time\u003dCONF.default_sleep_time,"},{"line_number":223,"context_line":"                             time_out\u003dCONF.default_timeout)"},{"line_number":224,"context_line":"            LOG.info(_(\"Created server %s successfully.\") % server.id)"},{"line_number":225,"context_line":"        except exception.PollTimeOut:"},{"line_number":226,"context_line":"            LOG.error(_(\"Failed to create server %s. Timeout waiting for \""},{"line_number":227,"context_line":"                        \"server to become active.\") % server.id)"},{"line_number":228,"context_line":"        except Exception:"},{"line_number":229,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def delete_sandbox(self, context, id):"},{"line_number":232,"context_line":"        self.nova \u003d nova.NovaClient(context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_1bed988e","line":229,"range":{"start_line":225,"start_character":0,"end_line":229,"end_character":62},"in_reply_to":"ba5da102_67f8c7e6","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c4577ee604cd0d95378061d7d850d0ddc9e1164c","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def delete_sandbox(self, context, id):"},{"line_number":232,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":233,"context_line":"        self.nova.delete_server(id)"},{"line_number":234,"context_line":"        self._ensure_deleted(id)"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_50f3469f","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":44},"updated":"2016-10-19 06:49:36.000000000","message":"You set nova client again here...","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"0e43830298f1ca54fc69164d9a79105bce81febe","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def delete_sandbox(self, context, id):"},{"line_number":232,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":233,"context_line":"        self.nova.delete_server(id)"},{"line_number":234,"context_line":"        self._ensure_deleted(id)"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_d995bae4","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":44},"in_reply_to":"fa6399be_50f3469f","updated":"2016-10-31 05:35:58.000000000","message":"+1","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def delete_sandbox(self, context, id):"},{"line_number":232,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":233,"context_line":"        self.nova.delete_server(id)"},{"line_number":234,"context_line":"        self._ensure_deleted(id)"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_3bf25c70","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":44},"in_reply_to":"fa6399be_50f3469f","updated":"2016-11-05 18:21:15.000000000","message":"Fixed it.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5af55b1dbeba5855f033e1ece665898754cbfdb2","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self.nova.delete_server(id)"},{"line_number":234,"context_line":"        self._ensure_deleted(id)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _ensure_deleted(self, server_id, timeout\u003d300):"},{"line_number":237,"context_line":"        \u0027\u0027\u0027Wait until the Nova instance to be deleted.\u0027\u0027\u0027"},{"line_number":238,"context_line":"        def _check_delete_complete():"},{"line_number":239,"context_line":"            return self.nova.check_delete_server_complete(server_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_15db987d","line":236,"updated":"2016-10-28 05:35:29.000000000","message":"is timeout param used ?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self.nova.delete_server(id)"},{"line_number":234,"context_line":"        self._ensure_deleted(id)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _ensure_deleted(self, server_id, timeout\u003d300):"},{"line_number":237,"context_line":"        \u0027\u0027\u0027Wait until the Nova instance to be deleted.\u0027\u0027\u0027"},{"line_number":238,"context_line":"        def _check_delete_complete():"},{"line_number":239,"context_line":"            return self.nova.check_delete_server_complete(server_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_9b01a83c","line":236,"in_reply_to":"ba5da102_15db987d","updated":"2016-11-05 18:21:15.000000000","message":"It is used now.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        def _check_delete_complete():"},{"line_number":239,"context_line":"            return self.nova.check_delete_server_complete(server_id)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        try:"},{"line_number":242,"context_line":"            utils.poll_until(_check_delete_complete,"},{"line_number":243,"context_line":"                             sleep_time\u003dCONF.default_sleep_time,"},{"line_number":244,"context_line":"                             time_out\u003dCONF.default_timeout)"},{"line_number":245,"context_line":"            LOG.info(_(\"Delete server %s successfully.\") % server_id)"},{"line_number":246,"context_line":"        except exception.PollTimeOut:"},{"line_number":247,"context_line":"            LOG.error(_(\"Failed to create server %s. Timeout waiting for \""},{"line_number":248,"context_line":"                        \"server to be deleted.\") % server_id)"},{"line_number":249,"context_line":"        except Exception:"},{"line_number":250,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def get_sandbox_id(self, container):"},{"line_number":253,"context_line":"        if container.meta:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_07d0eb52","line":250,"range":{"start_line":241,"start_character":0,"end_line":250,"end_character":62},"updated":"2016-10-27 05:32:21.000000000","message":"How about creating a method called something like \"wait_until\" in common/utils.py and pass our wait condition method?\n\nThis code is redundant.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        def _check_delete_complete():"},{"line_number":239,"context_line":"            return self.nova.check_delete_server_complete(server_id)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        try:"},{"line_number":242,"context_line":"            utils.poll_until(_check_delete_complete,"},{"line_number":243,"context_line":"                             sleep_time\u003dCONF.default_sleep_time,"},{"line_number":244,"context_line":"                             time_out\u003dCONF.default_timeout)"},{"line_number":245,"context_line":"            LOG.info(_(\"Delete server %s successfully.\") % server_id)"},{"line_number":246,"context_line":"        except exception.PollTimeOut:"},{"line_number":247,"context_line":"            LOG.error(_(\"Failed to create server %s. Timeout waiting for \""},{"line_number":248,"context_line":"                        \"server to be deleted.\") % server_id)"},{"line_number":249,"context_line":"        except Exception:"},{"line_number":250,"context_line":"            LOG.exception(_(\"Unexpected exception occurred.\"))"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def get_sandbox_id(self, container):"},{"line_number":253,"context_line":"        if container.meta:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_dbfb2046","line":250,"range":{"start_line":241,"start_character":0,"end_line":250,"end_character":62},"in_reply_to":"ba5da102_07d0eb52","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    def get_sandbox_id(self, container):"},{"line_number":253,"context_line":"        if container.meta:"},{"line_number":254,"context_line":"            return container.meta.get(\u0027sandbox_id\u0027, None)"},{"line_number":255,"context_line":"        else:"},{"line_number":256,"context_line":"            return None"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def set_sandbox_id(self, container, id):"},{"line_number":259,"context_line":"        if container.meta is None:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_47cae3a2","line":256,"range":{"start_line":255,"start_character":8,"end_line":256,"end_character":23},"updated":"2016-10-27 05:32:21.000000000","message":"None will be returned when \u0027sandbox_id\u0027 is not set. So we don\u0027t need if/else block here.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"0e43830298f1ca54fc69164d9a79105bce81febe","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    def get_sandbox_id(self, container):"},{"line_number":253,"context_line":"        if container.meta:"},{"line_number":254,"context_line":"            return container.meta.get(\u0027sandbox_id\u0027, None)"},{"line_number":255,"context_line":"        else:"},{"line_number":256,"context_line":"            return None"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def set_sandbox_id(self, container, id):"},{"line_number":259,"context_line":"        if container.meta is None:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_99fd023d","line":256,"range":{"start_line":255,"start_character":8,"end_line":256,"end_character":23},"in_reply_to":"ba5da102_47cae3a2","updated":"2016-10-31 05:35:58.000000000","message":"I think we need the if/else block to handle the case in which container.meta is None.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    def get_sandbox_id(self, container):"},{"line_number":253,"context_line":"        if container.meta:"},{"line_number":254,"context_line":"            return container.meta.get(\u0027sandbox_id\u0027, None)"},{"line_number":255,"context_line":"        else:"},{"line_number":256,"context_line":"            return None"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def set_sandbox_id(self, container, id):"},{"line_number":259,"context_line":"        if container.meta is None:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_7ba3f44f","line":256,"range":{"start_line":255,"start_character":8,"end_line":256,"end_character":23},"in_reply_to":"ba5da102_47cae3a2","updated":"2016-11-05 18:21:15.000000000","message":"Now, I need the else block to log a warning message.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            return None"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def set_sandbox_id(self, container, id):"},{"line_number":259,"context_line":"        if container.meta is None:"},{"line_number":260,"context_line":"            container.meta \u003d {}"},{"line_number":261,"context_line":"        container.meta[\u0027sandbox_id\u0027] \u003d id"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def get_addresses(self, context, container):"},{"line_number":264,"context_line":"        self.nova \u003d nova.NovaClient(context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_87c4fb92","line":261,"range":{"start_line":259,"start_character":1,"end_line":261,"end_character":41},"updated":"2016-10-27 05:32:21.000000000","message":"How about this?\n\ncontainer.meta \u003d {\u0027sandbox_id\u0027: id}","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            return None"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def set_sandbox_id(self, container, id):"},{"line_number":259,"context_line":"        if container.meta is None:"},{"line_number":260,"context_line":"            container.meta \u003d {}"},{"line_number":261,"context_line":"        container.meta[\u0027sandbox_id\u0027] \u003d id"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def get_addresses(self, context, container):"},{"line_number":264,"context_line":"        self.nova \u003d nova.NovaClient(context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_db9240f6","line":261,"range":{"start_line":259,"start_character":1,"end_line":261,"end_character":41},"in_reply_to":"ba5da102_87c4fb92","updated":"2016-11-05 18:21:15.000000000","message":"I rewrote it to address both your and @Wenzhi\u0027s comments.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":13248,"name":"Wenzhi Yu","email":"wenzhi_yu@163.com","username":"yuywz"},"change_message_id":"0e43830298f1ca54fc69164d9a79105bce81febe","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            return None"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def set_sandbox_id(self, container, id):"},{"line_number":259,"context_line":"        if container.meta is None:"},{"line_number":260,"context_line":"            container.meta \u003d {}"},{"line_number":261,"context_line":"        container.meta[\u0027sandbox_id\u0027] \u003d id"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def get_addresses(self, context, container):"},{"line_number":264,"context_line":"        self.nova \u003d nova.NovaClient(context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_39a31651","line":261,"range":{"start_line":259,"start_character":1,"end_line":261,"end_character":41},"in_reply_to":"ba5da102_87c4fb92","updated":"2016-10-31 05:35:58.000000000","message":"will we lose other data in container.meta if do this?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fd652d900995634084be40eae7e9c72cba3fce32","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            container.meta \u003d {}"},{"line_number":261,"context_line":"        container.meta[\u0027sandbox_id\u0027] \u003d id"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def get_addresses(self, context, container):"},{"line_number":264,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":265,"context_line":"        sandbox_id \u003d self.get_sandbox_id(container)"},{"line_number":266,"context_line":"        # TODO(hongbin): Standardize the format of addresses"},{"line_number":267,"context_line":"        return self.nova.get_addresses(sandbox_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_e75217dd","line":267,"range":{"start_line":263,"start_character":0,"end_line":267,"end_character":50},"updated":"2016-10-27 05:32:21.000000000","message":"Will it be good to set this address in container object?","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"15207bdef44d44a7ce18de9d181bda6fca9741b7","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            container.meta \u003d {}"},{"line_number":261,"context_line":"        container.meta[\u0027sandbox_id\u0027] \u003d id"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def get_addresses(self, context, container):"},{"line_number":264,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":265,"context_line":"        sandbox_id \u003d self.get_sandbox_id(container)"},{"line_number":266,"context_line":"        # TODO(hongbin): Standardize the format of addresses"},{"line_number":267,"context_line":"        return self.nova.get_addresses(sandbox_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_09138b5d","line":267,"range":{"start_line":263,"start_character":0,"end_line":267,"end_character":50},"in_reply_to":"ba5da102_e75217dd","updated":"2016-11-06 17:34:58.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            container.meta \u003d {}"},{"line_number":261,"context_line":"        container.meta[\u0027sandbox_id\u0027] \u003d id"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def get_addresses(self, context, container):"},{"line_number":264,"context_line":"        self.nova \u003d nova.NovaClient(context)"},{"line_number":265,"context_line":"        sandbox_id \u003d self.get_sandbox_id(container)"},{"line_number":266,"context_line":"        # TODO(hongbin): Standardize the format of addresses"},{"line_number":267,"context_line":"        return self.nova.get_addresses(sandbox_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_1bbbd876","line":267,"range":{"start_line":263,"start_character":0,"end_line":267,"end_character":50},"in_reply_to":"ba5da102_e75217dd","updated":"2016-11-05 18:21:15.000000000","message":"Will address this comment later.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"}],"zun/container/driver.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c4577ee604cd0d95378061d7d850d0ddc9e1164c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"class ContainerDriver(object):"},{"line_number":79,"context_line":"    \u0027\u0027\u0027Base class for container drivers.\u0027\u0027\u0027"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def create(self, container, sandbox_name):"},{"line_number":82,"context_line":"        \"\"\"Create a container.\"\"\""},{"line_number":83,"context_line":"        raise NotImplementedError()"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_306892ba","line":81,"range":{"start_line":81,"start_character":32,"end_line":81,"end_character":44},"updated":"2016-10-19 06:49:36.000000000","message":"We want every driver to use sandbox when creating a container? can we make it have default value, like None.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ac92e414440e0d79bf2aa1eca83ce6f3392a01dc","unresolved":false,"context_lines":[{"line_number":78,"context_line":"class ContainerDriver(object):"},{"line_number":79,"context_line":"    \u0027\u0027\u0027Base class for container drivers.\u0027\u0027\u0027"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def create(self, container, sandbox_name):"},{"line_number":82,"context_line":"        \"\"\"Create a container.\"\"\""},{"line_number":83,"context_line":"        raise NotImplementedError()"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_7ebf2260","line":81,"range":{"start_line":81,"start_character":32,"end_line":81,"end_character":44},"in_reply_to":"fa6399be_306892ba","updated":"2016-10-19 15:45:17.000000000","message":"Sure. I can give it a default value.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":78,"context_line":"class ContainerDriver(object):"},{"line_number":79,"context_line":"    \u0027\u0027\u0027Base class for container drivers.\u0027\u0027\u0027"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def create(self, container, sandbox_name):"},{"line_number":82,"context_line":"        \"\"\"Create a container.\"\"\""},{"line_number":83,"context_line":"        raise NotImplementedError()"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_3bc09ce0","line":81,"range":{"start_line":81,"start_character":32,"end_line":81,"end_character":44},"in_reply_to":"fa6399be_7ebf2260","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c4577ee604cd0d95378061d7d850d0ddc9e1164c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        raise NotImplementedError()"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def get_addresses(self, context, container):"},{"line_number":146,"context_line":"        \"\"\"Delete a sandbox.\"\"\""},{"line_number":147,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_b09ae2c3","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":31},"updated":"2016-10-19 06:49:36.000000000","message":"Typos..","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"02a78ad63c32f71f75f7916f816d7461362f93f3","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        raise NotImplementedError()"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def get_addresses(self, context, container):"},{"line_number":146,"context_line":"        \"\"\"Delete a sandbox.\"\"\""},{"line_number":147,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_5bb5507c","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":31},"in_reply_to":"fa6399be_b09ae2c3","updated":"2016-11-05 18:21:15.000000000","message":"Done","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ac92e414440e0d79bf2aa1eca83ce6f3392a01dc","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        raise NotImplementedError()"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def get_addresses(self, context, container):"},{"line_number":146,"context_line":"        \"\"\"Delete a sandbox.\"\"\""},{"line_number":147,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_de774ed2","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":31},"in_reply_to":"fa6399be_b09ae2c3","updated":"2016-10-19 15:45:17.000000000","message":"will fix it.","commit_id":"590457d1e6beea1085c6b735c722f31f93de19fd"}]}
