Skip to content

Commit c85adc5

Browse files
authored
Merge pull request #133 from ipfs/fix/not-found
feat: make not-found errors discoverable
2 parents 507733c + 54da75b commit c85adc5

File tree

7 files changed

+20
-57
lines changed

7 files changed

+20
-57
lines changed

Diff for: .travis.yml

-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ env:
1010
global:
1111
- GOTFLAGS="-race -cpu=5"
1212
matrix:
13-
- BUILD_DEPTYPE=gx
1413
- BUILD_DEPTYPE=gomod
1514

1615

@@ -24,7 +23,6 @@ script:
2423

2524
cache:
2625
directories:
27-
- $GOPATH/src/gx
2826
- $GOPATH/pkg/mod
2927
- $HOME/.cache/go-build
3028

Diff for: datastore.go

+10-6
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,18 @@ type TxnDatastore interface {
192192

193193
// Errors
194194

195+
type dsError struct {
196+
error
197+
isNotFound bool
198+
}
199+
200+
func (e *dsError) NotFound() bool {
201+
return e.isNotFound
202+
}
203+
195204
// ErrNotFound is returned by Get and GetSize when a datastore does not map the
196205
// given key to a value.
197-
var ErrNotFound = errors.New("datastore: key not found")
198-
199-
// ErrInvalidType is returned by Put when a given value is incopatible with
200-
// the type the datastore supports. This means a conversion (or serialization)
201-
// is needed beforehand.
202-
var ErrInvalidType = errors.New("datastore: invalid type error")
206+
var ErrNotFound error = &dsError{error: errors.New("datastore: key not found"), isNotFound: true}
203207

204208
// GetBackedHas provides a default Datastore.Has implementation.
205209
// It exists so Datastore.Has implementations can use it, like so:

Diff for: go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ require (
66
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8
77
github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8
88
github.com/kr/pretty v0.1.0 // indirect
9+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7
910
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
1011
)

Diff for: go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
1111
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
1212
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
1313
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
14+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
15+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
1416
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
1517
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

Diff for: mount/mount.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ package mount
55
import (
66
"container/heap"
77
"errors"
8-
"fmt"
98
"sort"
109
"strings"
1110
"sync"
1211

1312
ds "github.com/ipfs/go-datastore"
1413
"github.com/ipfs/go-datastore/query"
14+
xerrors "golang.org/x/xerrors"
1515
)
1616

1717
var (
@@ -370,7 +370,7 @@ func (d *Datastore) Check() error {
370370
for _, m := range d.mounts {
371371
if c, ok := m.Datastore.(ds.CheckedDatastore); ok {
372372
if err := c.Check(); err != nil {
373-
return fmt.Errorf("checking datastore at %s: %s", m.Prefix.String(), err.Error())
373+
return xerrors.Errorf("checking datastore at %s: %w", m.Prefix.String(), err)
374374
}
375375
}
376376
}
@@ -381,7 +381,7 @@ func (d *Datastore) Scrub() error {
381381
for _, m := range d.mounts {
382382
if c, ok := m.Datastore.(ds.ScrubbedDatastore); ok {
383383
if err := c.Scrub(); err != nil {
384-
return fmt.Errorf("scrubbing datastore at %s: %s", m.Prefix.String(), err.Error())
384+
return xerrors.Errorf("scrubbing datastore at %s: %w", m.Prefix.String(), err)
385385
}
386386
}
387387
}
@@ -392,7 +392,7 @@ func (d *Datastore) CollectGarbage() error {
392392
for _, m := range d.mounts {
393393
if c, ok := m.Datastore.(ds.GCDatastore); ok {
394394
if err := c.CollectGarbage(); err != nil {
395-
return fmt.Errorf("gc on datastore at %s: %s", m.Prefix.String(), err.Error())
395+
return xerrors.Errorf("gc on datastore at %s: %w", m.Prefix.String(), err)
396396
}
397397
}
398398
}

Diff for: package.json

-42
This file was deleted.

Diff for: retrystore/retrystore.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
package retrystore
44

55
import (
6-
"fmt"
76
"time"
87

98
ds "github.com/ipfs/go-datastore"
9+
xerrors "golang.org/x/xerrors"
1010
)
1111

1212
// Datastore wraps a Batching datastore with a
@@ -23,7 +23,7 @@ type Datastore struct {
2323
ds.Batching
2424
}
2525

26-
var errFmtString = "ran out of retries trying to get past temporary error: %s"
26+
var errFmtString = "ran out of retries trying to get past temporary error: %w"
2727

2828
func (d *Datastore) runOp(op func() error) error {
2929
err := op()
@@ -40,7 +40,7 @@ func (d *Datastore) runOp(op func() error) error {
4040
}
4141
}
4242

43-
return fmt.Errorf(errFmtString, err)
43+
return xerrors.Errorf(errFmtString, err)
4444
}
4545

4646
// DiskUsage implements the PersistentDatastore interface.

0 commit comments

Comments
 (0)