Merge "Check for server in attachements when checking for detach complete"

This commit is contained in:
Zuul 2018-10-04 14:42:13 +00:00 committed by Gerrit Code Review
commit dd9fbb0487
4 changed files with 14 additions and 6 deletions

View File

@ -128,13 +128,18 @@ class CinderClientPlugin(client_plugin.ClientPlugin):
return (isinstance(ex, exceptions.ClientException) and
ex.code == 409)
def check_detach_volume_complete(self, vol_id):
def check_detach_volume_complete(self, vol_id, server_id=None):
try:
vol = self.client().volumes.get(vol_id)
except Exception as ex:
self.ignore_not_found(ex)
return True
server_ids = [
a['server_id'] for a in vol.attachments if 'server_id' in a]
if server_id and server_id not in server_ids:
return True
if vol.status in ('in-use', 'detaching'):
LOG.debug('%s - volume still in use', vol_id)
return False

View File

@ -507,9 +507,9 @@ class CinderVolume(vb.BaseVolume, sh.SchedulerHintsMixin):
prg_detach.called = True
return False
if not prg_detach.cinder_complete:
cinder_complete_res = self.client_plugin(
).check_detach_volume_complete(prg_detach.vol_id)
prg_detach.cinder_complete = cinder_complete_res
prg_detach.cinder_complete = self.client_plugin(
).check_detach_volume_complete(prg_detach.vol_id,
prg_detach.srv_id)
return False
if not prg_detach.nova_complete:
prg_detach.nova_complete = self.client_plugin(
@ -770,7 +770,8 @@ class CinderVolumeAttachment(vb.BaseVolumeAttachment):
return True
if not prg_detach.cinder_complete:
prg_detach.cinder_complete = self.client_plugin(
).check_detach_volume_complete(prg_detach.vol_id)
).check_detach_volume_complete(prg_detach.vol_id,
prg_detach.srv_id)
return False
if not prg_detach.nova_complete:
prg_detach.nova_complete = self.client_plugin(

View File

@ -211,7 +211,7 @@ class BaseVolumeAttachment(resource.Resource):
if not prg.cinder_complete:
prg.cinder_complete = self.client_plugin(
).check_detach_volume_complete(prg.vol_id)
).check_detach_volume_complete(prg.vol_id, prg.srv_id)
return False
if not prg.nova_complete:
prg.nova_complete = self.client_plugin(

View File

@ -126,6 +126,8 @@ class FakeVolume(object):
setattr(self, key, value)
if 'id' not in attrs:
self.id = self._ID
if 'attachments' not in attrs:
self.attachments = [{'server_id': 'WikiDatabase'}]
class FakeBackup(FakeVolume):