)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae5f2067e87f0770318280ae46d1c78adf16693f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds a new conductor sub-task which will make a"},{"line_number":10,"context_line":"synchronous RPC call (using long_rpc_timeout) to a new method"},{"line_number":11,"context_line":"\"prep_snapshot_based_resize_at_source\" on the source compute"},{"line_number":12,"context_line":"service which will behave very similar to how shelve works, but"},{"line_number":13,"context_line":"also coincides with how the resize_instance method works during"},{"line_number":14,"context_line":"a traditional resize:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9fdfeff1_8d3b82e9","line":11,"range":{"start_line":11,"start_character":1,"end_line":11,"end_character":37},"updated":"2019-01-26 00:33:38.000000000","message":"Split this out into a separate change before this in the series.","commit_id":"51c908a81b201c5e1636a04902a4a8ff6d1d0b33"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b211525d4073919db382e33abf765f83be36b740","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds a new conductor sub-task which will make a"},{"line_number":10,"context_line":"synchronous RPC call (using long_rpc_timeout) to a new method"},{"line_number":11,"context_line":"\"prep_snapshot_based_resize_at_source\" on the source compute"},{"line_number":12,"context_line":"service which will behave very similar to how shelve works, but"},{"line_number":13,"context_line":"also coincides with how the resize_instance method works during"},{"line_number":14,"context_line":"a traditional resize:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9fdfeff1_73112a52","line":11,"range":{"start_line":11,"start_character":1,"end_line":11,"end_character":37},"in_reply_to":"9fdfeff1_8d3b82e9","updated":"2019-01-30 00:49:42.000000000","message":"Added a TODO.","commit_id":"51c908a81b201c5e1636a04902a4a8ff6d1d0b33"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61d81e24aa9d5e187f173e96e0d15e4ad058cb20","unresolved":false,"context_lines":[{"line_number":6134,"context_line":""},{"line_number":6135,"context_line":"        # If a snapshot image ID was provided, we need to snapshot the guest"},{"line_number":6136,"context_line":"        # disk image and upload it to the image service."},{"line_number":6137,"context_line":"        if snapshot_id:"},{"line_number":6138,"context_line":"            LOG.debug(\u0027Creating snapshot image %s\u0027, snapshot_id,"},{"line_number":6139,"context_line":"                      instance\u003dinstance)"},{"line_number":6140,"context_line":"            # Note that we don\u0027t track the snapshot phase task states during"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_a64a7d24","line":6137,"updated":"2019-01-01 17:53:47.000000000","message":"TODO: cleanup the snapshot on failure","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e1bef96ae6fdbd6d5bb1c49d32a9d0e61c80256","unresolved":false,"context_lines":[{"line_number":6134,"context_line":""},{"line_number":6135,"context_line":"        # If a snapshot image ID was provided, we need to snapshot the guest"},{"line_number":6136,"context_line":"        # disk image and upload it to the image service."},{"line_number":6137,"context_line":"        if snapshot_id:"},{"line_number":6138,"context_line":"            LOG.debug(\u0027Creating snapshot image %s\u0027, snapshot_id,"},{"line_number":6139,"context_line":"                      instance\u003dinstance)"},{"line_number":6140,"context_line":"            # Note that we don\u0027t track the snapshot phase task states during"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_553c64be","line":6137,"in_reply_to":"1f769fc5_a64a7d24","updated":"2019-01-02 14:48:52.000000000","message":"Done","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61d81e24aa9d5e187f173e96e0d15e4ad058cb20","unresolved":false,"context_lines":[{"line_number":790,"context_line":"            be used later on the destination host to finish the resize"},{"line_number":791,"context_line":"        :param snapshot_id: ID of the image snapshot to upload if not a"},{"line_number":792,"context_line":"            volume-backed instance"},{"line_number":793,"context_line":"        :raises: nova.exception.MigrationError if the source compute is too"},{"line_number":794,"context_line":"            old to perform the operation"},{"line_number":795,"context_line":"        :raises: oslo_messaging.exceptions.MessagingTimeout if the RPC call"},{"line_number":796,"context_line":"            times out"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_c647791d","line":793,"updated":"2019-01-01 17:53:47.000000000","message":"This should really be checked higher up the stack before we even try doing a cross-cell resize (likely when determining if we can do cross-cell resize in the API during the policy check...).","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e1bef96ae6fdbd6d5bb1c49d32a9d0e61c80256","unresolved":false,"context_lines":[{"line_number":790,"context_line":"            be used later on the destination host to finish the resize"},{"line_number":791,"context_line":"        :param snapshot_id: ID of the image snapshot to upload if not a"},{"line_number":792,"context_line":"            volume-backed instance"},{"line_number":793,"context_line":"        :raises: nova.exception.MigrationError if the source compute is too"},{"line_number":794,"context_line":"            old to perform the operation"},{"line_number":795,"context_line":"        :raises: oslo_messaging.exceptions.MessagingTimeout if the RPC call"},{"line_number":796,"context_line":"            times out"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_b59b78c7","line":793,"in_reply_to":"1f769fc5_c647791d","updated":"2019-01-02 14:48:52.000000000","message":"Done","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61d81e24aa9d5e187f173e96e0d15e4ad058cb20","unresolved":false,"context_lines":[{"line_number":986,"context_line":"                   backup_type\u003dbackup_type,"},{"line_number":987,"context_line":"                   rotation\u003drotation)"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def snapshot_instance(self, ctxt, instance, image_id, do_cast\u003dTrue):"},{"line_number":990,"context_line":"        version \u003d \u00275.0\u0027"},{"line_number":991,"context_line":"        if do_cast:"},{"line_number":992,"context_line":"            cctxt \u003d self.router.client(ctxt).prepare("}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_665465cb","line":989,"updated":"2019-01-01 17:53:47.000000000","message":"Undo these changes.","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e1bef96ae6fdbd6d5bb1c49d32a9d0e61c80256","unresolved":false,"context_lines":[{"line_number":986,"context_line":"                   backup_type\u003dbackup_type,"},{"line_number":987,"context_line":"                   rotation\u003drotation)"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def snapshot_instance(self, ctxt, instance, image_id, do_cast\u003dTrue):"},{"line_number":990,"context_line":"        version \u003d \u00275.0\u0027"},{"line_number":991,"context_line":"        if do_cast:"},{"line_number":992,"context_line":"            cctxt \u003d self.router.client(ctxt).prepare("}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_35af68e4","line":989,"in_reply_to":"1f769fc5_665465cb","updated":"2019-01-02 14:48:52.000000000","message":"Done","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"}],"nova/conductor/tasks/cross_cell_migrate.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61d81e24aa9d5e187f173e96e0d15e4ad058cb20","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d conf.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PrepResizeTask(base.TaskBase):"},{"line_number":30,"context_line":"    \"\"\"Task used to verify a given target host in a target cell."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Upon successful completion, port bindings and volume attachments"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_4665a9b4","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":20},"updated":"2019-01-01 17:53:47.000000000","message":"Rename this to PrepResizeAtDestTask.","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e1bef96ae6fdbd6d5bb1c49d32a9d0e61c80256","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d conf.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PrepResizeTask(base.TaskBase):"},{"line_number":30,"context_line":"    \"\"\"Task used to verify a given target host in a target cell."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Upon successful completion, port bindings and volume attachments"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_6a465f7f","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":20},"in_reply_to":"1f769fc5_4665a9b4","updated":"2019-01-02 14:48:52.000000000","message":"Done","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61d81e24aa9d5e187f173e96e0d15e4ad058cb20","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Upon successful completion, port bindings and volume attachments"},{"line_number":33,"context_line":"    should be created for the target host in the target cell and resources"},{"line_number":34,"context_line":"    should be claimed on the target host for the resize. Also, the instance"},{"line_number":35,"context_line":"    task_state should be ``resize_prep``."},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_2660ada5","line":34,"updated":"2019-01-01 17:53:47.000000000","message":"Move this into the change before this in the series.","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e1bef96ae6fdbd6d5bb1c49d32a9d0e61c80256","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Upon successful completion, port bindings and volume attachments"},{"line_number":33,"context_line":"    should be created for the target host in the target cell and resources"},{"line_number":34,"context_line":"    should be claimed on the target host for the resize. Also, the instance"},{"line_number":35,"context_line":"    task_state should be ``resize_prep``."},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_0a556b1d","line":34,"in_reply_to":"1f769fc5_2660ada5","updated":"2019-01-02 14:48:52.000000000","message":"Done","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61d81e24aa9d5e187f173e96e0d15e4ad058cb20","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            with excutils.save_and_reraise_exception(logger\u003dLOG):"},{"line_number":172,"context_line":"                delete_image(self.context, self.instance, self.image_api,"},{"line_number":173,"context_line":"                             self._image_id)"},{"line_number":174,"context_line":"        # TODO(mriedem): If the old_vm_state is ACTIVE, do we need to try and"},{"line_number":175,"context_line":"        # start the instance again if it was powered off?"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_e65955fe","line":174,"updated":"2019-01-01 17:53:47.000000000","message":"If we destroy the guest on the source host, then we likely need to put the instance into ERROR state so the user has to rebuild it to recover.","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e1bef96ae6fdbd6d5bb1c49d32a9d0e61c80256","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            with excutils.save_and_reraise_exception(logger\u003dLOG):"},{"line_number":172,"context_line":"                delete_image(self.context, self.instance, self.image_api,"},{"line_number":173,"context_line":"                             self._image_id)"},{"line_number":174,"context_line":"        # TODO(mriedem): If the old_vm_state is ACTIVE, do we need to try and"},{"line_number":175,"context_line":"        # start the instance again if it was powered off?"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f769fc5_95f67cf9","line":174,"in_reply_to":"1f769fc5_e65955fe","updated":"2019-01-02 14:48:52.000000000","message":"Done","commit_id":"235713c3ab131c5fe2934548ccc12318ddae826c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edc7e4631a577137dbdb04ceb11de8735b5aed0a","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    Returns the snapshot image ID, if one was created, from the ``execute``"},{"line_number":395,"context_line":"    method."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    Upon successful completion, the instance.task_state will be"},{"line_number":398,"context_line":"    ``resize_migrated`` and the migration.status will be ``post-migrating``."},{"line_number":399,"context_line":"    \"\"\""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def __init__(self, context, instance, migration, request_spec,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fdfeff1_86ecf78f","line":398,"range":{"start_line":397,"start_character":32,"end_line":398,"end_character":23},"updated":"2019-02-07 17:31:43.000000000","message":"We need to reflect this in the target cell DB before calling finish_snapshot_based_resize_at_dest otherwise this will fail:\n\nhttps://review.openstack.org/#/c/635080/1/nova/compute/manager.py@4985\n\nOr we can just change ^ to expect RESIZE_PREP...","commit_id":"179c10fd36a42dda3b54fb9266d6747cbbaf6ec9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"43f785b1616c894d5ee51581dfe64ced49d00923","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    Returns the snapshot image ID, if one was created, from the ``execute``"},{"line_number":395,"context_line":"    method."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    Upon successful completion, the instance.task_state will be"},{"line_number":398,"context_line":"    ``resize_migrated`` and the migration.status will be ``post-migrating``."},{"line_number":399,"context_line":"    \"\"\""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def __init__(self, context, instance, migration, request_spec,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fdfeff1_29271c15","line":398,"range":{"start_line":397,"start_character":32,"end_line":398,"end_character":23},"in_reply_to":"9fdfeff1_86ecf78f","updated":"2019-02-07 18:11:37.000000000","message":"\u003e Or we can just change ^ to expect RESIZE_PREP...\n\nThat\u0027s pretty hacky and tightly coupled to knowing what\u0027s going on in conductor and the cross-cell semantics, and also different from how finish_resize works today, so we should be consistent and make sure the task_state is RESIZE_MIGRATED in the target cell instance before calling finish_snapshot_based_resize_at_dest.","commit_id":"179c10fd36a42dda3b54fb9266d6747cbbaf6ec9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86eb2dc0fa57a0ae173bcfe96423da7e475b7267","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        self._target_cell_instance \u003d None"},{"line_number":499,"context_line":"        self._target_cell_context \u003d None"},{"line_number":500,"context_line":"        self._snapshot_id \u003d None  # ID of snapshot for image-backed instance."},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        self.network_api \u003d network.API()"},{"line_number":503,"context_line":"        self.volume_api \u003d cinder.API()"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fdfeff1_9a10c4aa","line":500,"updated":"2019-02-07 20:35:35.000000000","message":"This isn\u0027t used (yet - it might be if we don\u0027t use the MigrationContext for the old/new image ref and just pass the snapshot_id directly to finish_snapshot_based_resize_at_dest).","commit_id":"179c10fd36a42dda3b54fb9266d6747cbbaf6ec9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b2d0474f98583e93af8eaa8417171bc1a528eea","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        self._snapshot_id \u003d prep_source_task.execute()"},{"line_number":614,"context_line":"        self._completed_tasks[\u0027PrepResizeAtSourceTask\u0027] \u003d prep_source_task"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        # TODO(mriedem): Should we set the instance.old/new_flavor fields"},{"line_number":617,"context_line":"        # here? In a normal resize, instance.new_flavor is set in prep_resize"},{"line_number":618,"context_line":"        # on the dest host and instance.old_flavor is set in finish_resize"},{"line_number":619,"context_line":"        # on the dest after the disks are moved from the source. We need"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fdfeff1_03339963","line":616,"updated":"2019-02-14 17:29:31.000000000","message":"Can remove this TODO since we\u0027re already setting the new_flavor on the target cell instance before the resize_claim and we are setting the old_flavor on the target cell instance during finish_snapshot_based_resize_at_dest.","commit_id":"179c10fd36a42dda3b54fb9266d6747cbbaf6ec9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c4c81c4998788b93e05a7e34362aab3f786e55e2","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        self._image_id \u003d None"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def _execute(self):"},{"line_number":420,"context_line":"        # Save off the vm_state so we can use that later on the dest host to"},{"line_number":421,"context_line":"        # determine if the instance should be running or stopped"},{"line_number":422,"context_line":"        # once the resize is finished. Note the migration context was set on"},{"line_number":423,"context_line":"        # the target cell instance during the RT.resize_claim in"},{"line_number":424,"context_line":"        # prep_snapshot_based_resize_at_dest and copied to the source cell"},{"line_number":425,"context_line":"        # instance after executing PrepResizeAtDestTask."},{"line_number":426,"context_line":"        self.instance.migration_context.old_vm_state \u003d self.instance.vm_state"},{"line_number":427,"context_line":"        self.instance.task_state \u003d task_states.RESIZE_MIGRATING"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        # If the instance is not volume-backed, create a snapshot of the root"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fdfeff1_a36f2d26","line":426,"range":{"start_line":420,"start_character":8,"end_line":426,"end_character":77},"updated":"2019-02-14 17:38:00.000000000","message":"Change this to save the old_vm_state in the system_metadata like prep_resize.","commit_id":"793371f26c5cee9222681ca75860afea58c801b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c542b490fa5eef92689536a93996b4b7dfb83a01","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        self._image_id \u003d None"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def _execute(self):"},{"line_number":420,"context_line":"        # Save off the vm_state so we can use that later on the dest host to"},{"line_number":421,"context_line":"        # determine if the instance should be running or stopped"},{"line_number":422,"context_line":"        # once the resize is finished. Note the migration context was set on"},{"line_number":423,"context_line":"        # the target cell instance during the RT.resize_claim in"},{"line_number":424,"context_line":"        # prep_snapshot_based_resize_at_dest and copied to the source cell"},{"line_number":425,"context_line":"        # instance after executing PrepResizeAtDestTask."},{"line_number":426,"context_line":"        self.instance.migration_context.old_vm_state \u003d self.instance.vm_state"},{"line_number":427,"context_line":"        self.instance.task_state \u003d task_states.RESIZE_MIGRATING"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        # If the instance is not volume-backed, create a snapshot of the root"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fdfeff1_76bd8100","line":426,"range":{"start_line":420,"start_character":8,"end_line":426,"end_character":77},"in_reply_to":"9fdfeff1_a36f2d26","updated":"2019-02-14 17:54:53.000000000","message":"Done","commit_id":"793371f26c5cee9222681ca75860afea58c801b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c4c81c4998788b93e05a7e34362aab3f786e55e2","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        prep_source_task \u003d PrepResizeAtSourceTask("},{"line_number":642,"context_line":"            self.context, self.instance, self.migration, self.request_spec,"},{"line_number":643,"context_line":"            self.compute_rpcapi, self.image_api)"},{"line_number":644,"context_line":"        self._snapshot_id \u003d prep_source_task.execute()"},{"line_number":645,"context_line":"        self._completed_tasks[\u0027PrepResizeAtSourceTask\u0027] \u003d prep_source_task"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        # TODO(mriedem): Should we set the instance.old/new_flavor fields"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fdfeff1_a38badbd","line":644,"range":{"start_line":644,"start_character":8,"end_line":644,"end_character":25},"updated":"2019-02-14 17:38:00.000000000","message":"Probably don\u0027t really need to store this as a member variable.","commit_id":"793371f26c5cee9222681ca75860afea58c801b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c542b490fa5eef92689536a93996b4b7dfb83a01","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        prep_source_task \u003d PrepResizeAtSourceTask("},{"line_number":642,"context_line":"            self.context, self.instance, self.migration, self.request_spec,"},{"line_number":643,"context_line":"            self.compute_rpcapi, self.image_api)"},{"line_number":644,"context_line":"        self._snapshot_id \u003d prep_source_task.execute()"},{"line_number":645,"context_line":"        self._completed_tasks[\u0027PrepResizeAtSourceTask\u0027] \u003d prep_source_task"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        # TODO(mriedem): Should we set the instance.old/new_flavor fields"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fdfeff1_96b82511","line":644,"range":{"start_line":644,"start_character":8,"end_line":644,"end_character":25},"in_reply_to":"9fdfeff1_a38badbd","updated":"2019-02-14 17:54:53.000000000","message":"Done","commit_id":"793371f26c5cee9222681ca75860afea58c801b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c141c3f922670979a3b5446ba64ec96b2bfac437","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        # If the compute service powered off the instance, snapshot it and"},{"line_number":430,"context_line":"        # destroyed the guest and then a failure occurred, the instance should"},{"line_number":431,"context_line":"        # have been set to ERROR status (by the compute service) so the user"},{"line_number":432,"context_line":"        # has to hard reboot or rebuild it."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"class CrossCellMigrationTask(base.TaskBase):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_849fb3b2","line":432,"updated":"2019-02-26 19:19:57.000000000","message":"Log something to this effect.","commit_id":"36ad8758a67487cb764c7e11dc18afca27fb6901"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"13dfc32a0d77695b6e31cb209ca9b15ba9c60f68","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        # If the compute service powered off the instance, snapshot it and"},{"line_number":430,"context_line":"        # destroyed the guest and then a failure occurred, the instance should"},{"line_number":431,"context_line":"        # have been set to ERROR status (by the compute service) so the user"},{"line_number":432,"context_line":"        # has to hard reboot or rebuild it."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"class CrossCellMigrationTask(base.TaskBase):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_1d047213","line":432,"in_reply_to":"9fdfeff1_849fb3b2","updated":"2019-02-26 21:56:17.000000000","message":"Done","commit_id":"36ad8758a67487cb764c7e11dc18afca27fb6901"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a66fbae478d83287aa8f2ebb85947f26b0ff6ea","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    def rollback(self):"},{"line_number":428,"context_line":"        # If we created a snapshot image, attempt to delete it."},{"line_number":429,"context_line":"        if self._image_id:"},{"line_number":430,"context_line":"            compute_utils.delete_image("},{"line_number":431,"context_line":"                self.context, self.instance, self.image_api, self._image_id)"},{"line_number":432,"context_line":"        # If the compute service successfully powered off the guest but failed"},{"line_number":433,"context_line":"        # to snapshot (or timed out during the snapshot), then the"}],"source_content_type":"text/x-python","patch_set":54,"id":"7faddb67_bc14abea","line":430,"updated":"2019-08-12 13:34:52.000000000","message":"Note to myself: we have @delete_image_on_error decorator on _snapshot_for_resize but we still need this as the task can fail after a successful snapshot is made. So this is OK.","commit_id":"bf5bd49291dd5946135f0e9ca662989553f98430"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b6f23f86a1e65e151705f4332aa8e4720a378ae6","unresolved":false,"context_lines":[{"line_number":420,"context_line":"            LOG.debug(\u0027Created snapshot image %s for cross-cell resize.\u0027,"},{"line_number":421,"context_line":"                      self._image_id, instance\u003dself.instance)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.instance.save(expected_task_state\u003dtask_states.RESIZE_PREP)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        # RPC call the source host to prepare for resize."},{"line_number":426,"context_line":"        self.compute_rpcapi.prep_snapshot_based_resize_at_source("}],"source_content_type":"text/x-python","patch_set":62,"id":"3fa7e38b_bf808ec0","line":423,"updated":"2019-10-15 16:55:15.000000000","message":"Okay, so if this fails, we\u0027ll delete the image we created above in rollback.","commit_id":"fb82a81e502efecb17a34b4d401783879b897b5e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a67ccce65168b9702ad30ac87558acf679c68db2","unresolved":false,"context_lines":[{"line_number":420,"context_line":"            LOG.debug(\u0027Created snapshot image %s for cross-cell resize.\u0027,"},{"line_number":421,"context_line":"                      self._image_id, instance\u003dself.instance)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.instance.save(expected_task_state\u003dtask_states.RESIZE_PREP)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        # RPC call the source host to prepare for resize."},{"line_number":426,"context_line":"        self.compute_rpcapi.prep_snapshot_based_resize_at_source("}],"source_content_type":"text/x-python","patch_set":63,"id":"3fa7e38b_06fb8878","line":423,"range":{"start_line":423,"start_character":47,"end_line":423,"end_character":70},"updated":"2019-10-16 18:45:14.000000000","message":"This should be a list or tuple.","commit_id":"242557333a4a657ba0bc8f5aa0c934820ef26342"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"69872b63747a46e8d93c0123fb947ce904848e48","unresolved":false,"context_lines":[{"line_number":420,"context_line":"            LOG.debug(\u0027Created snapshot image %s for cross-cell resize.\u0027,"},{"line_number":421,"context_line":"                      self._image_id, instance\u003dself.instance)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.instance.save(expected_task_state\u003dtask_states.RESIZE_PREP)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        # RPC call the source host to prepare for resize."},{"line_number":426,"context_line":"        self.compute_rpcapi.prep_snapshot_based_resize_at_source("}],"source_content_type":"text/x-python","patch_set":63,"id":"3fa7e38b_213d4eba","line":423,"range":{"start_line":423,"start_character":47,"end_line":423,"end_character":70},"in_reply_to":"3fa7e38b_06fb8878","updated":"2019-10-16 19:11:32.000000000","message":"The DB API handles it I guess:\n\nhttps://github.com/openstack/nova/blob/1a226aaa9e8c969ddfdfe198c36f7966b1f692f3/nova/db/sqlalchemy/api.py#L2857\n\nThis isn\u0027t the only place we pass a string to the Instance.save method, see bug 1848373.","commit_id":"242557333a4a657ba0bc8f5aa0c934820ef26342"}],"nova/objects/migration_context.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a9068646188129bb53d097902fb9a875a32c493","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                               nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027old_pci_requests\u0027: fields.ObjectField(\u0027InstancePCIRequests\u0027,"},{"line_number":55,"context_line":"                                                nullable\u003dTrue),"},{"line_number":56,"context_line":"        # old_vm_state is the vm_state before the instance is moved"},{"line_number":57,"context_line":"        \u0027old_vm_state\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        # old_image_ref is the instance.image_ref before being resized"},{"line_number":59,"context_line":"        # across cell boundaries (not set for volume-backed servers)"},{"line_number":60,"context_line":"        \u0027old_image_ref\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        # new_image_ref is the temporary snapshot image ID for a non-volume"},{"line_number":62,"context_line":"        # backed server during a cross-cell resize"},{"line_number":63,"context_line":"        \u0027new_image_ref\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":64,"context_line":"    }"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_1aeddd24","line":63,"range":{"start_line":56,"start_character":8,"end_line":63,"end_character":59},"updated":"2019-02-05 23:55:03.000000000","message":"I\u0027m not sure that any of these are necessary since the snapshot is temporary during the resize so we don\u0027t want to actually update the instance.image_ref with new_image_ref in the target cell during finish_snapshot_based_resize_at_dest.\n\nSimilar with old_vm_state - we should probably just throw that in system_metadata like the existing resize flow does.","commit_id":"477de78119272782a90618873173d6c745740f7c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3d21e7c84070a7373545faad5c0823e13165c06","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                               nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027old_pci_requests\u0027: fields.ObjectField(\u0027InstancePCIRequests\u0027,"},{"line_number":55,"context_line":"                                                nullable\u003dTrue),"},{"line_number":56,"context_line":"        # old_vm_state is the vm_state before the instance is moved"},{"line_number":57,"context_line":"        \u0027old_vm_state\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":58,"context_line":"        # old_image_ref is the instance.image_ref before being resized"},{"line_number":59,"context_line":"        # across cell boundaries (not set for volume-backed servers)"},{"line_number":60,"context_line":"        \u0027old_image_ref\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        # new_image_ref is the temporary snapshot image ID for a non-volume"},{"line_number":62,"context_line":"        # backed server during a cross-cell resize"},{"line_number":63,"context_line":"        \u0027new_image_ref\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":64,"context_line":"    }"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_fa77b907","line":63,"range":{"start_line":56,"start_character":8,"end_line":63,"end_character":59},"in_reply_to":"9fdfeff1_1aeddd24","updated":"2019-02-06 00:34:41.000000000","message":"Added a TODO to the code.","commit_id":"477de78119272782a90618873173d6c745740f7c"}]}
