From 7f25ccf1195cc5f4f75faa78a86d03826d1f3d36 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 1 Nov 2026 13:43:19 -0800 Subject: [PATCH] filer: retry deletes refused for an offline replica Co-Authored-By: Claude Opus 5.5 --- weed/filer/filer_deletion.go | 1 + weed/filer/filer_deletion_test.go | 1 + 2 files changed, 2 insertions(+) diff --git a/weed/filer/filer_deletion.go b/weed/filer/filer_deletion.go index 0fe0f62d96..4e322d79b5 100644 --- a/weed/filer/filer_deletion.go +++ b/weed/filer/filer_deletion.go @@ -58,6 +58,7 @@ var retryablePatterns = []string{ "lookup failed", // Volume server discovery issues "too many requests", // Rate limiting / backpressure "try again", // Explicit retry suggestion + "replication copy count", // A replica is offline; deletes wait for it to return } // DeletionRetryItem represents a file deletion that failed and needs to be retried diff --git a/weed/filer/filer_deletion_test.go b/weed/filer/filer_deletion_test.go index f1ac3343d2..c2a0cda5dc 100644 --- a/weed/filer/filer_deletion_test.go +++ b/weed/filer/filer_deletion_test.go @@ -192,6 +192,7 @@ func TestIsRetryableError(t *testing.T) { {"service unavailable", true, "service unavailable"}, {"i/o timeout", true, "I/O timeout"}, {"broken pipe", true, "broken pipe"}, + {"replication locations [1] is less than volume 9 replication copy count [2]", true, "replica offline"}, {"not found", false, "not found (not retryable)"}, {"invalid file id", false, "invalid input (not retryable)"}, {"", false, "empty error"},