Skip to content

Commit d15e4c6

Browse files
committed
wrap error in driver.error
1 parent 38d2589 commit d15e4c6

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

x/mongo/driver/topology/pool.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ type poolClearedError struct {
5555
}
5656

5757
func (pce poolClearedError) Error() string {
58-
wrappedErr := fmt.Errorf(
59-
"%v: connection pool for %v was cleared because another operation failed with: %v %w",
60-
driver.TransientTransactionError, pce.address, pce.err, pce)
61-
return wrappedErr.Error()
58+
return fmt.Sprintf(
59+
"connection pool for %v was cleared because another operation failed with: %v",
60+
pce.address,
61+
pce.err)
6262
}
6363

6464
// Retryable returns true. All poolClearedErrors are retryable.
@@ -503,7 +503,12 @@ func (p *pool) checkOut(ctx context.Context) (conn *connection, err error) {
503503
}
504504
return nil, ErrPoolClosed
505505
case poolPaused:
506-
err := poolClearedError{err: p.lastClearErr, address: p.address}
506+
pcErr := poolClearedError{err: p.lastClearErr, address: p.address}
507+
err := driver.Error{
508+
Message: pcErr.Error(),
509+
Labels: []string{driver.TransientTransactionError},
510+
Wrapped: pcErr,
511+
}
507512
p.stateMu.RUnlock()
508513

509514
duration := time.Since(start)

x/mongo/driver/topology/pool_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,12 +1597,12 @@ func TestPool_Error(t *testing.T) {
15971597

15981598
// Since new pool is paused, checkout should throw PoolClearedError.
15991599
_, err := p.checkOut(context.Background())
1600-
1601-
var pce poolClearedError
1602-
if errors.As(err, &pce) {
1603-
assert.Contains(t, pce, driver.TransientTransactionError, `expected error to include the "TransientTransactionError" label`)
1600+
var le driver.Error
1601+
if errors.As(err, &le) {
1602+
assert.ErrorIs(t, poolClearedError{}, le.Unwrap(), "expect error to be PoolClearedError")
1603+
assert.True(t, le.HasErrorLabel(driver.TransientTransactionError), `expected error to include the "TransientTransactionError" label`)
16041604
} else {
1605-
t.Errorf("expected poolClearedError, got %v", err)
1605+
t.Errorf("expected labeled error, got %v", err)
16061606
}
16071607

16081608
p.close(context.Background())

0 commit comments

Comments
 (0)