From c4919c5945baa1dc6128c08ec64930a330a38b28 Mon Sep 17 00:00:00 2001 From: atlas Date: Sat, 14 Nov 2026 11:40:20 +0100 Subject: [PATCH] archive: read the repository without its lock for the prune metrics --- nix/host-modules/lib/archive-server.nix | 4 ++-- nix/script-tests/archive-metrics.nix | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/nix/host-modules/lib/archive-server.nix b/nix/host-modules/lib/archive-server.nix index 13da635ec..f17625a5e 100644 --- a/nix/host-modules/lib/archive-server.nix +++ b/nix/host-modules/lib/archive-server.nix @@ -255,7 +255,7 @@ in "hyperhive.archive.prune.last_run_success=$ok" "hyperhive.archive.prune.last_run_timestamp_seconds=$(date +%s)" ) - if snaps="$(${restic}/bin/restic -r "$repo" --retry-lock 10m snapshots --json 2>/dev/null)" \ + if snaps="$(${restic}/bin/restic -r "$repo" --no-lock snapshots --json 2>/dev/null)" \ && count="$(jq 'length' <<<"$snaps" 2>/dev/null)"; then metrics+=("hyperhive.archive.repo.snapshots=$count") while read -r time; do @@ -267,7 +267,7 @@ in metrics+=("hyperhive.archive.repo.latest_snapshot_timestamp_seconds=$latest") fi fi - if stats="$(${restic}/bin/restic -r "$repo" --retry-lock 10m stats --mode raw-data --json 2>/dev/null)" \ + if stats="$(${restic}/bin/restic -r "$repo" --no-lock stats --mode raw-data --json 2>/dev/null)" \ && stats="$(jq -r '.total_size' <<<"$stats" 2>/dev/null)"; then metrics+=("hyperhive.archive.repo.size_bytes=$stats") fi diff --git a/nix/script-tests/archive-metrics.nix b/nix/script-tests/archive-metrics.nix index d2c6db25c..459553a5c 100644 --- a/nix/script-tests/archive-metrics.nix +++ b/nix/script-tests/archive-metrics.nix @@ -9,7 +9,9 @@ let fakeRestic = pkgs.writeShellScriptBin "restic" '' # Answers from the files named by FAKE_SNAPSHOTS and FAKE_STATS; an unset - # variable makes that subcommand fail. + # variable makes that subcommand fail, and so does a call without --no-lock: + # the metrics only read, and must not wait on a lock. + case " $* " in *" --no-lock "*) ;; *) exit 1 ;; esac case " $* " in *" snapshots "*) [ -n "''${FAKE_SNAPSHOTS:-}" ] && cat "$FAKE_SNAPSHOTS" ;; *" stats "*) [ -n "''${FAKE_STATS:-}" ] && cat "$FAKE_STATS" ;;