)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"66a342c5b94180a64a9b8a8982d6451cf42de557","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1Z8%3D","side":"PARENT","line":998,"updated":"2012-11-02 14:08:31.000000000","message":"Hmm, doesn\u0027t this break backward compatibility with the RPC API? I.e., I don\u0027t think you can remove a parameter (even an optional one) until RPC API 3.0, right?","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7d3363df387b6b3336b6f5ce71a0f44762a8c827","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1TU%3D","side":"PARENT","line":998,"in_reply_to":"AAAALn%2F%2F1UE%3D","updated":"2012-11-02 15:53:16.000000000","message":"Gah! I see now. Just keeping you guys on your toes :)","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"4673b6492bcbbafdbc86d759e85ac0a6dd754703","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1UE%3D","side":"PARENT","line":998,"in_reply_to":"AAAALn%2F%2F1VI%3D","updated":"2012-11-02 15:50:37.000000000","message":"Chris is right, there is no code that calls power_off_instance with the final_state kwarg set through the RPCAPI (stop_instance won\u0027t redispatch through RPCAPI). So removing it will be fine in that regard.\n\nBut I still think you\u0027re right that there is a problem with this patch, but for a different reason than you thought it seems :)\n\nnova-api will still send power_off_instance before upgrade and what will happen on nova-compute will be different than it expected because of the change in semantics. As a result, a user could delete an instance and it could end up being in a STOPPED state instead of SOFT_DELETED state like the user and nova-api would expect.","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"af556723788dfb7989d086a5c0d2def9445a71dc","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1Uw%3D","side":"PARENT","line":998,"in_reply_to":"AAAALn%2F%2F1VI%3D","updated":"2012-11-02 15:45:28.000000000","message":"The \u0027final_state\u0027 argument is not being passed over RPC.  It\u0027s only being sent from \u0027stop_instance\u0027 within this same file.  So, if you upgrade nova-compute, it\u0027s going to get both changes.","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"53150aaa8118e7bc2f5c96abb31688377837c03c","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1VI%3D","side":"PARENT","line":998,"in_reply_to":"AAAALn%2F%2F1YM%3D","updated":"2012-11-02 15:41:59.000000000","message":"Actually, I\u0027m just talking about the mechanical disconnect between an older RPC client (i.e. an older nova-api node) and a newer nova-compute node running this change.\n\nIf the older nova-compute attempts to soft_delete() a node, it\u0027ll call a power_off_instance() on the newer node with a final_state argument, and the newer node will break while attempting to dispatch the call to the manager, right?","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"65f3f1603c6ec969cc0b0127ee5866a34d22230c","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1ZY%3D","side":"PARENT","line":998,"in_reply_to":"AAAALn%2F%2F1Z8%3D","updated":"2012-11-02 14:17:52.000000000","message":"It normally would but in this case it was only used internally (from stop_instance) as a way to share code.\n\nAFAICT there was never any code that used the RPCAPI and used final_state.","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"3f41158f870b33969b5ff8e8e55f3228549eff56","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1YM%3D","side":"PARENT","line":998,"in_reply_to":"AAAALn%2F%2F1ZE%3D","updated":"2012-11-02 14:55:31.000000000","message":"Are you talking about a change in semantics for the power_off_instance method?\n\nIf so, I think you\u0027re right. Before this patch, the power_off_instance method would do a soft delete and after the patch, it would power off the instance. The end vm_state would be different (SOFT_DELETED vs STOPPED). Similar problem with power_on_instance as well.\n\nHmm, keeping the same semantics might be a bit of a pain. We would need a way to differentiate between old and new callers of power_off_instance. Since we can\u0027t change the old callers, the new callers would need to always set final_state (or another kwarg).\n\nThat would mean we would need to make grizzly always send final_state, then in the H release, the caller could stop sending final_state and finally in the I release we could remove final_state from the method?\n\nI guess an alternative would be to create a new method and deprecate power_off_instance. That would allow us to drop power_off_instance in the H release.","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"370ac9b26f6c7246f0348ff95ae04b45d447f842","unresolved":false,"context_lines":[{"line_number":995,"context_line":"    @reverts_task_state"},{"line_number":996,"context_line":"    @wrap_instance_fault"},{"line_number":997,"context_line":"    def power_off_instance(self, context, instance,"},{"line_number":998,"context_line":"                           final_state\u003dvm_states.SOFT_DELETED):"},{"line_number":999,"context_line":"        \"\"\"Power off an instance on this host.\"\"\""},{"line_number":1000,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1001,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F1ZE%3D","side":"PARENT","line":998,"in_reply_to":"AAAALn%2F%2F1ZY%3D","updated":"2012-11-02 14:28:18.000000000","message":"Right, but if someone were to upgrade their compute nodes before their api node, they\u0027d be toast on soft deletes, no?","commit_id":"066a3d4c410056689b5843d9520f43b2b6e7d127"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"2abce5c2a262fbaec6089ee86b4ff0d4f37a15b8","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"    @reverts_task_state"},{"line_number":1015,"context_line":"    @wrap_instance_fault"},{"line_number":1016,"context_line":"    def start_instance(self, context, instance):"},{"line_number":1017,"context_line":"        \"\"\"Starting an instance on this host.\"\"\""},{"line_number":1018,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_on.start\")"},{"line_number":1019,"context_line":"        self.driver.power_on(instance)"},{"line_number":1020,"context_line":"        current_power_state \u003d self._get_power_state(context, instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2F04U%3D","line":1017,"updated":"2012-11-02 21:03:53.000000000","message":"Start?","commit_id":"29568d0be0b4cad99a21a53438a2c95540f9ea87"}]}
