Merge "Fix snapshot/restore of volumes" into stable/ocata

This commit is contained in:
Jenkins 2017-08-16 18:36:03 +00:00 committed by Gerrit Code Review
commit 558cde7df0
2 changed files with 14 additions and 12 deletions

View File

@ -440,9 +440,12 @@ class CinderVolume(vb.BaseVolume, sh.SchedulerHintsMixin):
prg_detach, prg_attach = self._detach_attach_progress(vol)
# restore the volume from backup
if self.BACKUP_ID in prop_diff:
if not vol:
vol = cinder.volumes.get(self.resource_id)
prg_restore = progress.VolumeBackupRestoreProgress(
vol_id=self.resource_id,
backup_id=prop_diff.get(self.BACKUP_ID))
prg_detach, prg_attach = self._detach_attach_progress(vol)
# extend volume size
if self.SIZE in prop_diff:
if not vol:
@ -508,6 +511,11 @@ class CinderVolume(vb.BaseVolume, sh.SchedulerHintsMixin):
def check_update_complete(self, checkers):
prg_restore, prg_detach, prg_resize, prg_access, prg_attach = checkers
# detach volume
if prg_detach:
if not prg_detach.nova_complete:
self._detach_volume_to_complete(prg_detach)
return False
if prg_restore:
if not prg_restore.called:
prg_restore.called = self._backup_restore(
@ -517,13 +525,6 @@ class CinderVolume(vb.BaseVolume, sh.SchedulerHintsMixin):
if not prg_restore.complete:
prg_restore.complete = self._check_backup_restore_complete()
return prg_restore.complete and not prg_resize
if not prg_resize and not prg_access:
return True
# detach volume
if prg_detach:
if not prg_detach.nova_complete:
self._detach_volume_to_complete(prg_detach)
return False
# resize volume
if prg_resize:
if not prg_resize.called:
@ -544,7 +545,7 @@ class CinderVolume(vb.BaseVolume, sh.SchedulerHintsMixin):
return True
def handle_snapshot(self):
backup = self.client().backups.create(self.resource_id)
backup = self.client().backups.create(self.resource_id, force=True)
self.data_set('backup_id', backup.id)
return backup.id

View File

@ -759,7 +759,7 @@ class CinderVolumeTest(vt_base.BaseVolumeTest):
fb = vt_base.FakeBackup('creating')
self.m.StubOutWithMock(self.cinder_fc.backups, 'create')
self.cinder_fc.backups.create(fv.id).AndReturn(fb)
self.cinder_fc.backups.create(fv.id, force=True).AndReturn(fb)
self.m.StubOutWithMock(self.cinder_fc.backups, 'get')
self.cinder_fc.backups.get(fb.id).AndReturn(
vt_base.FakeBackup('available'))
@ -799,7 +799,7 @@ class CinderVolumeTest(vt_base.BaseVolumeTest):
fb = vt_base.FakeBackup('creating')
self.m.StubOutWithMock(self.cinder_fc.backups, 'create')
self.cinder_fc.backups.create(fv.id).AndReturn(fb)
self.cinder_fc.backups.create(fv.id, force=True).AndReturn(fb)
self.m.StubOutWithMock(self.cinder_fc.backups, 'get')
fail_reason = 'Could not determine which Swift endpoint to use'
self.cinder_fc.backups.get(fb.id).AndReturn(
@ -1221,7 +1221,7 @@ class CinderVolumeTest(vt_base.BaseVolumeTest):
# snapshot script
fb = vt_base.FakeBackup('creating')
self.m.StubOutWithMock(self.cinder_fc.backups, 'create')
self.cinder_fc.backups.create(fv.id).AndReturn(fb)
self.cinder_fc.backups.create(fv.id, force=True).AndReturn(fb)
self.m.StubOutWithMock(self.cinder_fc.backups, 'get')
self.cinder_fc.backups.get(fb.id).AndReturn(
vt_base.FakeBackup('available'))
@ -1231,7 +1231,8 @@ class CinderVolumeTest(vt_base.BaseVolumeTest):
self.m.StubOutWithMock(self.cinder_fc.restores, 'restore')
self.cinder_fc.restores.restore('backup-123',
'vol-123').AndReturn(fvbr)
fv_restoring = vt_base.FakeVolume('restoring-backup', id=fv.id)
fv_restoring = vt_base.FakeVolume(
'restoring-backup', id=fv.id, attachments=[])
self.cinder_fc.volumes.get('vol-123').AndReturn(fv_restoring)
fv_final = vt_base.FakeVolume(final_status, id=fv.id)
self.cinder_fc.volumes.get('vol-123').AndReturn(fv_final)