def write_metadata(fd, metadata, xattr_size=65536, md_key=None): """ Helper function to write pickled metadata for an object file. :param fd: file descriptor or filename to write the metadata :param md_key: metadata key to be write to object file :param metadata: metadata to write """ meta_key = SWIFT_METADATA_KEY metastr = pickle.dumps(metadata, PICKLE_PROTOCOL) key = 0 while metastr: try: xattr.setxattr(fd, '%s%s' % (meta_key, key or ''), metastr[:xattr_size]) metastr = metastr[xattr_size:] key += 1 except IOError as e: for err in 'ENOTSUP', 'EOPNOTSUPP': if hasattr(errno, err) and e.errno == getattr(errno, err): msg = "Filesystem at %s does not support xattr" % \ _get_filename(fd) logging.exception(msg) raise DiskFileXattrNotSupported(e) if e.errno in (errno.ENOSPC, errno.EDQUOT): msg = "No space left on device for %s" % _get_filename(fd) logging.exception(msg) raise DiskFileNoSpace() raise
def write_metadata(fd, metadata, xattr_size=65536, md_key=None): """ Helper function to write pickled metadata for an object file. :param fd: file descriptor or filename to write the metadata :param md_key: metadata key to be write to object file :param metadata: metadata to write """ meta_key = SWIFT_METADATA_KEY metastr = pickle.dumps(metadata, PICKLE_PROTOCOL) key = 0 while metastr: try: xattr.setxattr(fd, '%s%s' % (meta_key, key or ''), metastr[:xattr_size]) metastr = metastr[xattr_size:] key += 1 except IOError as e: for err in 'ENOTSUP', 'EOPNOTSUPP': if hasattr(errno, err) and e.errno == getattr(errno, err): msg = "Filesystem at %s does not support xattr" % \ _get_filename(fd) logging.exception(msg) raise DiskFileXattrNotSupported(e) if e.errno in (errno.ENOSPC, errno.EDQUOT): msg = "No space left on device for %s" % _get_filename(fd) logging.exception(msg) raise DiskFileNoSpace() raise
def read_metadata(fd, md_key=None): """ Helper function to read the pickled metadata from an object file. :param fd: file descriptor or filename to load the metadata from :param md_key: metadata key to be read from object file :returns: dictionary of metadata """ meta_key = SWIFT_METADATA_KEY metadata = '' key = 0 try: while True: metadata += xattr.getxattr(fd, '%s%s' % (meta_key, (key or ''))) key += 1 except (IOError, OSError) as e: if metadata == '': return False for err in 'ENOTSUP', 'EOPNOTSUPP': if hasattr(errno, err) and e.errno == getattr(errno, err): msg = "Filesystem at %s does not support xattr" % \ _get_filename(fd) logging.exception(msg) raise DiskFileXattrNotSupported(e) if e.errno == errno.ENOENT: raise DiskFileNotExist() return pickle.loads(metadata)
def read_metadata(fd, md_key=None): """ Helper function to read the pickled metadata from an object file. :param fd: file descriptor or filename to load the metadata from :param md_key: metadata key to be read from object file :returns: dictionary of metadata """ meta_key = SWIFT_METADATA_KEY metadata = '' key = 0 try: while True: metadata += xattr.getxattr(fd, '%s%s' % (meta_key, (key or ''))) key += 1 except (IOError, OSError) as e: if metadata == '': return False for err in 'ENOTSUP', 'EOPNOTSUPP': if hasattr(errno, err) and e.errno == getattr(errno, err): msg = "Filesystem at %s does not support xattr" % \ _get_filename(fd) logging.exception(msg) raise DiskFileXattrNotSupported(e) if e.errno == errno.ENOENT: raise DiskFileNotExist() return pickle.loads(metadata)