Watch
1
0
Fork
You've already forked pkg-proxy
1
mirror of https://github.com/git-pkgs/proxy.git synced 2026-11-09 15:49:16 -05:00
pkg-proxy/internal/server/metadata_backfill.go

38 lines
933 B
Go
Raw Permalink Normal View History

package server
import (
"context"
"log/slog"
"time"
"github.com/git-pkgs/proxy/internal/database"
)
// metadataBackfillBatch bounds each backfill transaction, so other writers
// get the database in between.
const metadataBackfillBatch = 1000
// backfillMetadataAccess gives metadata rows cached before last_accessed_at
// existed their write time, batch by batch. It is resumable: a restart picks
// up whatever rows are still empty.
func backfillMetadataAccess(ctx context.Context, db *database.DB, logger *slog.Logger, batch int) {
total := 0
for ctx.Err() == nil {
n, err := db.BackfillMetadataLastAccessed(batch)
if err != nil {
logger.Warn("metadata backfill failed, retrying", "error", err)
select {
case <-ctx.Done():
case <-time.After(time.Minute):
}
continue
}
total += n
if n < batch {
break
}
}
if total > 0 {
logger.Info("metadata backfill: completed", "rows", total)
}
}