)]}'
{"openstack/cluster/v1/_proxy.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"32f443cf5ea3b0acb9a5a8ebdcae3c555aa49e82","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            the cluster could not be found. When set to ``True``, no exception"},{"line_number":192,"context_line":"            will be raised when attempting to delete a non-existent cluster."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        :returns: :class:`~openstack.cluster.v1.cluster.Cluster`."},{"line_number":195,"context_line":"        \"\"\""},{"line_number":196,"context_line":"        return self._delete(_cluster.Cluster, cluster,"},{"line_number":197,"context_line":"                            ignore_missing\u003dignore_missing)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_8c7f3ddf","line":194,"updated":"2016-02-01 13:26:57.000000000","message":"so ... this is inaccurate now","commit_id":"2b5f71af213fd1cd2c558e843d21aa37fa4dfbe3"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"32f443cf5ea3b0acb9a5a8ebdcae3c555aa49e82","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            the node could not be found. When set to ``True``, no exception"},{"line_number":403,"context_line":"            will be raised when attempting to delete a non-existent node."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        :returns: :class:`~openstack.cluster.v1.node.Node`."},{"line_number":406,"context_line":"        \"\"\""},{"line_number":407,"context_line":"        return self._delete(_node.Node, node, ignore_missing\u003dignore_missing)"},{"line_number":408,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_ec70310d","line":405,"updated":"2016-02-01 13:26:57.000000000","message":"this has to be changed","commit_id":"2b5f71af213fd1cd2c558e843d21aa37fa4dfbe3"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"e70b32eaa734afe26eca9f890b0e92b484e7005b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            the cluster could not be found. When set to ``True``, no exception"},{"line_number":192,"context_line":"            will be raised when attempting to delete a non-existent cluster."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        :returns: a dict containing \u0027location\u0027."},{"line_number":195,"context_line":"        \"\"\""},{"line_number":196,"context_line":"        return self._delete(_cluster.Cluster, cluster,"},{"line_number":197,"context_line":"                            ignore_missing\u003dignore_missing)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bae84128_b9b01e8d","line":194,"updated":"2016-02-19 15:35:18.000000000","message":"This and the delete_node return docstring should be something more like this:\n\n    :returns: The instance of the Cluster which was deleted.\n    :rtype: :class:`~openstack.cluster.v1.cluster.Cluster`.","commit_id":"f07c9bd68f2fe42a349343478d786bac7123f147"}],"openstack/cluster/v1/cluster.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"32f443cf5ea3b0acb9a5a8ebdcae3c555aa49e82","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        :param session: The session to use for making this request."},{"line_number":146,"context_line":"        :type session: :class:`~openstack.session.Session`"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :return: :class:`~openstack.cluster.v1.cluster.Cluster`."},{"line_number":149,"context_line":"        :raises: :exc:`~openstack.exceptions.MethodNotSupported` if"},{"line_number":150,"context_line":"                 :data:`Resource.allow_update` is not set to ``True``."},{"line_number":151,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_4cb86575","line":148,"updated":"2016-02-01 13:26:57.000000000","message":"this is incorrect","commit_id":"2b5f71af213fd1cd2c558e843d21aa37fa4dfbe3"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"e2279d323d0d6849b2a5a45dd5d59da9370cdc9c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        }"},{"line_number":140,"context_line":"        return self.action(session, body)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def delete(self, session):"},{"line_number":143,"context_line":"        \"\"\"Delete the remote resource associated with this instance."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        :param session: The session to use for making this request."}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_b40d7592","line":142,"range":{"start_line":142,"start_character":15,"end_line":142,"end_character":19},"updated":"2016-02-16 17:08:32.000000000","message":"This looks quite odd, although I don\u0027t know about the cluster service. What\u0027s the purpose of returning just this one specific header? It feels like such a departure from what everything else does that I\u0027d like to understand more about the use case here.","commit_id":"ad8f4e11be6f228edb108df3387b38e8e79d158c"},{"author":{"_account_id":7404,"name":"Ethan Lynn","email":"xuanlangjian@gmail.com","username":"GaryLynn"},"change_message_id":"a924d500dc4c29fb0a9dd3b207560f050568d986","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        }"},{"line_number":140,"context_line":"        return self.action(session, body)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def delete(self, session):"},{"line_number":143,"context_line":"        \"\"\"Delete the remote resource associated with this instance."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        :param session: The session to use for making this request."}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_eb189d77","line":142,"range":{"start_line":142,"start_character":15,"end_line":142,"end_character":19},"in_reply_to":"dae33548_b40d7592","updated":"2016-02-17 05:51:13.000000000","message":"Hi Brian, thanks for your review.\n\nIn senlin, if cluster deletion starts, an action will be created.The request to delete cluster will return a response with a \u0027location\u0027 header pointed to this action.\n\nBy tracking the action\u0027s status, we can track the deletion progress. If it failed, we can know that before waiting cluster to be disappear.","commit_id":"ad8f4e11be6f228edb108df3387b38e8e79d158c"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"aaa03e5079b5849dacc41ff330817e86b2f45741","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        }"},{"line_number":140,"context_line":"        return self.action(session, body)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def delete(self, session):"},{"line_number":143,"context_line":"        \"\"\"Delete the remote resource associated with this instance."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        :param session: The session to use for making this request."}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_d6162bf0","line":142,"range":{"start_line":142,"start_character":15,"end_line":142,"end_character":19},"in_reply_to":"dae33548_b40d7592","updated":"2016-02-17 00:35:15.000000000","message":"Yes, it is odd and a departure from \u0027common practices\u0027. Team spent a long time debating on the response to a DELETE HTTP request. Returning 200 or 201 both sounds incorrect. Even 204 is not correct because deleting a cluster of 100 nodes may take a long time. We are never sure whether it was \u0027successful\u0027. So we decided to return 202. That means DELETE is explicitly handled as an asynchronous operation.\n\nFor such an operation, we will return 202 as the status code. At the same time, we return the \u0027location\u0027 header as suggested by api-wg, so the caller can examine the progress of the action.\n\nWe have patched sdk for the create and update operations, this patch is for delete operation.","commit_id":"ad8f4e11be6f228edb108df3387b38e8e79d158c"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"4da2cc80c9fd5596df733e10ca63b32aa8d7aa98","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        }"},{"line_number":140,"context_line":"        return self.action(session, body)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def delete(self, session):"},{"line_number":143,"context_line":"        \"\"\"Delete the remote resource associated with this instance."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        :param session: The session to use for making this request."}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_75f71e8b","line":142,"range":{"start_line":142,"start_character":15,"end_line":142,"end_character":19},"in_reply_to":"dae33548_eb189d77","updated":"2016-02-17 20:10:09.000000000","message":"Ok, that makes sense, and I also chatted quickly with Everett who works on the API-WG as well.\n\nI have a suggestion for how to actually get this data back to the user, though. Would it be possible, rather than just returning a new dictionary with the one location key, to set the location header prop on the resource (self) and then return self from here? That would then make the delete work slightly more like create/get/update, and the user would be working with a Cluster resource just like they would anywhere else. Then the usage would look something like this:\n\n    c \u003d create_cluster(...)\n    # do stuff with the cluster\n    c \u003d update_cluster(name\u003d\"hello\")\n    # do more stuff with the cluster\n    c \u003d delete_cluster(c)\n    track_deletion(c.location)\n\nI think you\u0027d be able to make this work by just changing the last two lines into something like\n\n    self.location \u003d resp.headers[\u0027location\u0027]\n    return self\n\nThat would then enable that the proxy would just pass the full resource right onto the user to be used like the above example.\n\nHow does this sound?","commit_id":"ad8f4e11be6f228edb108df3387b38e8e79d158c"}],"openstack/cluster/v1/node.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"38dcad17faa328938156eb871c5877250dc8d902","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        resp \u003d session.delete(url, endpoint_filter\u003dself.service)"},{"line_number":84,"context_line":"        if resp.headers:"},{"line_number":85,"context_line":"            self.set_headers(resp.headers)"},{"line_number":86,"context_line":"        return self"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_9a64ab49","line":86,"updated":"2016-01-29 07:32:44.000000000","message":"Okay, I now get the point that the Resource class is throwing away the headers so we have to get it by ourselves. Senlin is the only service that believes a DELETE operation should be treated as an asynchronous operation thus a 202 status code with a \u0027location\u0027 header should be returned. Fine. Let\u0027s do it. Let\u0027s return the location in a dict directly since that is what we are exposing to users. Returning the whole resource doesn\u0027t make sense.\n\nIn my comment to your previous patchset, I meant that we should return the \u0027location\u0027 property directly if that is handled at the Resource class.\n\nAnother step forward. Since this is not a generic method for all services or all resources, we can save the effort doing the \u0027if resp.headers\u0027 check. We can also remove the docstring about method not supported case. None of those will happen.\n\nPlease work out the cluster patch the same way.","commit_id":"3b08f0ea2601ee840f2227ae7f2c224101c4ecdb"},{"author":{"_account_id":7404,"name":"Ethan Lynn","email":"xuanlangjian@gmail.com","username":"GaryLynn"},"change_message_id":"acb7b1e7f02fc4205cb73f12d9bb8bb25bc5f84e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        resp \u003d session.delete(url, endpoint_filter\u003dself.service)"},{"line_number":84,"context_line":"        if resp.headers:"},{"line_number":85,"context_line":"            self.set_headers(resp.headers)"},{"line_number":86,"context_line":"        return self"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_4a12d30a","line":86,"in_reply_to":"7a5de9d1_9a64ab49","updated":"2016-01-29 12:30:42.000000000","message":"Yes, other resource will not return any resource after delete. But senlin will.\n\n So do you mean just return a dict {\u0027location\u0027: \u0027pointer\u0027} is enough?","commit_id":"3b08f0ea2601ee840f2227ae7f2c224101c4ecdb"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"32f443cf5ea3b0acb9a5a8ebdcae3c555aa49e82","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        :param session: The session to use for making this request."},{"line_number":76,"context_line":"        :type session: :class:`~openstack.session.Session`"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        :return: :class:`~openstack.cluster.v1.node.Node`."},{"line_number":79,"context_line":"        :raises: :exc:`~openstack.exceptions.MethodNotSupported` if"},{"line_number":80,"context_line":"                 :data:`Resource.allow_update` is not set to ``True``."},{"line_number":81,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_4c5ce57c","line":78,"updated":"2016-02-01 13:26:57.000000000","message":"this is incorrect","commit_id":"2b5f71af213fd1cd2c558e843d21aa37fa4dfbe3"}]}
