Skip to content

Commit d24213d

Browse files
GODRIVER-2898 Resovle merge conflict
2 parents f198863 + ff1792e commit d24213d

File tree

70 files changed

+2208
-484
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+2208
-484
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ repos:
5151
exclude: ^(vendor)
5252

5353
- repo: https://github.com/golangci/golangci-lint
54-
rev: v1.59.1
54+
rev: v1.60.1
5555
hooks:
5656
- id: golangci-lint
5757

@@ -61,4 +61,4 @@ repos:
6161
name: executable-shell
6262
entry: chmod +x
6363
language: system
64-
types: [shell]
64+
types: [shell]

Taskfile.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,4 +188,4 @@ tasks:
188188
install-golangci-lint:
189189
internal: true
190190
cmds:
191-
- go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.59.1
191+
- go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.60.1

internal/integration/crud_helpers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func isExpectedKillAllSessionsError(err error) bool {
9393
}
9494

9595
// kill all open sessions on the server. This function uses mt.GlobalClient() because killAllSessions is not allowed
96-
// for clients configured with specific options (e.g. client side encryption).
96+
// for clients configured with specific options (e.g. in-use encryption).
9797
func killSessions(mt *mtest.T) {
9898
mt.Helper()
9999

internal/integration/unified/event_verification.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -314,16 +314,16 @@ func verifyCMAPEvents(client *clientEntity, expectedEvents *expectedEvents) erro
314314
switch {
315315
case evt.ConnectionCreatedEvent != nil:
316316
if _, pooled, err = getNextPoolEvent(pooled, event.ConnectionCreated); err != nil {
317-
return newEventVerificationError(idx, client, err.Error())
317+
return newEventVerificationError(idx, client, "failed to get next pool event: %v", err.Error())
318318
}
319319
case evt.ConnectionReadyEvent != nil:
320320
if _, pooled, err = getNextPoolEvent(pooled, event.ConnectionReady); err != nil {
321-
return newEventVerificationError(idx, client, err.Error())
321+
return newEventVerificationError(idx, client, "failed to get next pool event: %v", err.Error())
322322
}
323323
case evt.ConnectionClosedEvent != nil:
324324
var actual *event.PoolEvent
325325
if actual, pooled, err = getNextPoolEvent(pooled, event.ConnectionClosed); err != nil {
326-
return newEventVerificationError(idx, client, err.Error())
326+
return newEventVerificationError(idx, client, "failed to get next pool event: %v", err.Error())
327327
}
328328

329329
if expectedReason := evt.ConnectionClosedEvent.Reason; expectedReason != nil {
@@ -333,12 +333,12 @@ func verifyCMAPEvents(client *clientEntity, expectedEvents *expectedEvents) erro
333333
}
334334
case evt.ConnectionCheckedOutEvent != nil:
335335
if _, pooled, err = getNextPoolEvent(pooled, event.ConnectionCheckedOut); err != nil {
336-
return newEventVerificationError(idx, client, err.Error())
336+
return newEventVerificationError(idx, client, "failed to get next pool event: %v", err.Error())
337337
}
338338
case evt.ConnectionCheckOutFailedEvent != nil:
339339
var actual *event.PoolEvent
340340
if actual, pooled, err = getNextPoolEvent(pooled, event.ConnectionCheckOutFailed); err != nil {
341-
return newEventVerificationError(idx, client, err.Error())
341+
return newEventVerificationError(idx, client, "failed to get next pool event: %v", err.Error())
342342
}
343343

344344
if expectedReason := evt.ConnectionCheckOutFailedEvent.Reason; expectedReason != nil {
@@ -348,12 +348,12 @@ func verifyCMAPEvents(client *clientEntity, expectedEvents *expectedEvents) erro
348348
}
349349
case evt.ConnectionCheckedInEvent != nil:
350350
if _, pooled, err = getNextPoolEvent(pooled, event.ConnectionCheckedIn); err != nil {
351-
return newEventVerificationError(idx, client, err.Error())
351+
return newEventVerificationError(idx, client, "failed to get next pool event: %v", err.Error())
352352
}
353353
case evt.PoolClearedEvent != nil:
354354
var actual *event.PoolEvent
355355
if actual, pooled, err = getNextPoolEvent(pooled, event.ConnectionPoolCleared); err != nil {
356-
return newEventVerificationError(idx, client, err.Error())
356+
return newEventVerificationError(idx, client, "failed to get next pool event: %v", err.Error())
357357
}
358358
if expectServiceID := evt.PoolClearedEvent.HasServiceID; expectServiceID != nil {
359359
if err := verifyServiceID(*expectServiceID, actual.ServiceID); err != nil {
@@ -513,7 +513,7 @@ func verifySDAMEvents(client *clientEntity, expectedEvents *expectedEvents) erro
513513
case evt.ServerDescriptionChangedEvent != nil:
514514
var got *event.ServerDescriptionChangedEvent
515515
if got, changed, err = getNextServerDescriptionChangedEvent(changed); err != nil {
516-
return newEventVerificationError(idx, client, err.Error())
516+
return newEventVerificationError(idx, client, "failed to get next server description changed event: %v", err.Error())
517517
}
518518

519519
prevDesc := evt.ServerDescriptionChangedEvent.NewDescription
@@ -544,7 +544,7 @@ func verifySDAMEvents(client *clientEntity, expectedEvents *expectedEvents) erro
544544
case evt.ServerHeartbeatStartedEvent != nil:
545545
var got *event.ServerHeartbeatStartedEvent
546546
if got, started, err = getNextServerHeartbeatStartedEvent(started); err != nil {
547-
return newEventVerificationError(idx, client, err.Error())
547+
return newEventVerificationError(idx, client, "failed to get next server heartbeat started event: %v", err.Error())
548548
}
549549

550550
if want := evt.ServerHeartbeatStartedEvent.Awaited; want != nil && *want != got.Awaited {
@@ -553,7 +553,7 @@ func verifySDAMEvents(client *clientEntity, expectedEvents *expectedEvents) erro
553553
case evt.ServerHeartbeatSucceededEvent != nil:
554554
var got *event.ServerHeartbeatSucceededEvent
555555
if got, succeeded, err = getNextServerHeartbeatSucceededEvent(succeeded); err != nil {
556-
return newEventVerificationError(idx, client, err.Error())
556+
return newEventVerificationError(idx, client, "failed to get next server heartbeat succeeded event: %v", err.Error())
557557
}
558558

559559
if want := evt.ServerHeartbeatSucceededEvent.Awaited; want != nil && *want != got.Awaited {
@@ -562,15 +562,15 @@ func verifySDAMEvents(client *clientEntity, expectedEvents *expectedEvents) erro
562562
case evt.ServerHeartbeatFailedEvent != nil:
563563
var got *event.ServerHeartbeatFailedEvent
564564
if got, failed, err = getNextServerHeartbeatFailedEvent(failed); err != nil {
565-
return newEventVerificationError(idx, client, err.Error())
565+
return newEventVerificationError(idx, client, "failed to get next server heartbeat failed event: %v", err.Error())
566566
}
567567

568568
if want := evt.ServerHeartbeatFailedEvent.Awaited; want != nil && *want != got.Awaited {
569569
return newEventVerificationError(idx, client, "want awaited %v, got %v", *want, got.Awaited)
570570
}
571571
case evt.TopologyDescriptionChangedEvent != nil:
572572
if _, tchanged, err = getNextTopologyDescriptionChangedEvent(tchanged); err != nil {
573-
return newEventVerificationError(idx, client, err.Error())
573+
return newEventVerificationError(idx, client, "failed to get next description changed event: %v", err.Error())
574574
}
575575
}
576576
}

mongo/client.go

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ type Client struct {
7474
httpClient *http.Client
7575
logger *logger.Logger
7676

77-
// client-side encryption fields
77+
// in-use encryption fields
7878
keyVaultClientFLE *Client
7979
keyVaultCollFLE *Collection
8080
mongocryptdFLE *mongocryptdClient
@@ -396,10 +396,6 @@ func (c *Client) Ping(ctx context.Context, rp *readpref.ReadPref) error {
396396
// If the DefaultReadConcern, DefaultWriteConcern, or DefaultReadPreference options are not set, the client's read
397397
// concern, write concern, or read preference will be used, respectively.
398398
func (c *Client) StartSession(opts ...options.Lister[options.SessionOptions]) (*Session, error) {
399-
if c.sessionPool == nil {
400-
return nil, ErrClientDisconnected
401-
}
402-
403399
sessArgs, err := mongoutil.NewOptions(opts...)
404400
if err != nil {
405401
return nil, err
@@ -454,10 +450,6 @@ func (c *Client) StartSession(opts ...options.Lister[options.SessionOptions]) (*
454450
}
455451

456452
func (c *Client) endSessions(ctx context.Context) {
457-
if c.sessionPool == nil {
458-
return
459-
}
460-
461453
sessionIDs := c.sessionPool.IDSlice()
462454
op := operation.NewEndSessions(nil).ClusterClock(c.clock).Deployment(c.deployment).
463455
ServerSelector(&serverselector.ReadPref{ReadPref: readpref.PrimaryPreferred()}).
@@ -872,10 +864,6 @@ func (c *Client) UseSessionWithOptions(
872864
// documentation).
873865
func (c *Client) Watch(ctx context.Context, pipeline interface{},
874866
opts ...options.Lister[options.ChangeStreamOptions]) (*ChangeStream, error) {
875-
if c.sessionPool == nil {
876-
return nil, ErrClientDisconnected
877-
}
878-
879867
csConfig := changeStreamConfig{
880868
readConcern: c.readConcern,
881869
readPreference: c.readPreference,
@@ -921,9 +909,7 @@ func newLogger(opts options.Lister[options.LoggerOptions]) (*logger.Logger, erro
921909

922910
// If there are no component-level options and the environment does not
923911
// contain component variables, then do nothing.
924-
if (args.ComponentLevels == nil || len(args.ComponentLevels) == 0) &&
925-
!logger.EnvHasComponentVariables() {
926-
912+
if len(args.ComponentLevels) == 0 && !logger.EnvHasComponentVariables() {
927913
return nil, nil
928914
}
929915

mongo/client_encryption_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ func TestClientEncryption_ErrClientDisconnected(t *testing.T) {
3232
t.Run("CreateEncryptedCollection", func(t *testing.T) {
3333
t.Parallel()
3434
_, _, err := ce.CreateEncryptedCollection(context.Background(), nil, "", options.CreateCollection(), "", nil)
35-
assert.Equal(t, ErrClientDisconnected, err, "expected error %v, got %v", ErrClientDisconnected, err)
3635
assert.ErrorIs(t, err, ErrClientDisconnected)
3736
})
3837
t.Run("AddKeyAltName", func(t *testing.T) {

mongo/client_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ import (
1919
"go.mongodb.org/mongo-driver/v2/internal/assert"
2020
"go.mongodb.org/mongo-driver/v2/internal/integtest"
2121
"go.mongodb.org/mongo-driver/v2/internal/mongoutil"
22+
"go.mongodb.org/mongo-driver/v2/internal/require"
2223
"go.mongodb.org/mongo-driver/v2/mongo/options"
2324
"go.mongodb.org/mongo-driver/v2/mongo/readconcern"
2425
"go.mongodb.org/mongo-driver/v2/mongo/readpref"
2526
"go.mongodb.org/mongo-driver/v2/mongo/writeconcern"
2627
"go.mongodb.org/mongo-driver/v2/tag"
2728
"go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt"
28-
"go.mongodb.org/mongo-driver/v2/x/mongo/driver/session"
2929
"go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology"
3030
)
3131

@@ -37,7 +37,7 @@ func setupClient(opts ...options.Lister[options.ClientOptions]) *Client {
3737
integtest.AddTestServerAPIVersion(clientOpts)
3838
opts = append(opts, clientOpts)
3939
}
40-
client, _ := newClient(opts...)
40+
client, _ := Connect(opts...)
4141
return client
4242
}
4343

@@ -53,11 +53,14 @@ func TestClient(t *testing.T) {
5353
assert.Equal(t, dbName, db.Name(), "expected db name %v, got %v", dbName, db.Name())
5454
assert.Equal(t, client, db.Client(), "expected client %v, got %v", client, db.Client())
5555
})
56-
t.Run("replace topology error", func(t *testing.T) {
56+
t.Run("replaceErrors for disconnected topology", func(t *testing.T) {
5757
client := setupClient()
5858

59-
_, err := client.StartSession()
60-
assert.Equal(t, ErrClientDisconnected, err, "expected error %v, got %v", ErrClientDisconnected, err)
59+
topo, ok := client.deployment.(*topology.Topology)
60+
require.True(t, ok, "client deployment is not a topology")
61+
62+
err := topo.Disconnect(context.Background())
63+
require.NoError(t, err)
6164

6265
_, err = client.ListDatabases(bgCtx, bson.D{})
6366
assert.Equal(t, ErrClientDisconnected, err, "expected error %v, got %v", ErrClientDisconnected, err)
@@ -72,9 +75,7 @@ func TestClient(t *testing.T) {
7275
assert.Equal(t, ErrClientDisconnected, err, "expected error %v, got %v", ErrClientDisconnected, err)
7376
})
7477
t.Run("nil document error", func(t *testing.T) {
75-
// manually set session pool to non-nil because Watch will return ErrClientDisconnected
7678
client := setupClient()
77-
client.sessionPool = &session.Pool{}
7879

7980
_, err := client.Watch(bgCtx, nil)
8081
watchErr := errors.New("can only marshal slices and arrays into aggregation pipelines, but got invalid")

mongo/collection_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,20 @@ package mongo
88

99
import (
1010
"bytes"
11+
"context"
1112
"errors"
1213
"testing"
1314

1415
"go.mongodb.org/mongo-driver/v2/bson"
1516
"go.mongodb.org/mongo-driver/v2/internal/assert"
1617
"go.mongodb.org/mongo-driver/v2/internal/ptrutil"
18+
"go.mongodb.org/mongo-driver/v2/internal/require"
1719
"go.mongodb.org/mongo-driver/v2/mongo/options"
1820
"go.mongodb.org/mongo-driver/v2/mongo/readconcern"
1921
"go.mongodb.org/mongo-driver/v2/mongo/readpref"
2022
"go.mongodb.org/mongo-driver/v2/mongo/writeconcern"
2123
"go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore"
24+
"go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology"
2225
)
2326

2427
const (
@@ -78,12 +81,18 @@ func TestCollection(t *testing.T) {
7881
}
7982
compareColls(t, expected, coll)
8083
})
81-
t.Run("replace topology error", func(t *testing.T) {
84+
t.Run("replaceErrors for disconnected topology", func(t *testing.T) {
8285
coll := setupColl("foo")
8386
doc := bson.D{}
8487
update := bson.D{{"$update", bson.D{{"x", 1}}}}
8588

86-
_, err := coll.InsertOne(bgCtx, doc)
89+
topo, ok := coll.client.deployment.(*topology.Topology)
90+
require.True(t, ok, "client deployment is not a topology")
91+
92+
err := topo.Disconnect(context.Background())
93+
require.NoError(t, err)
94+
95+
_, err = coll.InsertOne(bgCtx, doc)
8796
assert.Equal(t, ErrClientDisconnected, err, "expected error %v, got %v", ErrClientDisconnected, err)
8897

8998
_, err = coll.InsertMany(bgCtx, []interface{}{doc})

mongo/database.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ func (db *Database) CreateCollection(ctx context.Context, name string, opts ...o
596596
return fmt.Errorf("failed to construct options from builder: %w", err)
597597
}
598598

599-
// Follow Client-Side Encryption specification to check for encryptedFields.
599+
// Follow In-Use Encryption specification to check for encryptedFields.
600600
// Check for encryptedFields from create options.
601601
ef := args.EncryptedFields
602602
// Check for encryptedFields from the client EncryptedFieldsMap.

mongo/database_test.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"go.mongodb.org/mongo-driver/v2/bson"
1616
"go.mongodb.org/mongo-driver/v2/internal/assert"
17+
"go.mongodb.org/mongo-driver/v2/internal/require"
1718
"go.mongodb.org/mongo-driver/v2/mongo/options"
1819
"go.mongodb.org/mongo-driver/v2/mongo/readconcern"
1920
"go.mongodb.org/mongo-driver/v2/mongo/readpref"
@@ -83,9 +84,16 @@ func TestDatabase(t *testing.T) {
8384
compareDbs(t, expected, got)
8485
})
8586
})
86-
t.Run("replace topology error", func(t *testing.T) {
87+
t.Run("replaceErrors for disconnected topology", func(t *testing.T) {
8788
db := setupDb("foo")
88-
err := db.RunCommand(bgCtx, bson.D{{"x", 1}}).Err()
89+
90+
topo, ok := db.client.deployment.(*topology.Topology)
91+
require.True(t, ok, "client deployment is not a topology")
92+
93+
err := topo.Disconnect(context.Background())
94+
require.NoError(t, err)
95+
96+
err = db.RunCommand(bgCtx, bson.D{{"x", 1}}).Err()
8997
assert.Equal(t, ErrClientDisconnected, err, "expected error %v, got %v", ErrClientDisconnected, err)
9098

9199
err = db.Drop(bgCtx)
@@ -96,9 +104,7 @@ func TestDatabase(t *testing.T) {
96104
})
97105
t.Run("TransientTransactionError label", func(t *testing.T) {
98106
client := setupClient(options.Client().ApplyURI("mongodb://nonexistent").SetServerSelectionTimeout(3 * time.Second))
99-
err := client.connect()
100107
defer func() { _ = client.Disconnect(bgCtx) }()
101-
assert.Nil(t, err, "expected nil, got %v", err)
102108

103109
t.Run("negative case of non-transaction", func(t *testing.T) {
104110
var sse topology.ServerSelectionError

0 commit comments

Comments
 (0)