def __init__(self, root, drive, account, logger, **kwargs): super(DiskAccount, self).__init__(root, drive, account, logger, **kwargs) if self.account == 'gsexpiring': # Do not bother updating object count, container count and bytes # used. Return immediately before metadata validation and # creation happens. info = do_stat(self.datadir) if info and stat.S_ISDIR(info.st_mode): self._dir_exists = True semi_fake_md = { 'X-Object-Count': (0, 0), 'X-Container-Count': (0, 0), 'X-Timestamp': ((normalize_timestamp(info.st_ctime)), 0), 'X-Type': ('Account', 0), 'X-PUT-Timestamp': ((normalize_timestamp(info.st_mtime)), 0), 'X-Bytes-Used': (0, 0) } self.metadata = semi_fake_md return # Since accounts should always exist (given an account maps to a # gluster volume directly, and the mount has already been checked at # the beginning of the REST API handling), just assert that that # assumption still holds. assert self._dir_exists_read_metadata() assert self._dir_exists if not self.metadata or not validate_account(self.metadata): create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir)
def __init__(self, root, drive, account, logger): super(DiskAccount, self).__init__(root, drive, account, logger) # Since accounts should always exist (given an account maps to a # gluster volume directly, and the mount has already been checked at # the beginning of the REST API handling), just assert that that # assumption still holds. assert self._dir_exists_read_metadata() assert self._dir_exists if not self.metadata or not validate_account(self.metadata): create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir)
def __init__(self, path, account, container, logger, uid=DEFAULT_UID, gid=DEFAULT_GID): self.root = path if container: self.container = container else: self.container = None if self.container: self.datadir = os.path.join(path, account, self.container) else: self.datadir = os.path.join(path, account) # Note that the account name has a one-to-one mapping to the gluster # mount point, or volume name. self.account = account assert logger is not None self.logger = logger self.metadata = {} self.container_info = None self.object_info = None self.uid = int(uid) self.gid = int(gid) self.db_file = _db_file self.dir_exists = os.path.exists(self.datadir) if self.dir_exists: try: self.metadata = _read_metadata(self.datadir) except EOFError: create_container_metadata(self.datadir) else: return if self.container: if not self.metadata: create_container_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not validate_container(self.metadata): create_container_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not self.metadata: create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not validate_account(self.metadata): create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir)
def __init__(self, root, drive, account, logger, **kwargs): super(DiskAccount, self).__init__(root, drive, account, logger, **kwargs) # Since accounts should always exist (given an account maps to a # gluster volume directly, and the mount has already been checked at # the beginning of the REST API handling), just assert that that # assumption still holds. assert self._dir_exists_read_metadata() assert self._dir_exists if not self.metadata or not validate_account(self.metadata): create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir)
def test_create_account_metadata(self): td = tempfile.mkdtemp() try: r_md = utils.create_account_metadata(td) xkey = _xkey(td, utils.METADATA_KEY) assert len(_xattrs.keys()) == 1 assert xkey in _xattrs assert _xattr_op_cnt['get'] == 1 assert _xattr_op_cnt['set'] == 1 md = pickle.loads(_xattrs[xkey]) assert r_md == md for key in self.acct_keys: assert key in md, "Expected key %s in %r" % (key, md) assert md[utils.X_TYPE] == (utils.ACCOUNT, 0) assert md[utils.X_TIMESTAMP] == (utils.normalize_timestamp( os.path.getctime(td)), 0) assert md[utils.X_PUT_TIMESTAMP] == (utils.normalize_timestamp( os.path.getmtime(td)), 0) assert md[utils.X_OBJECTS_COUNT] == (0, 0) assert md[utils.X_BYTES_USED] == (0, 0) assert md[utils.X_CONTAINER_COUNT] == (0, 0) finally: os.rmdir(td)
def _initialize(self): if self.container: if not self.metadata: create_container_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not validate_container(self.metadata): create_container_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not self.metadata: create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not validate_account(self.metadata): create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir)
def __init__(self, path, drive, account, container, logger, uid=DEFAULT_UID, gid=DEFAULT_GID): self.root = path if container: self.container = container else: self.container = None if self.container: self.datadir = os.path.join(path, drive, self.container) else: self.datadir = os.path.join(path, drive) self.account = account assert logger is not None self.logger = logger self.metadata = {} self.container_info = None self.object_info = None self.uid = int(uid) self.gid = int(gid) self.db_file = _db_file self.dir_exists = os.path.exists(self.datadir) if self.dir_exists: try: self.metadata = _read_metadata(self.datadir) except EOFError: create_container_metadata(self.datadir) else: return if self.container: if not self.metadata: create_container_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not validate_container(self.metadata): create_container_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not self.metadata: create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir) else: if not validate_account(self.metadata): create_account_metadata(self.datadir) self.metadata = _read_metadata(self.datadir)
def test_create_account_metadata(self): td = tempfile.mkdtemp() try: r_md = utils.create_account_metadata(td) xkey = _xkey(td, utils.METADATA_KEY) assert len(_xattrs.keys()) == 1 assert xkey in _xattrs assert _xattr_op_cnt['get'] == 1 assert _xattr_op_cnt['set'] == 1 md = pickle.loads(_xattrs[xkey]) assert r_md == md for key in self.acct_keys: assert key in md, "Expected key %s in %r" % (key, md) assert md[utils.X_TYPE] == (utils.ACCOUNT, 0) assert md[utils.X_TIMESTAMP] == (normalize_timestamp(os.path.getctime(td)), 0) assert md[utils.X_PUT_TIMESTAMP] == (normalize_timestamp(os.path.getmtime(td)), 0) assert md[utils.X_OBJECTS_COUNT] == (0, 0) assert md[utils.X_BYTES_USED] == (0, 0) assert md[utils.X_CONTAINER_COUNT] == (0, 0) finally: os.rmdir(td)