func ConditionalGC(ctx context.Context, node *core.IpfsNode, offset uint64) error { gc, err := NewGC(node) if err != nil { return err } return gc.maybeGC(ctx, offset) }
func PeriodicGC(ctx context.Context, node *core.IpfsNode) error { cfg, err := node.Repo.Config() if err != nil { return err } if cfg.Datastore.GCPeriod == "" { node.Repo.SetConfigKey("Datastore.GCPeriod", "1h") cfg.Datastore.GCPeriod = "1h" } period, err := time.ParseDuration(cfg.Datastore.GCPeriod) if err != nil { return err } if int64(period) == 0 { // if duration is 0, it means GC is disabled. return nil } gc, err := NewGC(node) if err != nil { return err } for { select { case <-ctx.Done(): return nil case <-time.After(period): // the private func maybeGC doesn't compute storageMax, storageGC, slackGC so that they are not re-computed for every cycle if err := gc.maybeGC(ctx, 0); err != nil { log.Error(err) } } } }