self.stubs.Set(self.volume.driver, 'attach_volume',
lambda *args, **kwargs: None)
- self.volume.migrate_volume_completion(self.context,
- old_volume['id'],
- new_volume['id'])
+ with mock.patch.object(self.volume.driver, 'detach_volume') as detach:
+ self.volume.migrate_volume_completion(self.context, old_volume[
+ 'id'], new_volume['id'])
volume = db.volume_get(elevated, old_volume['id'])
self.assertEqual(volume['status'], status)
self.assertEqual(volume['attached_host'], attached_host)
self.assertEqual(volume['instance_uuid'], instance_uuid)
+ self.assertEqual(status == 'in-use', detach.called)
def test_migrate_volume_completion_retype_available(self):
self._test_migrate_volume_completion('available', retyping=True)
new_volume = self.db.volume_get(ctxt, new_volume_id)
rpcapi = volume_rpcapi.VolumeAPI()
- status_update = {}
- if volume['status'] == 'retyping':
- status_update = {'status': self._get_original_status(volume)}
+ orig_volume_status = self._get_original_status(volume)
if error:
msg = _("migrate_volume_completion is cleaning up an error "
'vol2': new_volume['id']})
new_volume['migration_status'] = None
rpcapi.delete_volume(ctxt, new_volume)
- updates = {'migration_status': None}
- if status_update:
- updates.update(status_update)
+ updates = {'migration_status': None, 'status': orig_volume_status}
self.db.volume_update(ctxt, volume_id, updates)
return volume_id
# Delete the source volume (if it fails, don't fail the migration)
try:
- if status_update.get('status') == 'in-use':
+ if orig_volume_status == 'in-use':
self.detach_volume(ctxt, volume_id)
self.delete_volume(ctxt, volume_id)
except Exception as ex:
new_volume)
self.db.finish_volume_migration(ctxt, volume_id, new_volume_id)
self.db.volume_destroy(ctxt, new_volume_id)
- if status_update.get('status') == 'in-use':
- updates = {'migration_status': 'completing'}
- updates.update(status_update)
+ if orig_volume_status == 'in-use':
+ updates = {'migration_status': 'completing',
+ 'status': orig_volume_status}
else:
updates = {'migration_status': None}
self.db.volume_update(ctxt, volume_id, updates)
- if 'in-use' in (status_update.get('status'), volume['status']):
- # NOTE(jdg): if we're passing the ref here, why are we
- # also passing in the various fields from that ref?
+ if orig_volume_status == 'in-use':
rpcapi.attach_volume(ctxt,
volume,
volume['instance_uuid'],