Browse Source

refactoring

pull/7402/head
chrislu 2 months ago
parent
commit
6acfc16eda
  1. 40
      weed/filer/filer_deletion.go

40
weed/filer/filer_deletion.go

@ -355,17 +355,17 @@ func (f *Filer) processDeletionBatch(toDeleteFileIds []string, lookupFunc func([
outcome := classifyDeletionOutcome(fileId, resultsByFileId) outcome := classifyDeletionOutcome(fileId, resultsByFileId)
switch outcome.status { switch outcome.status {
case "success":
case deletionOutcomeSuccess:
successCount++ successCount++
case "not_found":
case deletionOutcomeNotFound:
notFoundCount++ notFoundCount++
case "retryable", "no_result":
case deletionOutcomeRetryable, deletionOutcomeNoResult:
retryableErrorCount++ retryableErrorCount++
f.DeletionRetryQueue.AddOrUpdate(fileId, outcome.errorMsg) f.DeletionRetryQueue.AddOrUpdate(fileId, outcome.errorMsg)
if len(errorDetails) < MaxLoggedErrorDetails { if len(errorDetails) < MaxLoggedErrorDetails {
errorDetails = append(errorDetails, fileId+": "+outcome.errorMsg+" (will retry)") errorDetails = append(errorDetails, fileId+": "+outcome.errorMsg+" (will retry)")
} }
case "permanent":
case deletionOutcomePermanent:
permanentErrorCount++ permanentErrorCount++
if len(errorDetails) < MaxLoggedErrorDetails { if len(errorDetails) < MaxLoggedErrorDetails {
errorDetails = append(errorDetails, fileId+": "+outcome.errorMsg+" (permanent)") errorDetails = append(errorDetails, fileId+": "+outcome.errorMsg+" (permanent)")
@ -396,9 +396,17 @@ func (f *Filer) processDeletionBatch(toDeleteFileIds []string, lookupFunc func([
} }
} }
const (
deletionOutcomeSuccess = "success"
deletionOutcomeNotFound = "not_found"
deletionOutcomeRetryable = "retryable"
deletionOutcomePermanent = "permanent"
deletionOutcomeNoResult = "no_result"
)
// deletionOutcome represents the result of classifying deletion results for a file // deletionOutcome represents the result of classifying deletion results for a file
type deletionOutcome struct { type deletionOutcome struct {
status string // "success", "not_found", "retryable", "permanent", "no_result"
status string // One of the deletionOutcome* constants
errorMsg string errorMsg string
} }
@ -407,7 +415,7 @@ func classifyDeletionOutcome(fileId string, resultsByFileId map[string][]*volume
fileIdResults, found := resultsByFileId[fileId] fileIdResults, found := resultsByFileId[fileId]
if !found { if !found {
return deletionOutcome{ return deletionOutcome{
status: "no_result",
status: deletionOutcomeNoResult,
errorMsg: "no deletion result from volume server", errorMsg: "no deletion result from volume server",
} }
} }
@ -432,9 +440,9 @@ func classifyDeletionOutcome(fileId string, resultsByFileId map[string][]*volume
// Determine overall outcome: permanent errors take precedence, then retryable errors // Determine overall outcome: permanent errors take precedence, then retryable errors
if firstPermanentError != "" { if firstPermanentError != "" {
return deletionOutcome{status: "permanent", errorMsg: firstPermanentError}
return deletionOutcome{status: deletionOutcomePermanent, errorMsg: firstPermanentError}
} else if firstRetryableError != "" { } else if firstRetryableError != "" {
return deletionOutcome{status: "retryable", errorMsg: firstRetryableError}
return deletionOutcome{status: deletionOutcomeRetryable, errorMsg: firstRetryableError}
} else if allSuccessOrNotFound { } else if allSuccessOrNotFound {
// Check if it's pure success or "not found" // Check if it's pure success or "not found"
isPureSuccess := true isPureSuccess := true
@ -445,13 +453,13 @@ func classifyDeletionOutcome(fileId string, resultsByFileId map[string][]*volume
} }
} }
if isPureSuccess { if isPureSuccess {
return deletionOutcome{status: "success", errorMsg: ""}
return deletionOutcome{status: deletionOutcomeSuccess, errorMsg: ""}
} }
return deletionOutcome{status: "not_found", errorMsg: ""}
return deletionOutcome{status: deletionOutcomeNotFound, errorMsg: ""}
} }
// Shouldn't reach here, but return retryable as safe default // Shouldn't reach here, but return retryable as safe default
return deletionOutcome{status: "retryable", errorMsg: "unknown error"}
return deletionOutcome{status: deletionOutcomeRetryable, errorMsg: "unknown error"}
} }
// isRetryableError determines if an error is retryable based on its message. // isRetryableError determines if an error is retryable based on its message.
@ -539,20 +547,20 @@ func (f *Filer) processRetryBatch(readyItems []*DeletionRetryItem, lookupFunc fu
outcome := classifyDeletionOutcome(item.FileId, resultsByFileId) outcome := classifyDeletionOutcome(item.FileId, resultsByFileId)
switch outcome.status { switch outcome.status {
case "success":
case deletionOutcomeSuccess:
successCount++ successCount++
f.DeletionRetryQueue.Remove(item) // Remove from queue (success) f.DeletionRetryQueue.Remove(item) // Remove from queue (success)
glog.V(2).Infof("retry successful for %s after %d attempts", item.FileId, item.RetryCount) glog.V(2).Infof("retry successful for %s after %d attempts", item.FileId, item.RetryCount)
case "not_found":
case deletionOutcomeNotFound:
notFoundCount++ notFoundCount++
f.DeletionRetryQueue.Remove(item) // Remove from queue (already deleted) f.DeletionRetryQueue.Remove(item) // Remove from queue (already deleted)
case "retryable", "no_result":
case deletionOutcomeRetryable, deletionOutcomeNoResult:
retryCount++ retryCount++
if outcome.status == "no_result" {
if outcome.status == deletionOutcomeNoResult {
glog.Warningf("no deletion result for retried file %s, re-queuing to avoid loss", item.FileId) glog.Warningf("no deletion result for retried file %s, re-queuing to avoid loss", item.FileId)
} }
f.DeletionRetryQueue.RequeueForRetry(item, outcome.errorMsg) f.DeletionRetryQueue.RequeueForRetry(item, outcome.errorMsg)
case "permanent":
case deletionOutcomePermanent:
permanentErrorCount++ permanentErrorCount++
f.DeletionRetryQueue.Remove(item) // Remove from queue (permanent failure) f.DeletionRetryQueue.Remove(item) // Remove from queue (permanent failure)
glog.Warningf("permanent error on retry for %s after %d attempts: %s", item.FileId, item.RetryCount, outcome.errorMsg) glog.Warningf("permanent error on retry for %s after %d attempts: %s", item.FileId, item.RetryCount, outcome.errorMsg)

Loading…
Cancel
Save