Пример #1
0
    def getMetadata(self, metaId=None):
        """
        Get Meta data array of key,values lines
        """
        if not metaId:
            metaId = self.getMetadataId()

        vgname, offs = metaId

        try:
            meta = misc.readblock(lvm.lvPath(vgname, sd.METADATA),
                                  offs * volume.METADATA_SIZE,
                                  volume.METADATA_SIZE)
            # TODO: factor out logic below for sharing with file volumes
            out = {}
            for l in meta:
                if l.startswith("EOF"):
                    return out
                if l.find("=") < 0:
                    continue
                key, value = l.split("=", 1)
                out[key.strip()] = value.strip()

        except Exception as e:
            self.log.error(e, exc_info=True)
            raise se.VolumeMetadataReadError("%s: %s" % (metaId, e))

        return out
Пример #2
0
    def getMetadata(self, metaId=None):
        """
        Get Meta data array of key,values lines
        """
        if not metaId:
            metaId = self.getMetadataId()

        volPath, = metaId
        metaPath = self._getMetaVolumePath(volPath)

        try:
            f = self.oop.directReadLines(metaPath)
            # TODO: factor out logic below for sharing with block volumes
            out = {}
            for l in f:
                if l.startswith("EOF"):
                    return out
                if l.find("=") < 0:
                    continue
                key, value = l.split("=", 1)
                out[key.strip()] = value.strip()

        except Exception as e:
            self.log.error(e, exc_info=True)
            raise se.VolumeMetadataReadError("%s: %s" % (metaId, e))

        return out
Пример #3
0
 def getMetadata(self, metaid=None, nocache=False):
     """
     Get Meta data array of key,values lines
     """
     if nocache:
         out = self.metaCache()
         if out:
             return out
     if not metaid:
         vgname = self.sdUUID
         offs = self.getMetaOffset()
     else:
         vgname = metaid[0]
         offs = metaid[1]
     try:
         meta = misc.readblockSUDO(lvm.lvPath(vgname, sd.METADATA),
                                   offs * VOLUME_METASIZE, VOLUME_METASIZE)
         out = {}
         for l in meta:
             if l.startswith("EOF"):
                 return out
             if l.find("=") < 0:
                 continue
             key, value = l.split("=")
             out[key.strip()] = value.strip()
     except Exception, e:
         self.log.error(e, exc_info=True)
         raise se.VolumeMetadataReadError(str(metaid) + ":" + str(e))
Пример #4
0
 def getMetaOffset(self):
     if self.metaoff:
         return self.metaoff
     l = lvm.getLV(self.sdUUID, self.volUUID).tags
     for t in l:
         if t.startswith(TAG_PREFIX_MD):
             return int(t[3:])
     self.log.error("missing offset tag on volume %s", self.volUUID)
     raise se.VolumeMetadataReadError("missing offset tag on volume %s" %
                                      self.volUUID)
Пример #5
0
 def getMetaOffset(self):
     if self.metaoff:
         return self.metaoff
     try:
         md = _getVolumeTag(self.sdUUID, self.volUUID, TAG_PREFIX_MD)
     except se.MissingTagOnLogicalVolume:
         self.log.error("missing offset tag on volume %s/%s",
                        self.sdUUID,
                        self.volUUID,
                        exc_info=True)
         raise se.VolumeMetadataReadError(
             "missing offset tag on volume %s/%s" %
             (self.sdUUID, self.volUUID))
     else:
         return int(md)
Пример #6
0
 def getMetadata(self, vol_path=None, nocache=False):
     """
     Get Meta data array of key,values lines
     """
     if nocache:
         out = self.metaCache()
         if out:
             return out
     meta = self._getMetaVolumePath(vol_path)
     try:
         f = self.oop.directReadLines(meta)
         out = {}
         for l in f:
             if l.startswith("EOF"):
                 return out
             if l.find("=") < 0:
                 continue
             key, value = l.split("=")
             out[key.strip()] = value.strip()
     except Exception, e:
         self.log.error(e, exc_info=True)
         raise se.VolumeMetadataReadError(meta + str(e))