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
