|
@@ -104,7 +104,7 @@ class Repository3:
|
|
|
self._send_log = send_log_cb or (lambda: None)
|
|
|
self.do_create = create
|
|
|
self.created = False
|
|
|
- self.acceptable_repo_versions = (3, )
|
|
|
+ self.acceptable_repo_versions = (3,)
|
|
|
self.opened = False
|
|
|
self.append_only = append_only # XXX not implemented / not implementable
|
|
|
self.storage_quota = storage_quota # XXX not implemented
|
|
@@ -196,7 +196,13 @@ class Repository3:
|
|
|
|
|
|
def info(self):
|
|
|
"""return some infos about the repo (must be opened first)"""
|
|
|
- info = dict(id=self.id, version=self.version, storage_quota_use=self.storage_quota_use, storage_quota=self.storage_quota, append_only=self.append_only)
|
|
|
+ info = dict(
|
|
|
+ id=self.id,
|
|
|
+ version=self.version,
|
|
|
+ storage_quota_use=self.storage_quota_use,
|
|
|
+ storage_quota=self.storage_quota,
|
|
|
+ append_only=self.append_only,
|
|
|
+ )
|
|
|
return info
|
|
|
|
|
|
def commit(self, compact=True, threshold=0.1):
|
|
@@ -204,6 +210,7 @@ class Repository3:
|
|
|
|
|
|
def check(self, repair=False, max_duration=0):
|
|
|
"""Check repository consistency"""
|
|
|
+
|
|
|
def log_error(msg):
|
|
|
nonlocal obj_corrupted
|
|
|
obj_corrupted = True
|
|
@@ -228,12 +235,12 @@ class Repository3:
|
|
|
obj_size = len(obj)
|
|
|
if obj_size >= hdr_size:
|
|
|
hdr = RepoObj.ObjHeader(*RepoObj.obj_header.unpack(obj[:hdr_size]))
|
|
|
- meta = obj[hdr_size:hdr_size+hdr.meta_size]
|
|
|
+ meta = obj[hdr_size : hdr_size + hdr.meta_size]
|
|
|
if hdr.meta_size != len(meta):
|
|
|
log_error("metadata size incorrect.")
|
|
|
elif hdr.meta_hash != xxh64(meta):
|
|
|
log_error("metadata does not match checksum.")
|
|
|
- data = obj[hdr_size+hdr.meta_size:hdr_size+hdr.meta_size+hdr.data_size]
|
|
|
+ data = obj[hdr_size + hdr.meta_size : hdr_size + hdr.meta_size + hdr.data_size]
|
|
|
if hdr.data_size != len(data):
|
|
|
log_error("data size incorrect.")
|
|
|
elif hdr.data_hash != xxh64(data):
|
|
@@ -276,12 +283,11 @@ class Repository3:
|
|
|
ids = []
|
|
|
if marker is not None:
|
|
|
idx = ids.index(marker)
|
|
|
- ids = ids[idx + 1:]
|
|
|
+ ids = ids[idx + 1 :]
|
|
|
if limit is not None:
|
|
|
return ids[:limit]
|
|
|
return ids
|
|
|
|
|
|
-
|
|
|
def scan(self, limit=None, state=None):
|
|
|
"""
|
|
|
list (the next) <limit> chunk IDs from the repository.
|
|
@@ -312,24 +318,19 @@ class Repository3:
|
|
|
obj = self.store.load(key, size=hdr_size + extra_size)
|
|
|
hdr = obj[0:hdr_size]
|
|
|
if len(hdr) != hdr_size:
|
|
|
- raise IntegrityError(
|
|
|
- f"Object too small [id {id_hex}]: expected {hdr_size}, got {len(hdr)} bytes"
|
|
|
- )
|
|
|
+ raise IntegrityError(f"Object too small [id {id_hex}]: expected {hdr_size}, got {len(hdr)} bytes")
|
|
|
meta_size = RepoObj.obj_header.unpack(hdr)[0]
|
|
|
if meta_size > extra_size:
|
|
|
# we did not get enough, need to load more, but not all.
|
|
|
# this should be rare, as chunk metadata is rather small usually.
|
|
|
obj = self.store.load(key, size=hdr_size + meta_size)
|
|
|
- meta = obj[hdr_size:hdr_size + meta_size]
|
|
|
+ meta = obj[hdr_size : hdr_size + meta_size]
|
|
|
if len(meta) != meta_size:
|
|
|
- raise IntegrityError(
|
|
|
- f"Object too small [id {id_hex}]: expected {meta_size}, got {len(meta)} bytes"
|
|
|
- )
|
|
|
+ raise IntegrityError(f"Object too small [id {id_hex}]: expected {meta_size}, got {len(meta)} bytes")
|
|
|
return hdr + meta
|
|
|
except StoreObjectNotFound:
|
|
|
raise self.ObjectNotFound(id, self.path) from None
|
|
|
|
|
|
-
|
|
|
def get_many(self, ids, read_data=True, is_preloaded=False):
|
|
|
for id_ in ids:
|
|
|
yield self.get(id_, read_data=read_data)
|