if isinstance(line, unicode): line = line.encode('utf-8') metadata[i] = line metadata = [i + '\n' for i in metadata] tmpFilePath = self._metafile + ".new" try: self._oop.writeLines(tmpFilePath, metadata) except IOError as e: if e.errno != errno.ESTALE: raise self._oop.writeLines(tmpFilePath, metadata) self._oop.os.rename(tmpFilePath, self._metafile) FileSDMetadata = lambda metafile: DictValidator( PersistentDict(FileMetadataRW(metafile)), FILE_SD_MD_FIELDS) class FileStorageDomainManifest(sd.StorageDomainManifest): def __init__(self, domainPath, metadata=None): # Using glob might look like the simplest thing to do but it isn't # If one of the mounts is stuck it'll cause the entire glob to fail # and you wouldn't be able to access any domain self.log.debug("Reading domain in path %s", domainPath) self.mountpoint = os.path.dirname(domainPath) self.remotePath = os.path.basename(self.mountpoint) self.metafile = os.path.join(domainPath, sd.DOMAIN_META_DATA, sd.METADATA) sdUUID = os.path.basename(domainPath) domaindir = os.path.join(self.mountpoint, sdUUID) if metadata is None:
def FileSDMetadata(metafile): return DictValidator(PersistentDict(FileMetadataRW(metafile)), FILE_SD_MD_FIELDS)
def _getPoolMD(cls, domain): # This might look disgusting but this makes it so that # This is the only intrusion needed to satisfy the # unholy union between pool and SD metadata return DictValidator(domain._metadata._dict, SP_MD_FIELDS)