)]}'
{"nova/compute/api.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"4253a23280e3c9eb81ccef72eebddd6dc18a312c","unresolved":false,"context_lines":[{"line_number":3261,"context_line":"                                      source_node\u003dinstance.node,"},{"line_number":3262,"context_line":"                                      instance_uuid\u003dinstance.uuid,"},{"line_number":3263,"context_line":"                                      status\u003d\u0027started\u0027,"},{"line_number":3264,"context_line":"                                      migration_type\u003d\u0027evacuate\u0027)"},{"line_number":3265,"context_line":"        if host:"},{"line_number":3266,"context_line":"            migration.dest_compute \u003d host"},{"line_number":3267,"context_line":"        migration.create()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_3c618cd3","line":3264,"updated":"2015-05-25 13:58:41.000000000","message":"So since this is used for accounting it should also be done on a target compute node to avoid race conditions, however in this case it is really better to do it ASAP, so that the compute service has this record. Not sure what\u0027s the best decision here as (in theory at least), we will want to call rebuild from the compute host again, if there is a failed claim to look for a different host, if there was a change between the scheduler making a decision and the rebuild request making it to the target compute node.\n\nalso we need to update rt._instance_in_resize_state (and probably rename it) so that resource tracker will not skip evacuating instances.","commit_id":"b3bf4058297b319786c0f4de2a16853be6db674e"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"39bbe37a9b4233fd7e558a608015129f7a35b28f","unresolved":false,"context_lines":[{"line_number":3270,"context_line":"                                      source_compute\u003dinstance.host,"},{"line_number":3271,"context_line":"                                      source_node\u003dinstance.node,"},{"line_number":3272,"context_line":"                                      instance_uuid\u003dinstance.uuid,"},{"line_number":3273,"context_line":"                                      status\u003d\u0027started\u0027,"},{"line_number":3274,"context_line":"                                      migration_type\u003d\u0027evacuate\u0027)"},{"line_number":3275,"context_line":"        if host:"},{"line_number":3276,"context_line":"            migration.dest_compute \u003d host"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_7e5a1f52","line":3273,"updated":"2015-06-30 16:00:29.000000000","message":"can we change this to \u0027accepted\u0027 or something that signifies more clearly that it will not be used for resource tracking untill it is switched to a (for example) \u0027rebuilding\u0027 once it is actually claimed on the compute node.","commit_id":"853eeacdef3d62edcfcb292374c9a85fabc27ace"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9fa18e81a73744de62014f246bc026db70bfc156","unresolved":false,"context_lines":[{"line_number":3266,"context_line":""},{"line_number":3267,"context_line":"        # NOTE(danms): Create this as a tombstone for the source compute"},{"line_number":3268,"context_line":"        # to find and cleanup. No need to pass it anywhere else."},{"line_number":3269,"context_line":"        migration \u003d objects.Migration(context\u003dcontext.elevated(),"},{"line_number":3270,"context_line":"                                      source_compute\u003dinstance.host,"},{"line_number":3271,"context_line":"                                      source_node\u003dinstance.node,"},{"line_number":3272,"context_line":"                                      instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_9f4c8fc9","line":3269,"updated":"2015-07-01 13:02:09.000000000","message":"we needn\u0027t elevate context anymore :)","commit_id":"f63b6a5a6cdbcb85be3e7fb947eb3a58fa865d69"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9fa18e81a73744de62014f246bc026db70bfc156","unresolved":false,"context_lines":[{"line_number":3270,"context_line":"                                      source_compute\u003dinstance.host,"},{"line_number":3271,"context_line":"                                      source_node\u003dinstance.node,"},{"line_number":3272,"context_line":"                                      instance_uuid\u003dinstance.uuid,"},{"line_number":3273,"context_line":"                                      status\u003d\u0027accepted\u0027,"},{"line_number":3274,"context_line":"                                      migration_type\u003d\u0027evacuate\u0027)"},{"line_number":3275,"context_line":"        if host:"},{"line_number":3276,"context_line":"            migration.dest_compute \u003d host"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_45a878db","line":3273,"updated":"2015-07-01 13:02:09.000000000","message":"This Migration obj is created too early, the evacuate may failed before request send to destination compute node.\n\nIf the evacuate failed, and the original host come back, the instance will be deleted on the original host and destination host didn\u0027t have that instance also.\n\nHow about create this obj at destination compute node?","commit_id":"f63b6a5a6cdbcb85be3e7fb947eb3a58fa865d69"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f1707cb985db50c4794d04cb2b6e56d89afad583","unresolved":false,"context_lines":[{"line_number":3270,"context_line":"                                      source_compute\u003dinstance.host,"},{"line_number":3271,"context_line":"                                      source_node\u003dinstance.node,"},{"line_number":3272,"context_line":"                                      instance_uuid\u003dinstance.uuid,"},{"line_number":3273,"context_line":"                                      status\u003d\u0027accepted\u0027,"},{"line_number":3274,"context_line":"                                      migration_type\u003d\u0027evacuate\u0027)"},{"line_number":3275,"context_line":"        if host:"},{"line_number":3276,"context_line":"            migration.dest_compute \u003d host"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_4512b80a","line":3273,"in_reply_to":"ba3cc151_45a878db","updated":"2015-07-01 13:05:07.000000000","message":"Or we only destroy the migration status is building which status added at this https://review.openstack.org/#/c/194373/4/nova/compute/manager.py","commit_id":"f63b6a5a6cdbcb85be3e7fb947eb3a58fa865d69"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9fa18e81a73744de62014f246bc026db70bfc156","unresolved":false,"context_lines":[{"line_number":3271,"context_line":"                                      source_node\u003dinstance.node,"},{"line_number":3272,"context_line":"                                      instance_uuid\u003dinstance.uuid,"},{"line_number":3273,"context_line":"                                      status\u003d\u0027accepted\u0027,"},{"line_number":3274,"context_line":"                                      migration_type\u003d\u0027evacuate\u0027)"},{"line_number":3275,"context_line":"        if host:"},{"line_number":3276,"context_line":"            migration.dest_compute \u003d host"},{"line_number":3277,"context_line":"        migration.create()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_9f91eff3","line":3274,"updated":"2015-07-01 13:02:09.000000000","message":"It would be better to define some constants for status and migration_type","commit_id":"f63b6a5a6cdbcb85be3e7fb947eb3a58fa865d69"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"13d7d0deb3bf36246eec7addcae86183ed5a188d","unresolved":false,"context_lines":[{"line_number":3270,"context_line":"                                      source_compute\u003dinstance.host,"},{"line_number":3271,"context_line":"                                      source_node\u003dinstance.node,"},{"line_number":3272,"context_line":"                                      instance_uuid\u003dinstance.uuid,"},{"line_number":3273,"context_line":"                                      status\u003d\u0027accepted\u0027,"},{"line_number":3274,"context_line":"                                      migration_type\u003d\u0027evacuate\u0027)"},{"line_number":3275,"context_line":"        if host:"},{"line_number":3276,"context_line":"            migration.dest_compute \u003d host"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_222c9caa","line":3273,"updated":"2015-07-06 16:32:33.000000000","message":"this adds one more state actually, that\u0027s not a big deal - I can rebase on this.\naccepted is a good name still as it signifies that this is done in the API service I think (currently the basic state is pre-migrating)","commit_id":"c7fc9dcf0b2bec3d249036817b4dc88c80ca61cf"}],"nova/compute/manager.py":[{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"34a1cfa97da106f7ed0632a111f9ec5b6039e5d7","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        task state or RESIZED vm state."},{"line_number":785,"context_line":"        \"\"\""},{"line_number":786,"context_line":"        filters \u003d {\u0027source_compute\u0027: self.host,"},{"line_number":787,"context_line":"                   \u0027status\u0027: \u0027started\u0027}"},{"line_number":788,"context_line":"        evacuations \u003d objects.MigrationList.get_by_filters(context, filters)"},{"line_number":789,"context_line":"        if not evacuations:"},{"line_number":790,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_abca7b9f","line":787,"updated":"2015-05-15 21:34:15.000000000","message":"Does this handle instances that started being evacuated but then had the evacuation fail for whatever reason?\n\nWouldn\u0027t we want to mark the evacuations (via the migration status in the DB) as finished when we know that the instance was definitely evacuated and rebuilt?  Otherwise, I think we could run into an issue where the evacuation starts, but fails, and then the original instance gets destroyed here when the host comes back up, yet it was never properly rebuilt.","commit_id":"b3bf4058297b319786c0f4de2a16853be6db674e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"76845db6189b6a3f8562779ec17de930e24ccb24","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        task state or RESIZED vm state."},{"line_number":785,"context_line":"        \"\"\""},{"line_number":786,"context_line":"        filters \u003d {\u0027source_compute\u0027: self.host,"},{"line_number":787,"context_line":"                   \u0027status\u0027: \u0027started\u0027}"},{"line_number":788,"context_line":"        evacuations \u003d objects.MigrationList.get_by_filters(context, filters)"},{"line_number":789,"context_line":"        if not evacuations:"},{"line_number":790,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_168f76cd","line":787,"in_reply_to":"7a016987_abca7b9f","updated":"2015-05-15 22:48:22.000000000","message":"Yeah, but we get the same with the current implementation.\n\nThis tombstone is a step in the right direction, and the next patch in the series (not posted yet) is going to pass the migration to rebuild so that we can record the success of the evacuation. However, if the rebuild fails, I\u0027m not sure that having the original host yank the instance back when it comes back online is the right thing to do either.","commit_id":"b3bf4058297b319786c0f4de2a16853be6db674e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"dae93d968f69a8a808db9bbf8b2a094e6139e186","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        \"\"\""},{"line_number":787,"context_line":"        filters \u003d {\u0027source_compute\u0027: self.host,"},{"line_number":788,"context_line":"                   \u0027status\u0027: \u0027started\u0027}"},{"line_number":789,"context_line":"        evacuations \u003d objects.MigrationList.get_by_filters(context, filters)"},{"line_number":790,"context_line":"        if not evacuations:"},{"line_number":791,"context_line":"            return"},{"line_number":792,"context_line":"        evacuations \u003d {mig.instance_uuid: mig for mig in evacuations}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_e8969c93","line":789,"updated":"2015-06-29 23:00:59.000000000","message":"Is there a reason not to also filter by \u0027migration_type\u0027: \u0027evacuate\u0027? It seems like it would be more certain that it\u0027s an evacuation that way.","commit_id":"853eeacdef3d62edcfcb292374c9a85fabc27ace"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"68487aa637e4549f0e8f517e0334a83234dad1cf","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        \"\"\""},{"line_number":787,"context_line":"        filters \u003d {\u0027source_compute\u0027: self.host,"},{"line_number":788,"context_line":"                   \u0027status\u0027: \u0027started\u0027}"},{"line_number":789,"context_line":"        evacuations \u003d objects.MigrationList.get_by_filters(context, filters)"},{"line_number":790,"context_line":"        if not evacuations:"},{"line_number":791,"context_line":"            return"},{"line_number":792,"context_line":"        evacuations \u003d {mig.instance_uuid: mig for mig in evacuations}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_7193545c","line":789,"in_reply_to":"ba3cc151_e8969c93","updated":"2015-06-29 23:50:43.000000000","message":"Yeah, good call.","commit_id":"853eeacdef3d62edcfcb292374c9a85fabc27ace"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9fa18e81a73744de62014f246bc026db70bfc156","unresolved":false,"context_lines":[{"line_number":805,"context_line":"                               \u0027vm_state\u0027: instance.vm_state},"},{"line_number":806,"context_line":"                              instance\u003dinstance)"},{"line_number":807,"context_line":"                    continue"},{"line_number":808,"context_line":"                if not CONF.workarounds.destroy_after_evacuate:"},{"line_number":809,"context_line":"                    LOG.warning(_LW(\u0027Instance %(uuid)s appears to have been \u0027"},{"line_number":810,"context_line":"                                    \u0027evacuated from this host to %(host)s. \u0027"},{"line_number":811,"context_line":"                                    \u0027Not destroying it locally due to \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_0a5eff43","side":"PARENT","line":808,"updated":"2015-07-01 13:02:09.000000000","message":"This option didn\u0027t removed from nova/utils.py yet.","commit_id":"1294422be678a3813a037c9ca3134cc8798089e1"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2aeb57807b08d04ea554e6bb612f4e2f76386874","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        filters \u003d {"},{"line_number":788,"context_line":"            \u0027source_compute\u0027: self.host,"},{"line_number":789,"context_line":"            \u0027status\u0027: \u0027accepted\u0027,"},{"line_number":790,"context_line":"            \u0027migration_type\u0027: \u0027evacuation\u0027,"},{"line_number":791,"context_line":"        }"},{"line_number":792,"context_line":"        evacuations \u003d objects.MigrationList.get_by_filters(context, filters)"},{"line_number":793,"context_line":"        if not evacuations:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_e723ffa5","line":790,"updated":"2015-06-30 17:50:53.000000000","message":"The migration_type in nova/compute/api.py is currently set as \u0027evacuate\u0027 !\u003d \u0027evacuation\u0027","commit_id":"f63b6a5a6cdbcb85be3e7fb947eb3a58fa865d69"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"8163c978fc6bb9393ec44985d6c59bb807f312d2","unresolved":false,"context_lines":[{"line_number":824,"context_line":"            self.driver.destroy(context, instance,"},{"line_number":825,"context_line":"                                network_info,"},{"line_number":826,"context_line":"                                bdi, destroy_disks)"},{"line_number":827,"context_line":"            migration.status \u003d \u0027completed\u0027"},{"line_number":828,"context_line":"            migration.save()"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"    def _is_instance_storage_shared(self, context, instance, host\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_5b2f3fa1","line":827,"updated":"2015-07-06 21:27:24.000000000","message":"The semantics of the migration seem odd to me in this case.  I would expect this to be \u0027completed\u0027 when the instance has been rebuilt on a new host, not when it\u0027s been cleaned up.  This still allows for an instance to not exist anywhere if the evacuation failed, right?","commit_id":"2a0cda4cb156908ea1425bf34da7b1ef166f0032"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4fb210382633270a10c625651dd261b2afdc5010","unresolved":false,"context_lines":[{"line_number":824,"context_line":"            self.driver.destroy(context, instance,"},{"line_number":825,"context_line":"                                network_info,"},{"line_number":826,"context_line":"                                bdi, destroy_disks)"},{"line_number":827,"context_line":"            migration.status \u003d \u0027completed\u0027"},{"line_number":828,"context_line":"            migration.save()"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"    def _is_instance_storage_shared(self, context, instance, host\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_5e2f2da1","line":827,"in_reply_to":"ba3cc151_5b2f3fa1","updated":"2015-07-06 21:59:05.000000000","message":"Discussed this in irc with Dan.  We\u0027re currently in a situation of overloading status to indicate the status of movement of the instance, and cleanup/confirmation of the movement.  This is not specific to this patch though, it just uses what\u0027s in place.  That can be addressed later and doesn\u0027t need to hold up this major fix.","commit_id":"2a0cda4cb156908ea1425bf34da7b1ef166f0032"}]}
