def __convertDomainMetadataToTags(domain, targetVersion): log = logging.getLogger('Storage.DomainMetadataToTags') newMetadata = blockSD.TagBasedSDMetadata(domain.sdUUID) oldMetadata = domain._metadata # We use _dict to bypass the validators in order to copy all metadata metadata = oldMetadata._dict.copy() metadata[sd.DMDK_VERSION] = str(targetVersion) # Must be a string log.debug("Converting domain %s to tag based metadata", domain.sdUUID) newMetadata._dict.update(metadata) try: # If we can't clear the old metadata we don't have any clue on what # actually happened. We prepare the convertError exception to raise # later on if we discover that the upgrade didn't take place. oldMetadata._dict.clear() except Exception as convertError: log.error("Could not clear the old metadata", exc_info=True) else: # We don't have any valuable information to add here convertError = RuntimeError("Unknown metadata conversion error") # If this fails, there's nothing we can do, let's bubble the exception chkMetadata = blockSD.selectMetadata(domain.sdUUID) if chkMetadata[sd.DMDK_VERSION] == int(targetVersion): # Switching to the newMetadata (successful upgrade), the oldMetadata # was cleared after all. domain._metadata = chkMetadata log.debug( "Conversion of domain %s to tag based metadata completed, " "target version = %s", domain.sdUUID, targetVersion) else: # The upgrade failed, cleaning up the new metadata log.error( "Could not convert domain %s to tag based metadata, " "target version = %s", domain.sdUUID, targetVersion) newMetadata._dict.clear() # Raising the oldMetadata_dict.clear() exception or the default one raise convertError
def __convertDomainMetadataToTags(domain, targetVersion): log = logging.getLogger('Storage.DomainMetadataToTags') newMetadata = blockSD.TagBasedSDMetadata(domain.sdUUID) oldMetadata = domain._metadata # We use _dict to bypass the validators in order to copy all metadata metadata = oldMetadata._dict.copy() metadata[sd.DMDK_VERSION] = str(targetVersion) # Must be a string log.debug("Converting domain %s to tag based metadata", domain.sdUUID) newMetadata._dict.update(metadata) try: # If we can't clear the old metadata we don't have any clue on what # actually happened. We prepare the convertError exception to raise # later on if we discover that the upgrade didn't take place. oldMetadata._dict.clear() except Exception as convertError: log.error("Could not clear the old metadata", exc_info=True) else: # We don't have any valuable information to add here convertError = RuntimeError("Unknown metadata conversion error") # If this fails, there's nothing we can do, let's bubble the exception chkMetadata = blockSD.selectMetadata(domain.sdUUID) if chkMetadata[sd.DMDK_VERSION] == int(targetVersion): # Switching to the newMetadata (successful upgrade), the oldMetadata # was cleared after all. domain._metadata = chkMetadata log.debug("Conversion of domain %s to tag based metadata completed, " "target version = %s", domain.sdUUID, targetVersion) else: # The upgrade failed, cleaning up the new metadata log.error("Could not convert domain %s to tag based metadata, " "target version = %s", domain.sdUUID, targetVersion) newMetadata._dict.clear() # Raising the oldMetadata_dict.clear() exception or the default one raise convertError