diff --git a/cmd/data-scanner-metric.go b/cmd/data-scanner-metric.go index 6d5d438d6..16cd47a61 100644 --- a/cmd/data-scanner-metric.go +++ b/cmd/data-scanner-metric.go @@ -142,14 +142,14 @@ func (p *scannerMetrics) incTime(s scannerMetric, d time.Duration) { // timeILM times an ILM action. // lifecycle.NoneAction is ignored. // Use for s < scannerMetricLastRealtime -func (p *scannerMetrics) timeILM(a lifecycle.Action) func() { +func (p *scannerMetrics) timeILM(a lifecycle.Action) func(versions uint64) { if a == lifecycle.NoneAction || a >= lifecycle.ActionCount { - return func() {} + return func(_ uint64) {} } startTime := time.Now() - return func() { + return func(versions uint64) { duration := time.Since(startTime) - atomic.AddUint64(&p.actions[a], 1) + atomic.AddUint64(&p.actions[a], versions) p.actionsLatency[a].add(duration) } } diff --git a/cmd/data-scanner.go b/cmd/data-scanner.go index c3e7c99fe..b9b8237d7 100644 --- a/cmd/data-scanner.go +++ b/cmd/data-scanner.go @@ -930,7 +930,15 @@ func (i *scannerItem) applyLifecycle(ctx context.Context, o ObjectLayer, oi Obje console.Debugf(applyActionsLogPrefix+" lifecycle: %q Initial scan: %v\n", i.objectPath(), lcEvt.Action) } } - defer globalScannerMetrics.timeILM(lcEvt.Action)() + defer func() { + if applied { + numVersions := uint64(1) + if lcEvt.Action == lifecycle.DeleteAllVersionsAction { + numVersions = uint64(oi.NumVersions) + } + globalScannerMetrics.timeILM(lcEvt.Action)(numVersions) + } + }() switch lcEvt.Action { case lifecycle.DeleteAction, lifecycle.DeleteVersionAction, lifecycle.DeleteRestoredAction, lifecycle.DeleteRestoredVersionAction, lifecycle.DeleteAllVersionsAction: diff --git a/cmd/xl-storage.go b/cmd/xl-storage.go index 20f88c69f..b14d65211 100644 --- a/cmd/xl-storage.go +++ b/cmd/xl-storage.go @@ -558,8 +558,13 @@ func (s *xlStorage) NSScanner(ctx context.Context, cache dataUsageCache, updates for _, oi := range objInfos { done = globalScannerMetrics.time(scannerMetricApplyVersion) sz := item.applyActions(ctx, objAPI, oi, &sizeS) - actualSz, _ := oi.GetActualSize() done() + + actualSz, err := oi.GetActualSize() + if err != nil { + continue + } + if oi.DeleteMarker { sizeS.deleteMarkers++ }