Removes config lock usage.

Also add a mock implementation of RemoveInstanceDisk
for the python tests. Moved _UnlockedDetachInstanceDisk
to config_mock.py as it is no longer used by non test code.

Signed-off-by: BSRK Aditya <[email protected]>
---
 lib/config/__init__.py           |   41 ++++----------------------------------
 test/py/testutils/config_mock.py |   32 +++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/lib/config/__init__.py b/lib/config/__init__.py
index ed6d1b0..952831d 100644
--- a/lib/config/__init__.py
+++ b/lib/config/__init__.py
@@ -329,34 +329,6 @@ class ConfigWriter(object):
                       args=[inst_uuid, disk_uuid, idx])
     self.OutDate()
 
-  def _UnlockedDetachInstanceDisk(self, inst_uuid, disk_uuid):
-    """Detach a disk from an instance.
-
-    @type inst_uuid: string
-    @param inst_uuid: The UUID of the instance object
-    @type disk_uuid: string
-    @param disk_uuid: The UUID of the disk object
-
-    """
-    instance = self._UnlockedGetInstanceInfo(inst_uuid)
-    if instance is None:
-      raise errors.ConfigurationError("Instance %s doesn't exist"
-                                      % inst_uuid)
-    if disk_uuid not in self._ConfigData().disks:
-      raise errors.ConfigurationError("Disk %s doesn't exist" % disk_uuid)
-
-    # Check if disk is attached to the instance
-    if disk_uuid not in instance.disks:
-      raise errors.ProgrammerError("Disk %s is not attached to an instance"
-                                   % disk_uuid)
-
-    idx = instance.disks.index(disk_uuid)
-    instance.disks.remove(disk_uuid)
-    instance_disks = self._UnlockedGetInstanceDisks(inst_uuid)
-    _UpdateIvNames(idx, instance_disks[idx:])
-    instance.serial_no += 1
-    instance.mtime = time.time()
-
   def _UnlockedRemoveDisk(self, disk_uuid):
     """Remove the disk from the configuration.
 
@@ -378,16 +350,11 @@ class ConfigWriter(object):
     del self._ConfigData().disks[disk_uuid]
     self._ConfigData().cluster.serial_no += 1
 
-  @ConfigSync()
   def RemoveInstanceDisk(self, inst_uuid, disk_uuid):
-    """Detach a disk from an instance and remove it from the config.
-
-    This is a simple wrapper over L{_UnlockedDetachInstanceDisk} and
-    L{_UnlockedRemoveDisk}.
-
-    """
-    self._UnlockedDetachInstanceDisk(inst_uuid, disk_uuid)
-    self._UnlockedRemoveDisk(disk_uuid)
+    """Detach a disk from an instance and remove it from the config."""
+    utils.SimpleRetry(True, self._wconfd.RemoveInstanceDisk, 0.1, 30,
+                      args=[inst_uuid, disk_uuid])
+    self.OutDate()
 
   def DetachInstanceDisk(self, inst_uuid, disk_uuid):
     """Detach a disk from an instance."""
diff --git a/test/py/testutils/config_mock.py b/test/py/testutils/config_mock.py
index accd31b..47977ab 100644
--- a/test/py/testutils/config_mock.py
+++ b/test/py/testutils/config_mock.py
@@ -925,5 +925,37 @@ class ConfigMock(config.ConfigWriter):
   def SetInstancePrimaryNode(self, inst_uuid, target_node_uuid):
     self._UnlockedGetInstanceInfo(inst_uuid).primary_node = target_node_uuid
 
+  def _UnlockedDetachInstanceDisk(self, inst_uuid, disk_uuid):
+    """Detach a disk from an instance.
+
+    @type inst_uuid: string
+    @param inst_uuid: The UUID of the instance object
+    @type disk_uuid: string
+    @param disk_uuid: The UUID of the disk object
+
+    """
+    instance = self._UnlockedGetInstanceInfo(inst_uuid)
+    if instance is None:
+      raise errors.ConfigurationError("Instance %s doesn't exist"
+                                      % inst_uuid)
+    if disk_uuid not in self._ConfigData().disks:
+      raise errors.ConfigurationError("Disk %s doesn't exist" % disk_uuid)
+
+    # Check if disk is attached to the instance
+    if disk_uuid not in instance.disks:
+      raise errors.ProgrammerError("Disk %s is not attached to an instance"
+                                   % disk_uuid)
+
+    idx = instance.disks.index(disk_uuid)
+    instance.disks.remove(disk_uuid)
+    instance_disks = self._UnlockedGetInstanceDisks(inst_uuid)
+    _UpdateIvNames(idx, instance_disks[idx:])
+    instance.serial_no += 1
+    instance.mtime = time.time()
+
   def DetachInstanceDisk(self, inst_uuid, disk_uuid):
     self._UnlockedDetachInstanceDisk(inst_uuid, disk_uuid)
+
+  def RemoveInstanceDisk(self, inst_uuid, disk_uuid):
+    self._UnlockedDetachInstanceDisk(inst_uuid, disk_uuid)
+    self._UnlockedRemoveDisk(disk_uuid)
-- 
1.7.10.4

Reply via email to