fix(media): order the sidecar reap only where the view is mounted
Every apply and rollback printed "next: scripts/media-view.sh reap", but on Dankserver there is nothing to reap: the metadata view has never been installed (`media-view.sh status` -> NOT MOUNTED, `/var/lib/media-meta` absent) and the live quadlets still bind the array read-only. All three relayout arms tonight issued that order — 242,084 moves — and it pointed at a directory that does not exist. Where no overlay is mounted the servers bind the array itself, so the sidecars moved with the media. `--metadata-view` (default /var/lib/media-meta/view) names the overlay and the note now rides only when that path is a mountpoint. Red first: two new cases in tests/media_relayout.bats (apply and rollback); the shared helper names a real mountpoint so the pre-existing presence assertion keeps its meaning. 37 ok.
This commit is contained in:
1 parent
96944f0b17
commit
9eb85ea1f9
2 files changed
+55
-6
No files matched your search
@@ -374,7 +374,10 @@ PY
|
||||
# apply_plan — plan, then apply for real; the journal goes in the tmpdir.
|
||||
apply_plan() {
|
||||
JOURNAL="$BATS_TEST_TMPDIR/journal.jsonl"
|
||||
run python3 "$APPLY" apply --plan "$OUT" --root "$LIB" --journal "$JOURNAL" --apply
|
||||
# `/` is always a mountpoint, so the overlay note behaves as it does on a
|
||||
# host that runs the metadata view.
|
||||
run python3 "$APPLY" apply --plan "$OUT" --root "$LIB" \
|
||||
--journal "$JOURNAL" --metadata-view / --apply
|
||||
}
|
||||
|
||||
@test "a run without --apply says what it would do and touches nothing" {
|
||||
@@ -409,6 +412,32 @@ print(sum(1 for l in open(sys.argv[1]) if json.loads(l).get("op") == "move"))' "
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
# The overlay note is only true where the metadata view is really mounted. On a
|
||||
# host whose media servers bind the array directly (dankserver today: both
|
||||
# quadlets mount /mnt/entropy, /var/lib/media-meta does not exist) the sidecars
|
||||
# moved with the media, and "next: run reap" is an order that cannot be carried
|
||||
# out. --metadata-view is how the caller names that path; the default is the
|
||||
# host's view path, and the note rides only when it is a mountpoint.
|
||||
@test "an apply with no mounted metadata view does not order a reap" {
|
||||
plan
|
||||
JOURNAL="$BATS_TEST_TMPDIR/journal.jsonl"
|
||||
run python3 "$APPLY" apply --plan "$OUT" --root "$LIB" --journal "$JOURNAL" --apply
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"moved"* ]]
|
||||
[[ "$output" != *"media-view.sh reap"* ]]
|
||||
}
|
||||
|
||||
@test "a rollback with no mounted metadata view does not order a reap" {
|
||||
plan
|
||||
JOURNAL="$BATS_TEST_TMPDIR/journal.jsonl"
|
||||
run python3 "$APPLY" apply --plan "$OUT" --root "$LIB" --journal "$JOURNAL" --apply
|
||||
[ "$status" -eq 0 ]
|
||||
run python3 "$APPLY" rollback --journal "$JOURNAL" --root "$LIB" --apply
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"rolled back"* ]]
|
||||
[[ "$output" != *"media-view.sh reap"* ]]
|
||||
}
|
||||
|
||||
@test "a target already holding a different file stops the whole run" {
|
||||
plan
|
||||
JOURNAL="$BATS_TEST_TMPDIR/journal.jsonl"
|
||||
|
||||
Reference in new issue
Block a user