MCPcopy
hub / github.com/caddyserver/certmagic / CleanStorage

Function CleanStorage

maintain.go:649–729  ·  view source on GitHub ↗

CleanStorage removes assets which are no longer useful, according to opts.

(ctx context.Context, storage Storage, opts CleanStorageOptions)

Source from the content-addressed store, hash-verified

647// CleanStorage removes assets which are no longer useful,
648// according to opts.
649func CleanStorage(ctx context.Context, storage Storage, opts CleanStorageOptions) error {
650 const (
651 lockName = "storage_clean"
652 storageKey = "last_clean.json"
653 )
654
655 if opts.Logger == nil {
656 opts.Logger = defaultLogger.Named("clean_storage")
657 }
658 opts.Logger = opts.Logger.With(zap.Any("storage", storage))
659
660 // storage cleaning should be globally exclusive
661 if err := acquireLock(ctx, storage, lockName); err != nil {
662 return fmt.Errorf("unable to acquire %s lock: %v", lockName, err)
663 }
664 defer func() {
665 if err := releaseLock(ctx, storage, lockName); err != nil {
666 opts.Logger.Error("unable to release lock", zap.Error(err))
667 return
668 }
669 }()
670
671 // cleaning should not happen more often than the interval
672 if opts.Interval > 0 {
673 lastCleanBytes, err := storage.Load(ctx, storageKey)
674 if !errors.Is(err, fs.ErrNotExist) {
675 if err != nil {
676 return fmt.Errorf("loading last clean timestamp: %v", err)
677 }
678
679 var lastClean lastCleanPayload
680 err = json.Unmarshal(lastCleanBytes, &lastClean)
681 if err != nil {
682 return fmt.Errorf("decoding last clean data: %v", err)
683 }
684
685 lastTLSClean := lastClean["tls"]
686 if time.Since(lastTLSClean.Timestamp) < opts.Interval {
687 nextTime := time.Now().Add(opts.Interval)
688 opts.Logger.Info("storage cleaning happened too recently; skipping for now",
689 zap.String("instance", lastTLSClean.InstanceID),
690 zap.Time("try_again", nextTime),
691 zap.Duration("try_again_in", time.Until(nextTime)),
692 )
693 return nil
694 }
695 }
696 }
697
698 opts.Logger.Info("cleaning storage unit")
699
700 if opts.OCSPStaples {
701 err := deleteOldOCSPStaples(ctx, storage, opts.Logger)
702 if err != nil {
703 opts.Logger.Error("deleting old OCSP staples", zap.Error(err))
704 }
705 }
706 if opts.ExpiredCerts {

Callers

nothing calls this directly

Calls 8

acquireLockFunction · 0.85
releaseLockFunction · 0.85
deleteOldOCSPStaplesFunction · 0.85
deleteExpiredCertsFunction · 0.85
ErrorMethod · 0.80
StringMethod · 0.80
LoadMethod · 0.65
StoreMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…