From 14103e2a3a96b28e42172259a67552cf729bdaa7 Mon Sep 17 00:00:00 2001 From: gammazero <11790789+gammazero@users.noreply.github.com> Date: Tue, 12 Aug 2025 14:32:16 -1000 Subject: [PATCH] Replace `uber-go/multierr` with `errors.Join` --- fuzz/go.mod | 2 +- go.mod | 1 - go.sum | 2 -- mount/mount.go | 78 ++++++++++++++++++-------------------------------- 4 files changed, 29 insertions(+), 54 deletions(-) diff --git a/fuzz/go.mod b/fuzz/go.mod index cbc41d7..454329b 100644 --- a/fuzz/go.mod +++ b/fuzz/go.mod @@ -3,7 +3,7 @@ module github.com/ipfs/go-datastore/fuzz go 1.23.0 require ( - github.com/ipfs/go-datastore v0.8.0 + github.com/ipfs/go-datastore v0.8.2 github.com/ipfs/go-ds-flatfs v0.5.3 github.com/spf13/pflag v1.0.6 ) diff --git a/go.mod b/go.mod index 9d8fd6e..a47b69f 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,6 @@ require ( github.com/stretchr/testify v1.10.0 go.opentelemetry.io/otel v1.37.0 go.opentelemetry.io/otel/trace v1.37.0 - go.uber.org/multierr v1.11.0 ) require ( diff --git a/go.sum b/go.sum index 69eb895..30d4952 100644 --- a/go.sum +++ b/go.sum @@ -31,8 +31,6 @@ go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/Wgbsd go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/mount/mount.go b/mount/mount.go index aa1d260..96f6437 100644 --- a/mount/mount.go +++ b/mount/mount.go @@ -13,8 +13,6 @@ import ( ds "github.com/ipfs/go-datastore" "github.com/ipfs/go-datastore/query" - - "go.uber.org/multierr" ) var ( @@ -236,22 +234,19 @@ func (d *Datastore) Put(ctx context.Context, key ds.Key, value []byte) error { // Sync implements Datastore.Sync func (d *Datastore) Sync(ctx context.Context, prefix ds.Key) error { - var merr error + var errs []error // Sync all mount points below the prefix // Sync the mount point right at (or above) the prefix dstores, prefixes, rest := d.lookupAll(prefix) for i, suffix := range rest { if err := dstores[i].Sync(ctx, suffix); err != nil { - merr = multierr.Append(merr, fmt.Errorf( - "syncing datastore at %s: %w", - prefixes[i].String(), - err, - )) + err = fmt.Errorf("syncing datastore at %s: %w", prefixes[i].String(), err) + errs = append(errs, err) } } - return merr + return errors.Join(errs...) } // Get returns the value associated with the key from the appropriate datastore. @@ -357,39 +352,33 @@ func (d *Datastore) Query(ctx context.Context, master query.Query) (query.Result // Close closes all mounted datastores. func (d *Datastore) Close() error { - var merr error + var errs []error for _, d := range d.mounts { err := d.Datastore.Close() if err != nil { - merr = multierr.Append(merr, fmt.Errorf( - "closing datastore at %s: %w", - d.Prefix.String(), - err, - )) + err = fmt.Errorf("closing datastore at %s: %w", d.Prefix.String(), err) + errs = append(errs, err) } } - return merr + return errors.Join(errs...) } // DiskUsage returns the sum of DiskUsages for the mounted datastores. // Non PersistentDatastores will not be accounted. func (d *Datastore) DiskUsage(ctx context.Context) (uint64, error) { var ( - merr error + errs []error duTotal uint64 = 0 ) for _, d := range d.mounts { du, err := ds.DiskUsage(ctx, d.Datastore) duTotal += du if err != nil { - merr = multierr.Append(merr, fmt.Errorf( - "getting disk usage at %s: %w", - d.Prefix.String(), - err, - )) + err = fmt.Errorf("getting disk usage at %s: %w", d.Prefix.String(), err) + errs = append(errs, err) } } - return duTotal, merr + return duTotal, errors.Join(errs...) } type mountBatch struct { @@ -452,62 +441,51 @@ func (mt *mountBatch) Commit(ctx context.Context) error { mt.lk.Lock() defer mt.lk.Unlock() - var merr error + var errs []error for p, t := range mt.mounts { if err := t.Commit(ctx); err != nil { - merr = multierr.Append(merr, fmt.Errorf( - "committing batch to datastore at %s: %w", - p, err, - )) + err = fmt.Errorf("committing batch to datastore at %s: %w", p, err) + errs = append(errs, err) } } - return merr + return errors.Join(errs...) } func (d *Datastore) Check(ctx context.Context) error { - var merr error + var errs []error for _, m := range d.mounts { if c, ok := m.Datastore.(ds.CheckedDatastore); ok { if err := c.Check(ctx); err != nil { - merr = multierr.Append(merr, fmt.Errorf( - "checking datastore at %s: %w", - m.Prefix.String(), - err, - )) + err = fmt.Errorf("checking datastore at %s: %w", m.Prefix.String(), err) + errs = append(errs, err) } } } - return merr + return errors.Join(errs...) } func (d *Datastore) Scrub(ctx context.Context) error { - var merr error + var errs []error for _, m := range d.mounts { if c, ok := m.Datastore.(ds.ScrubbedDatastore); ok { if err := c.Scrub(ctx); err != nil { - merr = multierr.Append(merr, fmt.Errorf( - "scrubbing datastore at %s: %w", - m.Prefix.String(), - err, - )) + err = fmt.Errorf("scrubbing datastore at %s: %w", m.Prefix.String(), err) + errs = append(errs, err) } } } - return merr + return errors.Join(errs...) } func (d *Datastore) CollectGarbage(ctx context.Context) error { - var merr error + var errs []error for _, m := range d.mounts { if c, ok := m.Datastore.(ds.GCDatastore); ok { if err := c.CollectGarbage(ctx); err != nil { - merr = multierr.Append(merr, fmt.Errorf( - "gc on datastore at %s: %w", - m.Prefix.String(), - err, - )) + err = fmt.Errorf("gc on datastore at %s: %w", m.Prefix.String(), err) + errs = append(errs, err) } } } - return merr + return errors.Join(errs...) }