use cache/last-key-checked, so config/ doesn't need D permission

This commit is contained in:
Thomas Waldmann 2025-05-16 13:29:16 +02:00
parent e0fd2af7bd
commit ecdf399e23
No known key found for this signature in database
GPG key ID: 243ACFA951F78E01

View file

@ -124,8 +124,8 @@ class Repository:
permissions = {
"": "lr",
"archives": "lrw",
"cache": "lrwWD", # WD for chunks.X
"config": "lrWD", # W for manifest, D for last-key-checked
"cache": "lrwWD", # WD for chunks.<HASH>, last-key-checked, ...
"config": "lrW", # W for manifest
"data": "lrw",
"keys": "lr",
"locks": "lrwD", # borg needs to create/delete a shared lock here
@ -300,18 +300,19 @@ class Repository:
partial = bool(max_duration)
assert not (repair and partial)
mode = "partial" if partial else "full"
LAST_KEY_CHECKED = "cache/last-key-checked"
logger.info(f"Starting {mode} repository check")
if partial:
# continue a past partial check (if any) or from a checkpoint or start one from beginning
try:
last_key_checked = self.store.load("config/last-key-checked").decode()
last_key_checked = self.store.load(LAST_KEY_CHECKED).decode()
except StoreObjectNotFound:
last_key_checked = ""
else:
# start from the beginning and also forget about any potential past partial checks
last_key_checked = ""
try:
self.store.delete("config/last-key-checked")
self.store.delete(LAST_KEY_CHECKED)
except StoreObjectNotFound:
pass
if last_key_checked:
@ -369,15 +370,15 @@ class Repository:
if now > t_last_checkpoint + 300: # checkpoint every 5 mins
t_last_checkpoint = now
logger.info(f"Checkpointing at key {key}.")
self.store.store("config/last-key-checked", key.encode())
self.store.store(LAST_KEY_CHECKED, key.encode())
if partial and now > t_start + max_duration:
logger.info(f"Finished partial repository check, last key checked is {key}.")
self.store.store("config/last-key-checked", key.encode())
self.store.store(LAST_KEY_CHECKED, key.encode())
break
else:
logger.info("Finished repository check.")
try:
self.store.delete("config/last-key-checked")
self.store.delete(LAST_KEY_CHECKED)
except StoreObjectNotFound:
pass
if not partial: