except cephfs.Error as e:
raise VolumeException(-e.args[0], e.args[1])
- def trash_incarnation_dir(self):
+ def trash_incarnation_dir(self, subvol_path):
"""rename subvolume (uuid component) to trash"""
self.create_trashcan()
try:
- bname = os.path.basename(self.path)
+ bname = os.path.basename(subvol_path)
tpath = os.path.join(self.trash_dir, bname)
- log.debug("trash: {0} -> {1}".format(self.path, tpath))
- self.fs.rename(self.path, tpath)
+ log.debug(f"trash: {subvol_path} -> {tpath}")
+ self.fs.rename(subvol_path, tpath)
self._link_dir(tpath, bname)
except cephfs.Error as e:
raise VolumeException(-e.args[0], e.args[1])
self.auth_mdata_mgr.delete_subvolume_metadata_file(self.group.groupname, self.subvolname)
return
if self.state != SubvolumeStates.STATE_RETAINED:
- self.trash_incarnation_dir()
- self.metadata_mgr.remove_section(MetadataManager.USER_METADATA_SECTION)
- self.metadata_mgr.update_global_section(MetadataManager.GLOBAL_META_KEY_PATH, "")
- self.metadata_mgr.update_global_section(MetadataManager.GLOBAL_META_KEY_STATE, SubvolumeStates.STATE_RETAINED.value)
- self.metadata_mgr.flush()
- # Delete the volume meta file, if it's not already deleted
- self.auth_mdata_mgr.delete_subvolume_metadata_file(self.group.groupname, self.subvolname)
+ try:
+ # save subvol path for later use(renaming subvolume to trash) before deleting path section from .meta
+ subvol_path = self.path
+ self.metadata_mgr.update_global_section(MetadataManager.GLOBAL_META_KEY_PATH, "")
+ self.metadata_mgr.update_global_section(MetadataManager.GLOBAL_META_KEY_STATE, SubvolumeStates.STATE_RETAINED.value)
+ self.metadata_mgr.remove_section(MetadataManager.USER_METADATA_SECTION)
+ self.metadata_mgr.flush()
+ self.trash_incarnation_dir(subvol_path)
+ # Delete the volume meta file, if it's not already deleted
+ self.auth_mdata_mgr.delete_subvolume_metadata_file(self.group.groupname, self.subvolname)
+ except MetadataMgrException as e:
+ log.error(f"failed to write config: {e}")
+ raise VolumeException(e.args[0], e.args[1])
+
def info(self):
if self.state != SubvolumeStates.STATE_RETAINED: