From 775fadcfcf0e7d67804edf55595a10ffb33f24c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Sat, 11 Apr 2026 11:59:07 -0700 Subject: [PATCH] fix(general): retained log size double counting (#5302) Fix computation CleanupLogsStats.RetainedBlobSize. The size of the first blob being deleted was also accounted towards the retained blob size. Fix: retainedSize is now incremented only after the size check. Rename package-private rate limiter variable from limit to negativeValueWarningLimit for clarity. --- repo/maintenance/cleanup_logs.go | 6 ++++-- repo/maintenancestats/typeconversion.go | 4 ++-- .../{typconversion_test.go => typeconversion_test.go} | 0 3 files changed, 6 insertions(+), 4 deletions(-) rename repo/maintenancestats/{typconversion_test.go => typeconversion_test.go} (100%) diff --git a/repo/maintenance/cleanup_logs.go b/repo/maintenance/cleanup_logs.go index cb5982cb1..ad1930c3f 100644 --- a/repo/maintenance/cleanup_logs.go +++ b/repo/maintenance/cleanup_logs.go @@ -69,9 +69,9 @@ func CleanupLogs(ctx context.Context, rep repo.DirectRepositoryWriter, opt LogRe deletePosition := len(allLogBlobs) for i, bm := range allLogBlobs { - retainedSize += maintenancestats.ToUint64(bm.Length) + bmlen := maintenancestats.ToUint64(bm.Length) - if opt.MaxTotalSize > 0 && retainedSize > uint64(opt.MaxTotalSize) { + if opt.MaxTotalSize > 0 && retainedSize+bmlen > uint64(opt.MaxTotalSize) { deletePosition = i break } @@ -85,6 +85,8 @@ func CleanupLogs(ctx context.Context, rep repo.DirectRepositoryWriter, opt LogRe deletePosition = i break } + + retainedSize += bmlen } toDelete := allLogBlobs[deletePosition:] diff --git a/repo/maintenancestats/typeconversion.go b/repo/maintenancestats/typeconversion.go index 4e1d692fe..1cb5b2797 100644 --- a/repo/maintenancestats/typeconversion.go +++ b/repo/maintenancestats/typeconversion.go @@ -6,7 +6,7 @@ "golang.org/x/time/rate" ) -var limit = rate.Sometimes{First: 10} //nolint:mnd +var negativeValueWarningLimit = rate.Sometimes{First: 10} //nolint:mnd // ToUint64 converts v from a signed integer type T to uint64 while checking that // the value is non-negative. It returns 0 for negative values. @@ -15,7 +15,7 @@ func ToUint64[T int8 | int16 | int32 | int | int64](v T) uint64 { return uint64(v) } - limit.Do(func() { + negativeValueWarningLimit.Do(func() { log.Println("warning, converting negative value to uint64:", v) }) diff --git a/repo/maintenancestats/typconversion_test.go b/repo/maintenancestats/typeconversion_test.go similarity index 100% rename from repo/maintenancestats/typconversion_test.go rename to repo/maintenancestats/typeconversion_test.go