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 }