Skip to content

Commit 4089145

Browse files
kumarlokeshblink1073
authored andcommitted
GODRIVER-2603 - Revised error handling using Go 1.13 error APIs (mongodb#1470)
(cherry picked from commit 3f6e80a)
1 parent f93a990 commit 4089145

22 files changed

+63
-75
lines changed

benchmark/harness_case.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package benchmark
88

99
import (
1010
"context"
11+
"errors"
1112
"fmt"
1213
"path/filepath"
1314
"reflect"
@@ -95,12 +96,12 @@ benchRepeat:
9596
res.Duration = c.elapsed
9697
c.cumulativeRuntime += res.Duration
9798

98-
switch res.Error {
99-
case context.DeadlineExceeded:
99+
switch {
100+
case errors.Is(res.Error, context.DeadlineExceeded):
100101
break benchRepeat
101-
case context.Canceled:
102+
case errors.Is(res.Error, context.Canceled):
102103
break benchRepeat
103-
case nil:
104+
case res.Error == nil:
104105
out.Trials++
105106
c.elapsed = 0
106107
out.Raw = append(out.Raw, res)

bson/bsoncodec/default_value_decoders.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func newDefaultStructCodec() *StructCodec {
4141
if err != nil {
4242
// This function is called from the codec registration path, so errors can't be propagated. If there's an error
4343
// constructing the StructCodec, we panic to avoid losing it.
44-
panic(fmt.Errorf("error creating default StructCodec: %v", err))
44+
panic(fmt.Errorf("error creating default StructCodec: %w", err))
4545
}
4646
return codec
4747
}
@@ -178,7 +178,7 @@ func (dvd DefaultValueDecoders) DDecodeValue(dc DecodeContext, vr bsonrw.ValueRe
178178

179179
for {
180180
key, elemVr, err := dr.ReadElement()
181-
if err == bsonrw.ErrEOD {
181+
if errors.Is(err, bsonrw.ErrEOD) {
182182
break
183183
} else if err != nil {
184184
return err
@@ -1379,7 +1379,7 @@ func (dvd DefaultValueDecoders) MapDecodeValue(dc DecodeContext, vr bsonrw.Value
13791379
keyType := val.Type().Key()
13801380
for {
13811381
key, vr, err := dr.ReadElement()
1382-
if err == bsonrw.ErrEOD {
1382+
if errors.Is(err, bsonrw.ErrEOD) {
13831383
break
13841384
}
13851385
if err != nil {
@@ -1675,7 +1675,7 @@ func (dvd DefaultValueDecoders) decodeDefault(dc DecodeContext, vr bsonrw.ValueR
16751675
idx := 0
16761676
for {
16771677
vr, err := ar.ReadValue()
1678-
if err == bsonrw.ErrEOA {
1678+
if errors.Is(err, bsonrw.ErrEOA) {
16791679
break
16801680
}
16811681
if err != nil {

bson/bsoncodec/default_value_decoders_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2370,8 +2370,8 @@ func TestDefaultValueDecoders(t *testing.T) {
23702370
return
23712371
}
23722372
if rc.val == cansettest { // We're doing an IsValid and CanSet test
2373-
wanterr, ok := rc.err.(ValueDecoderError)
2374-
if !ok {
2373+
var wanterr ValueDecoderError
2374+
if !errors.As(rc.err, &wanterr) {
23752375
t.Fatalf("Error must be a DecodeValueError, but got a %T", rc.err)
23762376
}
23772377

@@ -3685,8 +3685,8 @@ func TestDefaultValueDecoders(t *testing.T) {
36853685
val := reflect.New(reflect.TypeOf(outer{})).Elem()
36863686
err := defaultTestStructCodec.DecodeValue(dc, vr, val)
36873687

3688-
decodeErr, ok := err.(*DecodeError)
3689-
assert.True(t, ok, "expected DecodeError, got %v of type %T", err, err)
3688+
var decodeErr *DecodeError
3689+
assert.True(t, errors.As(err, &decodeErr), "expected DecodeError, got %v of type %T", err, err)
36903690
expectedKeys := []string{"foo", "bar"}
36913691
assert.Equal(t, expectedKeys, decodeErr.Keys(), "expected keys slice %v, got %v", expectedKeys,
36923692
decodeErr.Keys())

bson/bsoncodec/default_value_encoders.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ func (dve DefaultValueEncoders) mapEncodeValue(ec EncodeContext, dw bsonrw.Docum
343343
}
344344

345345
currEncoder, currVal, lookupErr := dve.lookupElementEncoder(ec, encoder, val.MapIndex(key))
346-
if lookupErr != nil && lookupErr != errInvalidValue {
346+
if lookupErr != nil && !errors.Is(lookupErr, errInvalidValue) {
347347
return lookupErr
348348
}
349349

@@ -418,7 +418,7 @@ func (dve DefaultValueEncoders) ArrayEncodeValue(ec EncodeContext, vw bsonrw.Val
418418

419419
for idx := 0; idx < val.Len(); idx++ {
420420
currEncoder, currVal, lookupErr := dve.lookupElementEncoder(ec, encoder, val.Index(idx))
421-
if lookupErr != nil && lookupErr != errInvalidValue {
421+
if lookupErr != nil && !errors.Is(lookupErr, errInvalidValue) {
422422
return lookupErr
423423
}
424424

@@ -487,7 +487,7 @@ func (dve DefaultValueEncoders) SliceEncodeValue(ec EncodeContext, vw bsonrw.Val
487487

488488
for idx := 0; idx < val.Len(); idx++ {
489489
currEncoder, currVal, lookupErr := dve.lookupElementEncoder(ec, encoder, val.Index(idx))
490-
if lookupErr != nil && lookupErr != errInvalidValue {
490+
if lookupErr != nil && !errors.Is(lookupErr, errInvalidValue) {
491491
return lookupErr
492492
}
493493

bson/bsoncodec/map_codec.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ func (mc *MapCodec) decodeKey(key string, keyType reflect.Type) (reflect.Value,
313313
if mc.EncodeKeysWithStringer {
314314
parsed, err := strconv.ParseFloat(key, 64)
315315
if err != nil {
316-
return keyVal, fmt.Errorf("Map key is defined to be a decimal type (%v) but got error %v", keyType.Kind(), err)
316+
return keyVal, fmt.Errorf("Map key is defined to be a decimal type (%v) but got error %w", keyType.Kind(), err)
317317
}
318318
keyVal = reflect.ValueOf(parsed)
319319
break

bson/bsoncodec/struct_codec.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ func (sc *StructCodec) EncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val
239239
}
240240

241241
func newDecodeError(key string, original error) error {
242-
de, ok := original.(*DecodeError)
243-
if !ok {
242+
var de *DecodeError
243+
if !errors.As(original, &de) {
244244
return &DecodeError{
245245
keys: []string{key},
246246
wrapped: original,

bson/decoder_example_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package bson_test
88

99
import (
1010
"bytes"
11+
"errors"
1112
"fmt"
1213
"io"
1314

@@ -200,7 +201,7 @@ func ExampleDecoder_multipleExtendedJSONDocuments() {
200201
for {
201202
var res Coordinate
202203
err = decoder.Decode(&res)
203-
if err == io.EOF {
204+
if errors.Is(err, io.EOF) {
204205
break
205206
}
206207
if err != nil {

bson/encoder_example_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package bson_test
88

99
import (
1010
"bytes"
11+
"errors"
1112
"fmt"
1213
"io"
1314

@@ -162,7 +163,7 @@ func ExampleEncoder_multipleBSONDocuments() {
162163
// Extended JSON by converting them to bson.Raw.
163164
for {
164165
doc, err := bson.ReadDocument(buf)
165-
if err == io.EOF {
166+
if errors.Is(err, io.EOF) {
166167
return
167168
}
168169
if err != nil {

bson/primitive/objectid.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func processUniqueBytes() [5]byte {
183183
var b [5]byte
184184
_, err := io.ReadFull(rand.Reader, b[:])
185185
if err != nil {
186-
panic(fmt.Errorf("cannot initialize objectid package with crypto.rand.Reader: %v", err))
186+
panic(fmt.Errorf("cannot initialize objectid package with crypto.rand.Reader: %w", err))
187187
}
188188

189189
return b
@@ -193,7 +193,7 @@ func readRandomUint32() uint32 {
193193
var b [4]byte
194194
_, err := io.ReadFull(rand.Reader, b[:])
195195
if err != nil {
196-
panic(fmt.Errorf("cannot initialize objectid package with crypto.rand.Reader: %v", err))
196+
panic(fmt.Errorf("cannot initialize objectid package with crypto.rand.Reader: %w", err))
197197
}
198198

199199
return (uint32(b[0]) << 0) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)

cmd/testatlas/main.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package main
88

99
import (
1010
"context"
11+
"errors"
1112
"flag"
1213
"fmt"
1314
"time"
@@ -52,7 +53,7 @@ func main() {
5253
func runTest(ctx context.Context, clientOpts *options.ClientOptions) error {
5354
client, err := mongo.Connect(ctx, clientOpts)
5455
if err != nil {
55-
return fmt.Errorf("Connect error: %v", err)
56+
return fmt.Errorf("Connect error: %w", err)
5657
}
5758

5859
defer func() {
@@ -63,12 +64,12 @@ func runTest(ctx context.Context, clientOpts *options.ClientOptions) error {
6364
cmd := bson.D{{handshake.LegacyHello, 1}}
6465
err = db.RunCommand(ctx, cmd).Err()
6566
if err != nil {
66-
return fmt.Errorf("legacy hello error: %v", err)
67+
return fmt.Errorf("legacy hello error: %w", err)
6768
}
6869

6970
coll := db.Collection("test")
70-
if err = coll.FindOne(ctx, bson.D{{"x", 1}}).Err(); err != nil && err != mongo.ErrNoDocuments {
71-
return fmt.Errorf("FindOne error: %v", err)
71+
if err = coll.FindOne(ctx, bson.D{{"x", 1}}).Err(); err != nil && !errors.Is(err, mongo.ErrNoDocuments) {
72+
return fmt.Errorf("FindOne error: %w", err)
7273
}
7374
return nil
7475
}

0 commit comments

Comments
 (0)