fix(replication): retry marker purges through persisted MRF

(cherry picked from commit cf381a7151ef25fc95ace5fedcd767fa19410de2)
Signed-off-by: Feng Ruohang <rh@vonng.com>
This commit is contained in:
Feng Ruohang
2026-09-16 00:25:12 +08:00
parent 680eac66e4
commit 0c61128d23
30 changed files with 2716 additions and 62 deletions
@@ -0,0 +1 @@
0 issues.
@@ -0,0 +1,288 @@
=== RUN TestReplicateDeleteMarkerPurge
=== RUN TestReplicateDeleteMarkerPurge/recover_legacy_false
=== RUN TestReplicateDeleteMarkerPurge/recover_legacy_true
--- PASS: TestReplicateDeleteMarkerPurge (0.84s)
--- PASS: TestReplicateDeleteMarkerPurge/recover_legacy_false (0.39s)
--- PASS: TestReplicateDeleteMarkerPurge/recover_legacy_true (0.44s)
=== RUN TestReplicateDeleteMarkerTargetSemantics
=== RUN TestReplicateDeleteMarkerTargetSemantics/existing_marker_is_idempotent
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_removes_an_existing_marker
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_forbidden
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_method_rejected
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_unavailable
--- PASS: TestReplicateDeleteMarkerTargetSemantics (0.01s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/existing_marker_is_idempotent (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_removes_an_existing_marker (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_forbidden (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_method_rejected (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_unavailable (0.01s)
=== RUN TestReplicationMRFMarkerRecovery
=== RUN TestReplicationMRFMarkerRecovery/canonical
replication-delete-mrf_test.go:485: ErasureSD: canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
goroutine 5773 [running]:
runtime/debug.Stack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:26 +0x6c
runtime/debug.PrintStack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:18 +0x24
github.com/minio/minio/internal/ioutil.SafeClose[...](...)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/ioutil/ioutil.go:470
github.com/minio/minio/internal/logger/target/http.(*Target).Cancel(0xc002fd4680)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/logger/target/http/http.go:630 +0x98
github.com/minio/minio/cmd.replicationTestAudit.func2()
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:593 +0xa4
github.com/minio/minio/cmd.testReplicationMRFMarkerRecovery(0xc000f31d48, {0x1099ca8b0, _}, {_, _}, {_, _}, {_, _}, {{0x105dfce44, ...}, ...}, ...)
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:486 +0x5cb8
github.com/minio/minio/cmd.TestReplicationMRFMarkerRecovery.func1.1({0x1099ca8b0, 0xc002432410}, {0x105df9251, 0x9}, {0xc0024cc180, 0x3c}, {0x109974420, _}, {{0x105dfce44, 0xa}, ...}, ...)
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:53 +0x124
github.com/minio/minio/cmd.ExecObjectLayerAPITest({0xc000f31d48, 0xc002f98030, {0xc002e26720, 0x1, 0x1}, 0x0, {0x0, 0x0, 0x0, {0x0, ...}, ...}})
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/test-utils_test.go:1789 +0x32c
github.com/minio/minio/cmd.TestReplicationMRFMarkerRecovery.func1(0xc000f31d48)
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:52 +0x15c
testing.tRunner(0xc000f31d48, 0xc002777e00)
/opt/homebrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2193 +0x168
created by testing.(*T).Run in goroutine 5772
/opt/homebrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2258 +0x7c0
replication-delete-mrf_test.go:485: Erasure: canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
goroutine 5773 [running]:
runtime/debug.Stack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:26 +0x6c
runtime/debug.PrintStack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:18 +0x24
github.com/minio/minio/internal/ioutil.SafeClose[...](...)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/ioutil/ioutil.go:470
github.com/minio/minio/internal/logger/target/http.(*Target).Cancel(0xc000fed6c0)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/logger/target/http/http.go:630 +0x98
github.com/minio/minio/cmd.replicationTestAudit.func2()
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:593 +0xa4
github.com/minio/minio/cmd.testReplicationMRFMarkerRecovery(0xc000f31d48, {0x1099ca8b0, _}, {_, _}, {_, _}, {_, _}, {{0x105dfce44, ...}, ...}, ...)
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:486 +0x5cb8
github.com/minio/minio/cmd.TestReplicationMRFMarkerRecovery.func1.1({0x1099ca8b0, 0xc00251aea0}, {0x105df2e8e, 0x7}, {0xc0024cc700, 0x3c}, {0x109974420, _}, {{0x105dfce44, 0xa}, ...}, ...)
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:53 +0x124
github.com/minio/minio/cmd.ExecObjectLayerAPITest({0xc000f31d48, 0xc002f98030, {0xc002e26720, 0x1, 0x1}, 0x0, {0x0, 0x0, 0x0, {0x0, ...}, ...}})
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/test-utils_test.go:1817 +0x5f0
github.com/minio/minio/cmd.TestReplicationMRFMarkerRecovery.func1(0xc000f31d48)
/Users/vonng/.codex/worktrees/aa3f/silo/cmd/replication-delete-mrf_test.go:52 +0x15c
testing.tRunner(0xc000f31d48, 0xc002777e00)
/opt/homebrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2193 +0x168
created by testing.(*T).Run in goroutine 5772
/opt/homebrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2258 +0x7c0
=== RUN TestReplicationMRFMarkerRecovery/lock-failure
replication-delete-mrf_test.go:485: ErasureSD: lock-failure recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: lock-failure recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error#01
=== RUN TestReplicationMRFMarkerRecovery/legacy
replication-delete-mrf_test.go:485: ErasureSD: legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/unrecorded-purge
replication-delete-mrf_test.go:485: ErasureSD: unrecorded-purge recovered; 2 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: unrecorded-purge recovered; 2 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/two-targets
replication-delete-mrf_test.go:485: ErasureSD: two-targets recovered; 2 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: two-targets recovered; 2 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/two-targets-offline
replication-delete-mrf_test.go:485: ErasureSD: two-targets-offline recovered; 2 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: two-targets-offline recovered; 2 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/replica-source
replication-delete-mrf_test.go:485: ErasureSD: replica-source recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: replica-source recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/lost-reply-canonical
replication-delete-mrf_test.go:485: ErasureSD: lost-reply-canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: lost-reply-canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/lost-reply-legacy
replication-delete-mrf_test.go:485: ErasureSD: lost-reply-legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: lost-reply-legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/creation
replication-delete-mrf_test.go:485: ErasureSD: creation recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: creation recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/partial-creation-block
=== RUN TestReplicationMRFMarkerRecovery/retry-budget-and-scanner
replication-delete-mrf_test.go:485: ErasureSD: retry-budget-and-scanner recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: retry-budget-and-scanner recovered; 1 target(s), persisted MRF, source/target metadata checked
--- PASS: TestReplicationMRFMarkerRecovery (8.55s)
--- PASS: TestReplicationMRFMarkerRecovery/canonical (0.51s)
--- PASS: TestReplicationMRFMarkerRecovery/lock-failure (0.56s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata (2.02s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker#01 (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version#01 (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket#01 (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object#01 (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime#01 (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing#01 (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error#01 (0.11s)
--- PASS: TestReplicationMRFMarkerRecovery/legacy (0.48s)
--- PASS: TestReplicationMRFMarkerRecovery/unrecorded-purge (0.59s)
--- PASS: TestReplicationMRFMarkerRecovery/two-targets (0.47s)
--- PASS: TestReplicationMRFMarkerRecovery/two-targets-offline (0.53s)
--- PASS: TestReplicationMRFMarkerRecovery/replica-source (0.43s)
--- PASS: TestReplicationMRFMarkerRecovery/lost-reply-canonical (0.68s)
--- PASS: TestReplicationMRFMarkerRecovery/lost-reply-legacy (0.52s)
--- PASS: TestReplicationMRFMarkerRecovery/creation (0.43s)
--- PASS: TestReplicationMRFMarkerRecovery/partial-creation-block (0.78s)
--- PASS: TestReplicationMRFMarkerRecovery/retry-budget-and-scanner (0.55s)
=== RUN TestReplicationDeleteQueueFullRetryBudget
--- PASS: TestReplicationDeleteQueueFullRetryBudget (0.00s)
=== RUN TestReplicateDeleteOperationExits
=== RUN TestReplicateDeleteOperationExits/marker-creation/pending-success
=== RUN TestReplicateDeleteOperationExits/marker-creation/completed-creation
=== RUN TestReplicateDeleteOperationExits/marker-creation/existing-marker
=== RUN TestReplicateDeleteOperationExits/marker-creation/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/marker-creation/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/marker-creation/head-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-creation/head-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-creation/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-creation/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/marker-creation/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-creation/offline
=== RUN TestReplicateDeleteOperationExits/marker-creation/retry-failed
=== RUN TestReplicateDeleteOperationExits/marker-creation/purge-complete
=== RUN TestReplicateDeleteOperationExits/marker-creation/resync-success
=== RUN TestReplicateDeleteOperationExits/marker-creation/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/marker-creation/resync-failure
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/pending-success
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/completed-creation
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/existing-marker
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/head-unavailable
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/head-forbidden
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/offline
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/retry-failed
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/purge-complete
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/resync-success
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/resync-failure
=== RUN TestReplicateDeleteOperationExits/marker-purge/pending-success
=== RUN TestReplicateDeleteOperationExits/marker-purge/completed-creation
=== RUN TestReplicateDeleteOperationExits/marker-purge/existing-marker
=== RUN TestReplicateDeleteOperationExits/marker-purge/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/marker-purge/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/marker-purge/head-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-purge/head-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-purge/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-purge/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/marker-purge/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-purge/offline
=== RUN TestReplicateDeleteOperationExits/marker-purge/retry-failed
=== RUN TestReplicateDeleteOperationExits/marker-purge/purge-complete
=== RUN TestReplicateDeleteOperationExits/marker-purge/resync-success
=== RUN TestReplicateDeleteOperationExits/marker-purge/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/marker-purge/resync-failure
=== RUN TestReplicateDeleteOperationExits/object-purge/pending-success
=== RUN TestReplicateDeleteOperationExits/object-purge/completed-creation
=== RUN TestReplicateDeleteOperationExits/object-purge/existing-marker
=== RUN TestReplicateDeleteOperationExits/object-purge/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/object-purge/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/object-purge/head-unavailable
=== RUN TestReplicateDeleteOperationExits/object-purge/head-forbidden
=== RUN TestReplicateDeleteOperationExits/object-purge/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/object-purge/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/object-purge/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/object-purge/offline
=== RUN TestReplicateDeleteOperationExits/object-purge/retry-failed
=== RUN TestReplicateDeleteOperationExits/object-purge/purge-complete
=== RUN TestReplicateDeleteOperationExits/object-purge/resync-success
=== RUN TestReplicateDeleteOperationExits/object-purge/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/object-purge/resync-failure
--- PASS: TestReplicateDeleteOperationExits (0.58s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/head-read-quorum (0.07s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/head-unavailable (0.11s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/delete-unavailable (0.10s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/resync-failure (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/head-read-quorum (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/head-unavailable (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/delete-unavailable (0.06s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/resync-failure (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/head-read-quorum (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/head-unavailable (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/delete-unavailable (0.03s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/resync-failure (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/head-read-quorum (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/head-unavailable (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/delete-unavailable (0.16s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/resync-failure (0.00s)
=== RUN TestReplicateDeletePurgeMissingTargetState
--- PASS: TestReplicateDeletePurgeMissingTargetState (0.00s)
=== RUN TestReplicationMRFDropsVisible
=== RUN TestReplicationMRFDropsVisible/bucket
=== RUN TestReplicationMRFDropsVisible/node
--- PASS: TestReplicationMRFDropsVisible (0.01s)
--- PASS: TestReplicationMRFDropsVisible/bucket (0.00s)
--- PASS: TestReplicationMRFDropsVisible/node (0.00s)
PASS
ok github.com/minio/minio/cmd 14.031s
@@ -0,0 +1,444 @@
=== RUN TestReplicatedInfos
--- PASS: TestReplicatedInfos (0.00s)
=== RUN TestReplicationResync
--- PASS: TestReplicationResync (0.00s)
=== RUN TestReplicationResyncwrapper
--- PASS: TestReplicationResyncwrapper (0.00s)
=== RUN TestReplicationValidationObjectUsesRulePrefix
=== RUN TestReplicationValidationObjectUsesRulePrefix/empty_prefix
=== RUN TestReplicationValidationObjectUsesRulePrefix/filter_prefix
=== RUN TestReplicationValidationObjectUsesRulePrefix/and_prefix
--- PASS: TestReplicationValidationObjectUsesRulePrefix (0.00s)
--- PASS: TestReplicationValidationObjectUsesRulePrefix/empty_prefix (0.00s)
--- PASS: TestReplicationValidationObjectUsesRulePrefix/filter_prefix (0.00s)
--- PASS: TestReplicationValidationObjectUsesRulePrefix/and_prefix (0.00s)
=== RUN TestResyncBucketFinalize
=== RUN TestResyncBucketFinalize/persists_complete_counts
=== RUN TestResyncBucketFinalize/parent_cancel_during_drain_downgrades_to_failed
=== RUN TestResyncBucketFinalize/user_cancel_persists_canceled
--- PASS: TestResyncBucketFinalize (0.11s)
--- PASS: TestResyncBucketFinalize/persists_complete_counts (0.01s)
--- PASS: TestResyncBucketFinalize/parent_cancel_during_drain_downgrades_to_failed (0.01s)
--- PASS: TestResyncBucketFinalize/user_cancel_persists_canceled (0.01s)
=== RUN TestResyncFinishDrainsResults
--- PASS: TestResyncFinishDrainsResults (0.00s)
=== RUN TestResyncFinishWaitsForInflightWorker
--- PASS: TestResyncFinishWaitsForInflightWorker (0.00s)
=== RUN TestResyncResultFor
=== RUN TestResyncResultFor/completed_update
=== RUN TestResyncResultFor/failed_update_over_existing_version
=== RUN TestResyncResultFor/completed_but_errored_is_a_failure
=== RUN TestResyncResultFor/delete_failed
=== RUN TestResyncResultFor/delete_marker_replicated_counts_zero_bytes
=== RUN TestResyncResultFor/arn_not_attempted_is_a_failure
=== RUN TestResyncResultFor/completed_with_zero_size_falls_back_to_object_size
=== RUN TestResyncResultFor/version_purge_complete_is_a_success
=== RUN TestResyncResultFor/version_purge_failed_is_a_failure
=== RUN TestResyncResultFor/benign_duplicate_412_is_a_success
--- PASS: TestResyncResultFor (0.00s)
--- PASS: TestResyncResultFor/completed_update (0.00s)
--- PASS: TestResyncResultFor/failed_update_over_existing_version (0.00s)
--- PASS: TestResyncResultFor/completed_but_errored_is_a_failure (0.00s)
--- PASS: TestResyncResultFor/delete_failed (0.00s)
--- PASS: TestResyncResultFor/delete_marker_replicated_counts_zero_bytes (0.00s)
--- PASS: TestResyncResultFor/arn_not_attempted_is_a_failure (0.00s)
--- PASS: TestResyncResultFor/completed_with_zero_size_falls_back_to_object_size (0.00s)
--- PASS: TestResyncResultFor/version_purge_complete_is_a_success (0.00s)
--- PASS: TestResyncResultFor/version_purge_failed_is_a_failure (0.00s)
--- PASS: TestResyncResultFor/benign_duplicate_412_is_a_success (0.00s)
=== RUN TestReplicationActionForTargetRetentionRemoval
=== RUN TestReplicationActionForTargetRetentionRemoval/removal_confirmed_by_destination
=== RUN TestReplicationActionForTargetRetentionRemoval/destination_still_holds_the_retention_hidden_from_HEAD
=== RUN TestReplicationActionForTargetRetentionRemoval/retention_hidden_from_HEAD_by_permissions
=== RUN TestReplicationActionForTargetRetentionRemoval/destination_reports_no_object_lock_configuration
=== RUN TestReplicationActionForTargetRetentionRemoval/version_never_had_retention_is_not_confirmed
--- PASS: TestReplicationActionForTargetRetentionRemoval (0.00s)
--- PASS: TestReplicationActionForTargetRetentionRemoval/removal_confirmed_by_destination (0.00s)
--- PASS: TestReplicationActionForTargetRetentionRemoval/destination_still_holds_the_retention_hidden_from_HEAD (0.00s)
--- PASS: TestReplicationActionForTargetRetentionRemoval/retention_hidden_from_HEAD_by_permissions (0.00s)
--- PASS: TestReplicationActionForTargetRetentionRemoval/destination_reports_no_object_lock_configuration (0.00s)
--- PASS: TestReplicationActionForTargetRetentionRemoval/version_never_had_retention_is_not_confirmed (0.00s)
=== RUN TestReplicationActionForTargetNullVersionResync
=== RUN TestReplicationActionForTargetNullVersionResync/destination_holds_retention
=== RUN TestReplicationActionForTargetNullVersionResync/retention_read_denied
--- PASS: TestReplicationActionForTargetNullVersionResync (0.00s)
--- PASS: TestReplicationActionForTargetNullVersionResync/destination_holds_retention (0.00s)
--- PASS: TestReplicationActionForTargetNullVersionResync/retention_read_denied (0.00s)
=== RUN TestReplicationActionForTargetTimestampOnlyRemoval
=== RUN TestReplicationActionForTargetTimestampOnlyRemoval/retention_hidden_from_HEAD_by_permissions
=== RUN TestReplicationActionForTargetTimestampOnlyRemoval/destination_still_holds_the_retention
=== RUN TestReplicationActionForTargetTimestampOnlyRemoval/removal_confirmed_by_destination
--- PASS: TestReplicationActionForTargetTimestampOnlyRemoval (0.00s)
--- PASS: TestReplicationActionForTargetTimestampOnlyRemoval/retention_hidden_from_HEAD_by_permissions (0.00s)
--- PASS: TestReplicationActionForTargetTimestampOnlyRemoval/destination_still_holds_the_retention (0.00s)
--- PASS: TestReplicationActionForTargetTimestampOnlyRemoval/removal_confirmed_by_destination (0.00s)
=== RUN TestReplicateDeleteMarkerPurge
=== RUN TestReplicateDeleteMarkerPurge/recover_legacy_false
=== RUN TestReplicateDeleteMarkerPurge/recover_legacy_true
--- PASS: TestReplicateDeleteMarkerPurge (0.47s)
--- PASS: TestReplicateDeleteMarkerPurge/recover_legacy_false (0.26s)
--- PASS: TestReplicateDeleteMarkerPurge/recover_legacy_true (0.21s)
=== RUN TestReplicateDeleteMarkerTargetSemantics
=== RUN TestReplicateDeleteMarkerTargetSemantics/existing_marker_is_idempotent
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_removes_an_existing_marker
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_forbidden
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_method_rejected
=== RUN TestReplicateDeleteMarkerTargetSemantics/purge_unavailable
--- PASS: TestReplicateDeleteMarkerTargetSemantics (0.17s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/existing_marker_is_idempotent (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_removes_an_existing_marker (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_forbidden (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_method_rejected (0.00s)
--- PASS: TestReplicateDeleteMarkerTargetSemantics/purge_unavailable (0.17s)
=== RUN TestReplicationMRFMarkerRecovery
=== RUN TestReplicationMRFMarkerRecovery/canonical
replication-delete-mrf_test.go:485: ErasureSD: canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
goroutine 6684 [running]:
runtime/debug.Stack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:26 +0x64
runtime/debug.PrintStack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:18 +0x1c
github.com/minio/minio/internal/ioutil.SafeClose[...](...)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/ioutil/ioutil.go:470
github.com/minio/minio/internal/logger/target/http.(*Target).Cancel(0x4add905116c0)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/logger/target/http/http.go:630 +0x74
created by github.com/minio/minio/internal/logger.cancelTargets in goroutine 6745
/Users/vonng/.codex/worktrees/aa3f/silo/internal/logger/targets.go:213 +0x28
replication-delete-mrf_test.go:485: Erasure: canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
goroutine 10189 [running]:
runtime/debug.Stack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:26 +0x64
runtime/debug.PrintStack()
/opt/homebrew/Cellar/go/1.27.1/libexec/src/runtime/debug/stack.go:18 +0x1c
github.com/minio/minio/internal/ioutil.SafeClose[...](...)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/ioutil/ioutil.go:470
github.com/minio/minio/internal/logger/target/http.(*Target).Cancel(0x4add9bf7d380)
/Users/vonng/.codex/worktrees/aa3f/silo/internal/logger/target/http/http.go:630 +0x74
created by github.com/minio/minio/internal/logger.cancelTargets in goroutine 6745
/Users/vonng/.codex/worktrees/aa3f/silo/internal/logger/targets.go:213 +0x28
=== RUN TestReplicationMRFMarkerRecovery/lock-failure
replication-delete-mrf_test.go:485: ErasureSD: lock-failure recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: lock-failure recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing#01
=== RUN TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error#01
=== RUN TestReplicationMRFMarkerRecovery/legacy
replication-delete-mrf_test.go:485: ErasureSD: legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/unrecorded-purge
replication-delete-mrf_test.go:485: ErasureSD: unrecorded-purge recovered; 2 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: unrecorded-purge recovered; 2 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/two-targets
replication-delete-mrf_test.go:485: ErasureSD: two-targets recovered; 2 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: two-targets recovered; 2 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/two-targets-offline
replication-delete-mrf_test.go:485: ErasureSD: two-targets-offline recovered; 2 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: two-targets-offline recovered; 2 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/replica-source
replication-delete-mrf_test.go:485: ErasureSD: replica-source recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: replica-source recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/lost-reply-canonical
replication-delete-mrf_test.go:485: ErasureSD: lost-reply-canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: lost-reply-canonical recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/lost-reply-legacy
replication-delete-mrf_test.go:485: ErasureSD: lost-reply-legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: lost-reply-legacy recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/creation
replication-delete-mrf_test.go:485: ErasureSD: creation recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: creation recovered; 1 target(s), persisted MRF, source/target metadata checked
=== RUN TestReplicationMRFMarkerRecovery/partial-creation-block
=== RUN TestReplicationMRFMarkerRecovery/retry-budget-and-scanner
replication-delete-mrf_test.go:485: ErasureSD: retry-budget-and-scanner recovered; 1 target(s), persisted MRF, source/target metadata checked
replication-delete-mrf_test.go:485: Erasure: retry-budget-and-scanner recovered; 1 target(s), persisted MRF, source/target metadata checked
--- PASS: TestReplicationMRFMarkerRecovery (6.13s)
--- PASS: TestReplicationMRFMarkerRecovery/canonical (0.22s)
--- PASS: TestReplicationMRFMarkerRecovery/lock-failure (0.24s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata (1.90s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/empty-info#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/not-a-marker#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-version#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-bucket#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/wrong-object#01 (0.12s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/zero-modtime#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/missing#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/invalid-MRF-metadata/read-error#01 (0.10s)
--- PASS: TestReplicationMRFMarkerRecovery/legacy (0.26s)
--- PASS: TestReplicationMRFMarkerRecovery/unrecorded-purge (0.27s)
--- PASS: TestReplicationMRFMarkerRecovery/two-targets (0.28s)
--- PASS: TestReplicationMRFMarkerRecovery/two-targets-offline (0.29s)
--- PASS: TestReplicationMRFMarkerRecovery/replica-source (0.28s)
--- PASS: TestReplicationMRFMarkerRecovery/lost-reply-canonical (0.56s)
--- PASS: TestReplicationMRFMarkerRecovery/lost-reply-legacy (0.56s)
--- PASS: TestReplicationMRFMarkerRecovery/creation (0.34s)
--- PASS: TestReplicationMRFMarkerRecovery/partial-creation-block (0.47s)
--- PASS: TestReplicationMRFMarkerRecovery/retry-budget-and-scanner (0.45s)
=== RUN TestReplicationDeleteQueueFullRetryBudget
--- PASS: TestReplicationDeleteQueueFullRetryBudget (0.00s)
=== RUN TestReplicateDeleteOperationExits
=== RUN TestReplicateDeleteOperationExits/marker-creation/pending-success
=== RUN TestReplicateDeleteOperationExits/marker-creation/completed-creation
=== RUN TestReplicateDeleteOperationExits/marker-creation/existing-marker
=== RUN TestReplicateDeleteOperationExits/marker-creation/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/marker-creation/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/marker-creation/head-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-creation/head-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-creation/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-creation/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/marker-creation/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-creation/offline
=== RUN TestReplicateDeleteOperationExits/marker-creation/retry-failed
=== RUN TestReplicateDeleteOperationExits/marker-creation/purge-complete
=== RUN TestReplicateDeleteOperationExits/marker-creation/resync-success
=== RUN TestReplicateDeleteOperationExits/marker-creation/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/marker-creation/resync-failure
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/pending-success
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/completed-creation
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/existing-marker
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/head-unavailable
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/head-forbidden
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/offline
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/retry-failed
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/purge-complete
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/resync-success
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/legacy-marker-purge/resync-failure
=== RUN TestReplicateDeleteOperationExits/marker-purge/pending-success
=== RUN TestReplicateDeleteOperationExits/marker-purge/completed-creation
=== RUN TestReplicateDeleteOperationExits/marker-purge/existing-marker
=== RUN TestReplicateDeleteOperationExits/marker-purge/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/marker-purge/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/marker-purge/head-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-purge/head-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-purge/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/marker-purge/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/marker-purge/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/marker-purge/offline
=== RUN TestReplicateDeleteOperationExits/marker-purge/retry-failed
=== RUN TestReplicateDeleteOperationExits/marker-purge/purge-complete
=== RUN TestReplicateDeleteOperationExits/marker-purge/resync-success
=== RUN TestReplicateDeleteOperationExits/marker-purge/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/marker-purge/resync-failure
=== RUN TestReplicateDeleteOperationExits/object-purge/pending-success
=== RUN TestReplicateDeleteOperationExits/object-purge/completed-creation
=== RUN TestReplicateDeleteOperationExits/object-purge/existing-marker
=== RUN TestReplicateDeleteOperationExits/object-purge/head-read-quorum
=== RUN TestReplicateDeleteOperationExits/object-purge/replica-creation-status
=== RUN TestReplicateDeleteOperationExits/object-purge/head-unavailable
=== RUN TestReplicateDeleteOperationExits/object-purge/head-forbidden
=== RUN TestReplicateDeleteOperationExits/object-purge/delete-forbidden
=== RUN TestReplicateDeleteOperationExits/object-purge/delete-method-rejected
=== RUN TestReplicateDeleteOperationExits/object-purge/delete-unavailable
=== RUN TestReplicateDeleteOperationExits/object-purge/offline
=== RUN TestReplicateDeleteOperationExits/object-purge/retry-failed
=== RUN TestReplicateDeleteOperationExits/object-purge/purge-complete
=== RUN TestReplicateDeleteOperationExits/object-purge/resync-success
=== RUN TestReplicateDeleteOperationExits/object-purge/resync-already-purged
=== RUN TestReplicateDeleteOperationExits/object-purge/resync-failure
--- PASS: TestReplicateDeleteOperationExits (0.79s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/head-read-quorum (0.06s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/head-unavailable (0.15s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/delete-unavailable (0.20s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-creation/resync-failure (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/head-read-quorum (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/head-unavailable (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/delete-unavailable (0.05s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/legacy-marker-purge/resync-failure (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/head-read-quorum (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/head-unavailable (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/delete-unavailable (0.14s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/marker-purge/resync-failure (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/pending-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/completed-creation (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/existing-marker (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/head-read-quorum (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/replica-creation-status (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/head-unavailable (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/head-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/delete-forbidden (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/delete-method-rejected (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/delete-unavailable (0.16s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/offline (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/retry-failed (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/purge-complete (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/resync-success (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/resync-already-purged (0.00s)
--- PASS: TestReplicateDeleteOperationExits/object-purge/resync-failure (0.00s)
=== RUN TestReplicateDeletePurgeMissingTargetState
--- PASS: TestReplicateDeletePurgeMissingTargetState (0.00s)
=== RUN TestReplicationMRFDropsVisible
=== RUN TestReplicationMRFDropsVisible/bucket
=== RUN TestReplicationMRFDropsVisible/node
--- PASS: TestReplicationMRFDropsVisible (0.00s)
--- PASS: TestReplicationMRFDropsVisible/bucket (0.00s)
--- PASS: TestReplicationMRFDropsVisible/node (0.00s)
=== RUN TestReplicationObjectDeleteWorkerAffinity
--- PASS: TestReplicationObjectDeleteWorkerAffinity (0.00s)
=== RUN TestSiteResyncCancelState
--- PASS: TestSiteResyncCancelState (0.00s)
=== RUN TestResyncRecoveryOwnsLeaderContext
=== RUN TestResyncRecoveryOwnsLeaderContext/lose_leader_false
=== RUN TestResyncRecoveryOwnsLeaderContext/lose_leader_true
--- PASS: TestResyncRecoveryOwnsLeaderContext (0.00s)
--- PASS: TestResyncRecoveryOwnsLeaderContext/lose_leader_false (0.00s)
--- PASS: TestResyncRecoveryOwnsLeaderContext/lose_leader_true (0.00s)
=== RUN TestResyncCancelRouting
--- PASS: TestResyncCancelRouting (0.00s)
=== RUN TestResyncCancellationWinsFinalization
--- PASS: TestResyncCancellationWinsFinalization (0.00s)
=== RUN TestResyncCancelFullWorkerQueue
--- PASS: TestResyncCancelFullWorkerQueue (0.00s)
=== RUN TestResyncCancelBlockedWalkReceive
--- PASS: TestResyncCancelBlockedWalkReceive (0.00s)
=== RUN TestResyncCancelsOwnedWalkOnError
--- PASS: TestResyncCancelsOwnedWalkOnError (0.00s)
=== RUN TestReplicationTrustControlsInternalOptionsAndEvents
--- PASS: TestReplicationTrustControlsInternalOptionsAndEvents (0.00s)
PASS
ok github.com/minio/minio/cmd 10.118s
=== RUN TestReplicate
=== RUN TestReplicate/#00
=== RUN TestReplicate/c1test
=== RUN TestReplicate/c1test#01
=== RUN TestReplicate/c1test#02
=== RUN TestReplicate/c1test#03
=== RUN TestReplicate/c1test#04
=== RUN TestReplicate/c1test#05
=== RUN TestReplicate/c1test#06
=== RUN TestReplicate/c1test#07
=== RUN TestReplicate/c2test
=== RUN TestReplicate/c2test#01
=== RUN TestReplicate/c2test#02
=== RUN TestReplicate/c2test#03
=== RUN TestReplicate/c2test#04
=== RUN TestReplicate/c2test#05
=== RUN TestReplicate/c2test#06
=== RUN TestReplicate/xy/c3test
=== RUN TestReplicate/xyz/c3test
=== RUN TestReplicate/xyz/c3test#01
=== RUN TestReplicate/xyz/c3test#02
=== RUN TestReplicate/xyz/c3test#03
=== RUN TestReplicate/xyz/c3test#04
=== RUN TestReplicate/xy/c3test#01
=== RUN TestReplicate/xyz/c3test#05
=== RUN TestReplicate/xyz/c3test#06
=== RUN TestReplicate/xyz/c3test#07
=== RUN TestReplicate/abc/c3test
=== RUN TestReplicate/xy/c4test
=== RUN TestReplicate/xa/c4test
=== RUN TestReplicate/xyz/c4test
=== RUN TestReplicate/xyz/c4test#01
=== RUN TestReplicate/xyz/c4test#02
=== RUN TestReplicate/xyz/c4test#03
=== RUN TestReplicate/abc/c4test
=== RUN TestReplicate/abc/c4test#01
=== RUN TestReplicate/abc/c4test#02
=== RUN TestReplicate/abc/c4test#03
=== RUN TestReplicate/abc/c4test#04
=== RUN TestReplicate/xy/c5test
=== RUN TestReplicate/xa/c5test
--- PASS: TestReplicate (0.00s)
--- PASS: TestReplicate/#00 (0.00s)
--- PASS: TestReplicate/c1test (0.00s)
--- PASS: TestReplicate/c1test#01 (0.00s)
--- PASS: TestReplicate/c1test#02 (0.00s)
--- PASS: TestReplicate/c1test#03 (0.00s)
--- PASS: TestReplicate/c1test#04 (0.00s)
--- PASS: TestReplicate/c1test#05 (0.00s)
--- PASS: TestReplicate/c1test#06 (0.00s)
--- PASS: TestReplicate/c1test#07 (0.00s)
--- PASS: TestReplicate/c2test (0.00s)
--- PASS: TestReplicate/c2test#01 (0.00s)
--- PASS: TestReplicate/c2test#02 (0.00s)
--- PASS: TestReplicate/c2test#03 (0.00s)
--- PASS: TestReplicate/c2test#04 (0.00s)
--- PASS: TestReplicate/c2test#05 (0.00s)
--- PASS: TestReplicate/c2test#06 (0.00s)
--- PASS: TestReplicate/xy/c3test (0.00s)
--- PASS: TestReplicate/xyz/c3test (0.00s)
--- PASS: TestReplicate/xyz/c3test#01 (0.00s)
--- PASS: TestReplicate/xyz/c3test#02 (0.00s)
--- PASS: TestReplicate/xyz/c3test#03 (0.00s)
--- PASS: TestReplicate/xyz/c3test#04 (0.00s)
--- PASS: TestReplicate/xy/c3test#01 (0.00s)
--- PASS: TestReplicate/xyz/c3test#05 (0.00s)
--- PASS: TestReplicate/xyz/c3test#06 (0.00s)
--- PASS: TestReplicate/xyz/c3test#07 (0.00s)
--- PASS: TestReplicate/abc/c3test (0.00s)
--- PASS: TestReplicate/xy/c4test (0.00s)
--- PASS: TestReplicate/xa/c4test (0.00s)
--- PASS: TestReplicate/xyz/c4test (0.00s)
--- PASS: TestReplicate/xyz/c4test#01 (0.00s)
--- PASS: TestReplicate/xyz/c4test#02 (0.00s)
--- PASS: TestReplicate/xyz/c4test#03 (0.00s)
--- PASS: TestReplicate/abc/c4test (0.00s)
--- PASS: TestReplicate/abc/c4test#01 (0.00s)
--- PASS: TestReplicate/abc/c4test#02 (0.00s)
--- PASS: TestReplicate/abc/c4test#03 (0.00s)
--- PASS: TestReplicate/abc/c4test#04 (0.00s)
--- PASS: TestReplicate/xy/c5test (0.00s)
--- PASS: TestReplicate/xa/c5test (0.00s)
PASS
ok github.com/minio/minio/internal/bucket/replication 0.624s
@@ -0,0 +1,101 @@
{
"baseline": "9ebe81c1b3611f9cc73e676b5b741c2be62c467a",
"source_sha256": {
"cmd/bucket-replication.go": "999c2818a8980cbeb55cfcbc244840069fb44e042b4b4d6ef7668c2660ce31e0",
"cmd/bucket-replication-utils.go": "365641c760901641e8320cc5123697ab92a46f1add612048b991ed2d1cfad43b",
"cmd/replication-delete-marker_test.go": "d967787804d558ac6266b113228fdf4a4f9fcb7cab39138a4fb07558814ccca4",
"cmd/replication-delete-operation_test.go": "2888a04a543324776041316de2821f388d28c3c1a6f5d0031e5ac9d34f58d504",
"cmd/replication-delete-mrf_test.go": "5e160f7e19cbbb8cd5fa4e7ffd9cff9e09361b3fc4c5ee5ae61458f99c777781"
},
"checks": [
{
"name": "scope",
"command": [
"go",
"test",
"-p",
"2",
"./cmd",
"./internal/bucket/replication",
"-run",
"TestReplication|TestReplicate|TestMRF|TestResync|TestSiteResync",
"-count=1",
"-v"
],
"exit_code": 0,
"seconds": 38.664,
"log": "/Users/vonng/tmp/silo-r6-20260915-aa3f/final-scope.log",
"log_sha256": "c0f286b61b0a8e668dc92f4d62800f010970331e257ea49db504373d39574370",
"finished_at_utc": "2026-09-15T16:16:22.027596+00:00"
},
{
"name": "race",
"command": [
"go",
"test",
"-race",
"-p",
"2",
"./cmd",
"-run",
"TestReplicateDelete|TestReplicationMRF|TestReplicationDeleteQueueFull",
"-count=1",
"-v"
],
"exit_code": 0,
"seconds": 72.883,
"log": "/Users/vonng/tmp/silo-r6-20260915-aa3f/final-race.log",
"log_sha256": "826c3de1632f026f806474328807408c8e197726a30a70ffff4376004ec51e53",
"finished_at_utc": "2026-09-15T16:17:34.912761+00:00"
},
{
"name": "build",
"command": [
"go",
"build",
"-p",
"2",
"./..."
],
"exit_code": 0,
"seconds": 39.464,
"log": "/Users/vonng/tmp/silo-r6-20260915-aa3f/final-build.log",
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"finished_at_utc": "2026-09-15T16:18:14.378361+00:00"
},
{
"name": "vet",
"command": [
"go",
"vet",
"-p",
"2",
"./cmd",
"./internal/bucket/replication"
],
"exit_code": 0,
"seconds": 10.278,
"log": "/Users/vonng/tmp/silo-r6-20260915-aa3f/final-vet.log",
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"finished_at_utc": "2026-09-15T16:18:24.657311+00:00"
},
{
"name": "lint",
"command": [
"/Users/vonng/pgsty/silo/.bin/golangci/v2.13.1/golangci-lint",
"run",
"--build-tags",
"kqueue",
"--timeout=10m",
"--config",
"./.golangci.yml"
],
"exit_code": 0,
"seconds": 126.658,
"log": "/Users/vonng/tmp/silo-r6-20260915-aa3f/final-lint.log",
"log_sha256": "e92606b0bf483111dff0a120c315ea165821348f31365020e2468a0059095c47",
"finished_at_utc": "2026-09-15T16:20:31.317818+00:00"
}
],
"source_unchanged": true
}