def __init__(self, path, device, partition, account, container, logger, uid=DEFAULT_UID, gid=DEFAULT_GID, fs_object=None): self.root = path device = account if container: self.name = container else: self.name = None if self.name: self.datadir = os.path.join(path, account, self.name) else: self.datadir = os.path.join(path, device) self.account = account self.device_path = os.path.join(path, device) if not check_mount(path, device): check_valid_account(account, fs_object) self.logger = logger self.metadata = {} self.uid = int(uid) self.gid = int(gid) # Create a dummy db_file in /etc/swift self.db_file = '/etc/swift/db_file.db' if not os.path.exists(self.db_file): file(self.db_file, 'w+') 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 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 get_info(self, include_metadata=False): """ Get global data for the account. :returns: dict with keys: account, created_at, put_timestamp, delete_timestamp, container_count, object_count, bytes_used, hash, id """ metadata = {} if (os.path.exists(self.datadir)): metadata = read_metadata(self.datadir) if not metadata: metadata = create_account_metadata(self.datadir) data = { 'account': self.account, 'created_at': '1', 'put_timestamp': '1', 'delete_timestamp': '1', 'container_count': metadata.get(X_CONTAINER_COUNT, 0), 'object_count': metadata.get(X_OBJECTS_COUNT, 0), 'bytes_used': metadata.get(X_BYTES_USED, 0), 'hash': '', 'id': '' } if include_metadata: data['metadata'] = metadata return data
def __init__(self, root, account, fs_object=None): self.root = root self.account = account self.datadir = os.path.join(self.root, self.account) if not check_mount(root, account): check_valid_account(account, fs_object) self.metadata = read_metadata(self.datadir) if not self.metadata or not validate_account(self.metadata): self.metadata = create_account_metadata(self.datadir)
def __init__(self, root, account, fs_object = None): self.root = root self.account = account self.datadir = os.path.join(self.root, self.account) if not check_mount(root, account): check_valid_account(account, fs_object) self.metadata = read_metadata(self.datadir) if not self.metadata or not validate_account(self.metadata): self.metadata = create_account_metadata(self.datadir)
def get_info(self, include_metadata=False): """ Get global data for the account. :returns: dict with keys: account, created_at, put_timestamp, delete_timestamp, container_count, object_count, bytes_used, hash, id """ metadata = {} if (os.path.exists(self.datadir)): metadata = read_metadata(self.datadir) if not metadata: metadata = create_account_metadata(self.datadir) data = {'account' : self.account, 'created_at' : '1', 'put_timestamp' : '1', 'delete_timestamp' : '1', 'container_count' : metadata.get(X_CONTAINER_COUNT, 0), 'object_count' : metadata.get(X_OBJECTS_COUNT, 0), 'bytes_used' : metadata.get(X_BYTES_USED, 0), 'hash' : '', 'id' : ''} if include_metadata: data['metadata'] = metadata return data
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)