github.com/ethereum-optimism/optimism@v1.7.2/op-node/p2p/store/gc.go (about)

     1  package store
     2  
     3  import (
     4  	"context"
     5  	"sync"
     6  	"time"
     7  
     8  	"github.com/ethereum-optimism/optimism/op-service/clock"
     9  	"github.com/ethereum/go-ethereum/log"
    10  )
    11  
    12  const (
    13  	gcPeriod = 2 * time.Hour
    14  )
    15  
    16  type gcAction func() error
    17  
    18  func startGc(ctx context.Context, logger log.Logger, clock clock.Clock, bgTasks *sync.WaitGroup, action gcAction) {
    19  	bgTasks.Add(1)
    20  	go func() {
    21  		defer bgTasks.Done()
    22  
    23  		gcTimer := clock.NewTicker(gcPeriod)
    24  		defer gcTimer.Stop()
    25  
    26  		for {
    27  			select {
    28  			case <-gcTimer.Ch():
    29  				if err := action(); err != nil {
    30  					logger.Warn("GC failed", "err", err)
    31  				}
    32  
    33  			case <-ctx.Done():
    34  				return
    35  			}
    36  		}
    37  	}()
    38  }