From 00e355ccd015352044e46cf644c2c9467b565a49 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 26 Jan 2024 10:57:34 -0600 Subject: [PATCH 1/3] GODRIVER-3040 [master] Add driver tests for Serverless Proxy incremental rollout (#1528) --- .evergreen/config.yml | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 57f623e3d8..1ae3e38272 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -2283,6 +2283,16 @@ axes: variables: GO_DIST: "/opt/golang/go1.20" + - id: serverless-type + display_name: "Serverless Type" + values: + - id: "original" + display_name: "Serverless" + - id: "proxy" + display_name: "Serverless Proxy" + variables: + VAULT_NAME: "serverless_next" + task_groups: - name: serverless_task_group setup_group_can_fail_task: true @@ -2298,12 +2308,8 @@ task_groups: shell: "bash" script: | ${PREPARE_SHELL} - - SERVERLESS_DRIVERS_GROUP=${SERVERLESS_DRIVERS_GROUP} \ - SERVERLESS_API_PUBLIC_KEY=${SERVERLESS_API_PUBLIC_KEY} \ - SERVERLESS_API_PRIVATE_KEY=${SERVERLESS_API_PRIVATE_KEY} \ - LOADBALANCED=ON \ - bash ${DRIVERS_TOOLS}/.evergreen/serverless/create-instance.sh + bash ${DRIVERS_TOOLS}/.evergreen/serverless/setup-secrets.sh ${VAULT_NAME} + bash ${DRIVERS_TOOLS}/.evergreen/serverless/create-instance.sh - command: expansions.update params: file: serverless-expansion.yml @@ -2339,12 +2345,7 @@ task_groups: shell: "bash" script: | ${PREPARE_SHELL} - - SERVERLESS_DRIVERS_GROUP=${SERVERLESS_DRIVERS_GROUP} \ - SERVERLESS_API_PUBLIC_KEY=${SERVERLESS_API_PUBLIC_KEY} \ - SERVERLESS_API_PRIVATE_KEY=${SERVERLESS_API_PRIVATE_KEY} \ - SERVERLESS_INSTANCE_NAME=${SERVERLESS_INSTANCE_NAME} \ - bash ${DRIVERS_TOOLS}/.evergreen/serverless/delete-instance.sh + bash ${DRIVERS_TOOLS}/.evergreen/serverless/delete-instance.sh - func: handle-test-artifacts - func: cleanup tasks: @@ -2667,8 +2668,14 @@ buildvariants: - matrix_name: "serverless" tags: ["pullrequest"] - matrix_spec: { os-serverless: "*" } - display_name: "Serverless ${os-serverless}" + matrix_spec: { os-serverless: "*", serverless-type: "original" } + display_name: "${serverless-type} ${os-serverless}" + tasks: + - "serverless_task_group" + + - matrix_name: "serverless-proxy" + matrix_spec: { os-serverless: "*", serverless-type: "proxy" } + display_name: "${serverless-type} ${os-serverless}" tasks: - "serverless_task_group" From 43797ef096f00b1434daaba5e6eb1598485f89ac Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 30 Jan 2024 10:03:46 -0600 Subject: [PATCH 2/3] GODRIVER-3108 [master] Optimize writeServerSelector (#1530) Co-authored-by: Ivan Sopov --- mongo/description/selector_test.go | 21 +++++++++++++++++++++ mongo/description/server_selector.go | 12 +++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/mongo/description/selector_test.go b/mongo/description/selector_test.go index e83a751b94..a3566783dd 100644 --- a/mongo/description/selector_test.go +++ b/mongo/description/selector_test.go @@ -364,6 +364,27 @@ func BenchmarkSelector_Sharded(b *testing.B) { } } +func Benchmark_SelectServer_SelectServer(b *testing.B) { + topology := Topology{Kind: ReplicaSet} // You can change the topology as needed + candidates := []Server{ + {Kind: Mongos}, + {Kind: RSPrimary}, + {Kind: Standalone}, + } + + selector := writeServerSelector{} // Assuming this is the receiver type + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := selector.SelectServer(topology, candidates) + if err != nil { + b.Fatalf("Error selecting server: %v", err) + } + } +} + func TestSelector_Single(t *testing.T) { t.Parallel() diff --git a/mongo/description/server_selector.go b/mongo/description/server_selector.go index aee1f050cb..176f0fb53a 100644 --- a/mongo/description/server_selector.go +++ b/mongo/description/server_selector.go @@ -182,7 +182,17 @@ func (writeServerSelector) SelectServer(t Topology, candidates []Server) ([]Serv case Single, LoadBalanced: return candidates, nil default: - result := []Server{} + // Determine the capacity of the results slice. + selected := 0 + for _, candidate := range candidates { + switch candidate.Kind { + case Mongos, RSPrimary, Standalone: + selected++ + } + } + + // Append candidates to the results slice. + result := make([]Server, 0, selected) for _, candidate := range candidates { switch candidate.Kind { case Mongos, RSPrimary, Standalone: From d844e17c401af8bfbb116267984d8ace9ca9215a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 31 Jan 2024 14:10:53 -0600 Subject: [PATCH 3/3] GDORIVER-2934 [master] Add list of possible OS and Go dep errors to case 6 (#1537) Co-authored-by: Preston Vasquez --- .../integration/client_side_encryption_prose_test.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/internal/integration/client_side_encryption_prose_test.go b/internal/integration/client_side_encryption_prose_test.go index 7ec0b07f8f..36139fad7d 100644 --- a/internal/integration/client_side_encryption_prose_test.go +++ b/internal/integration/client_side_encryption_prose_test.go @@ -2239,7 +2239,15 @@ func TestClientSideEncryptionProse(t *testing.T) { crypt, err := mongocrypt.NewMongoCrypt(opts) assert.Nil(mt, err, "error in NewMongoCrypt: %v", err) _, err = crypt.GetKmsProviders(context.Background()) - assert.ErrorContains(mt, err, "Client.Timeout or context cancellation while reading body") + + possibleErrors := []string{ + "error reading response body: context deadline exceeded", // <= 1.19 + RHEL & macOS + "Client.Timeout or context cancellation while reading body", // > 1.20 on all OS + } + + assert.True(t, containsSubstring(possibleErrors, err.Error()), + "expected possibleErrors=%v to contain %v, but it didn't", + possibleErrors, err.Error()) }) })