summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-23 18:02:48 +0000
committerGerrit Code Review <review@openstack.org>2013-01-23 18:02:48 +0000
commit5fe9954952cd32b6746b0754ab1ca2401e7a2491 (patch)
tree15068774bf2260c111b9b253b69315b55357d78d
parenta792bc5cfcf418a78f592aad6286f20f4f46ab4f (diff)
parent41848d419cc87f3344c2d071e42561bb52c0c577 (diff)
downloadnova-5fe9954952cd32b6746b0754ab1ca2401e7a2491.tar.gz
nova-5fe9954952cd32b6746b0754ab1ca2401e7a2491.tar.xz
nova-5fe9954952cd32b6746b0754ab1ca2401e7a2491.zip
Merge "XenAPI: Fix volume detach"
-rw-r--r--nova/tests/virt/xenapi/test_volumeops.py16
-rw-r--r--nova/virt/xenapi/volumeops.py2
2 files changed, 15 insertions, 3 deletions
diff --git a/nova/tests/virt/xenapi/test_volumeops.py b/nova/tests/virt/xenapi/test_volumeops.py
index 7cc5c70da..844ae8459 100644
--- a/nova/tests/virt/xenapi/test_volumeops.py
+++ b/nova/tests/virt/xenapi/test_volumeops.py
@@ -21,6 +21,13 @@ from nova.virt.xenapi import volumeops
class VolumeAttachTestCase(test.TestCase):
def test_detach_volume_call(self):
+ registered_calls = []
+
+ def regcall(label):
+ def side_effect(*args, **kwargs):
+ registered_calls.append(label)
+ return side_effect
+
ops = volumeops.VolumeOps('session')
self.mox.StubOutWithMock(volumeops.vm_utils, 'vm_ref_or_raise')
self.mox.StubOutWithMock(volumeops.vm_utils, 'find_vbd_by_number')
@@ -45,10 +52,12 @@ class VolumeAttachTestCase(test.TestCase):
volumeops.vm_utils.unplug_vbd('session', 'vbdref')
- volumeops.vm_utils.destroy_vbd('session', 'vbdref')
+ volumeops.vm_utils.destroy_vbd('session', 'vbdref').WithSideEffects(
+ regcall('destroy_vbd'))
volumeops.volume_utils.find_sr_from_vbd(
- 'session', 'vbdref').AndReturn('srref')
+ 'session', 'vbdref').WithSideEffects(
+ regcall('find_sr_from_vbd')).AndReturn('srref')
volumeops.volume_utils.purge_sr('session', 'srref')
@@ -58,6 +67,9 @@ class VolumeAttachTestCase(test.TestCase):
dict(driver_volume_type='iscsi', data='conn_data'),
'instance_1', 'mountpoint')
+ self.assertEquals(
+ ['find_sr_from_vbd', 'destroy_vbd'], registered_calls)
+
def test_attach_volume_call(self):
ops = volumeops.VolumeOps('session')
self.mox.StubOutWithMock(ops, '_connect_volume')
diff --git a/nova/virt/xenapi/volumeops.py b/nova/virt/xenapi/volumeops.py
index 5f79b6c3a..c2d717cfd 100644
--- a/nova/virt/xenapi/volumeops.py
+++ b/nova/virt/xenapi/volumeops.py
@@ -125,6 +125,7 @@ class VolumeOps(object):
try:
vbd_ref = vm_utils.find_vbd_by_number(self._session, vm_ref,
device_number)
+ sr_ref = volume_utils.find_sr_from_vbd(self._session, vbd_ref)
except volume_utils.StorageError, exc:
LOG.exception(exc)
raise Exception(_('Unable to locate volume %s') % mountpoint)
@@ -143,7 +144,6 @@ class VolumeOps(object):
# Forget SR only if no other volumes on this host are using it
try:
- sr_ref = volume_utils.find_sr_from_vbd(self._session, vbd_ref)
volume_utils.purge_sr(self._session, sr_ref)
except volume_utils.StorageError, exc:
LOG.exception(exc)