diff --git a/v2/backend.go b/v2/backend.go index a8c7775a..4e5d313f 100644 --- a/v2/backend.go +++ b/v2/backend.go @@ -102,7 +102,7 @@ func NewBackendPublicKey(ds ds.TxnDatastore, cfg *RecordBackendConfig) (be *Reco // The values returned from [ProvidersBackend.Fetch] will be of type // [*providerSet] (unexported). The cfg parameter can be nil, in which case the // [DefaultProviderBackendConfig] will be used. -func NewBackendProvider(pstore peerstore.Peerstore, dstore ds.Batching, cfg *ProvidersBackendConfig) (be *ProvidersBackend, err error) { +func NewBackendProvider(pstore peerstore.Peerstore, dstore ds.Datastore, cfg *ProvidersBackendConfig) (be *ProvidersBackend, err error) { if cfg == nil { if cfg, err = DefaultProviderBackendConfig(); err != nil { return nil, fmt.Errorf("default provider backend config: %w", err) diff --git a/v2/backend_provider.go b/v2/backend_provider.go index 1ddd764f..3be9d88a 100644 --- a/v2/backend_provider.go +++ b/v2/backend_provider.go @@ -257,14 +257,15 @@ func (p *ProvidersBackend) StartGarbageCollection() { p.gcCancel = cancel p.gcDone = make(chan struct{}) - p.log.Info("Provider backend's started garbage collection schedule") + // init ticker outside the goroutine to prevent race condition with + // clock mock in garbage collection test. + ticker := p.cfg.clk.Ticker(p.cfg.GCInterval) go func() { defer close(p.gcDone) - - ticker := p.cfg.clk.Ticker(p.cfg.GCInterval) defer ticker.Stop() + p.log.Info("Provider backend started garbage collection schedule") for { select { case <-ctx.Done(): diff --git a/v2/backend_provider_test.go b/v2/backend_provider_test.go index 10407e54..d3ab465d 100644 --- a/v2/backend_provider_test.go +++ b/v2/backend_provider_test.go @@ -9,7 +9,6 @@ import ( "github.com/benbjohnson/clock" ds "github.com/ipfs/go-datastore" - syncds "github.com/ipfs/go-datastore/sync" "github.com/libp2p/go-libp2p" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -22,7 +21,9 @@ func newBackendProvider(t testing.TB, cfg *ProvidersBackendConfig) *ProvidersBac h, err := libp2p.New(libp2p.NoListenAddrs) require.NoError(t, err) - dstore := syncds.MutexWrap(ds.NewMapDatastore()) + dstore, err := InMemoryDatastore() + require.NoError(t, err) + t.Cleanup(func() { if err = dstore.Close(); err != nil { t.Logf("closing datastore: %s", err)