From 5ac33e1583e838ade3f56c7d60e80e7a854f9a88 Mon Sep 17 00:00:00 2001 From: Feng Ruohang Date: Tue, 8 Sep 2026 15:28:33 +0800 Subject: [PATCH] test: make access move failure recovery deterministic Signed-off-by: Feng Ruohang --- cmd/ilm-access-move_test.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cmd/ilm-access-move_test.go b/cmd/ilm-access-move_test.go index 9d150edef..8cb1081bc 100644 --- a/cmd/ilm-access-move_test.go +++ b/cmd/ilm-access-move_test.go @@ -297,9 +297,10 @@ func TestAccessMoveSourceDeleteFailureCanResume(t *testing.T) { set := z.serverPools[1].getHashedSet(object) getDisks := set.getDisks faulty := append([]StorageAPI(nil), getDisks()...) - // The old version is purged. One disk then completes deletion of the - // latest version; the remaining disks reject it. - for i := 1; i < len(faulty); i++ { + // Commit removal of the old version, then reject the latest version on + // every disk. This fixes the retry boundary without relying on how a + // partially deleted erasure quorum is subsequently resolved or healed. + for i := range faulty { faulty[i] = accessMoveDeleteFaultDisk{StorageAPI: faulty[i], bucket: bucket, object: object, version: latest.VersionID} } set.getDisks = func() []StorageAPI { return faulty } @@ -310,6 +311,10 @@ func TestAccessMoveSourceDeleteFailureCanResume(t *testing.T) { } assertAccessMoveVersion(t, z, bucket, object, 0, old, "old") assertAccessMoveVersion(t, z, bucket, object, 0, latest, "new") + if _, err := z.serverPools[1].GetObjectInfo(t.Context(), bucket, object, ObjectOptions{VersionID: old.VersionID}); !isErrVersionNotFound(err) { + t.Fatalf("old source version should already be removed: %v", err) + } + assertAccessMoveVersion(t, z, bucket, object, 1, latest, "new") if _, err := moveObjectPool(t.Context(), z, bucket, object, 1, 0, nil); err != nil { t.Fatal(err) }