From 54651e397e57221871a7d19772e37f14694e5a0e Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Tue, 29 Oct 2024 10:36:16 -0600 Subject: [PATCH 1/5] POC --- .../pool-create-min-size-error.json | 8 +- .../pool-create-min-size-error.yml | 4 +- .../unified/pool-clear-application-error.json | 149 +++++++++ .../unified/pool-clear-application-error.yml | 88 ++++++ .../unified/pool-clear-checkout-error.json | 299 ++++++++++++++++++ .../unified/pool-clear-checkout-error.yml | 177 +++++++++++ .../pool-clear-min-pool-size-error.json | 242 ++++++++++++++ .../pool-clear-min-pool-size-error.yml | 150 +++++++++ 8 files changed, 1111 insertions(+), 6 deletions(-) create mode 100644 source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.json create mode 100644 source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.yml create mode 100644 source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json create mode 100644 source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml create mode 100644 source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json create mode 100644 source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml diff --git a/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.json b/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.json index 1c744b850c..509b2a2356 100644 --- a/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.json +++ b/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.json @@ -49,15 +49,15 @@ "type": "ConnectionCreated", "address": 42 }, + { + "type": "ConnectionPoolCleared", + "address": 42 + }, { "type": "ConnectionClosed", "address": 42, "connectionId": 42, "reason": "error" - }, - { - "type": "ConnectionPoolCleared", - "address": 42 } ], "ignore": [ diff --git a/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.yml b/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.yml index dd5890b1d9..f43c4ee154 100644 --- a/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.yml +++ b/source/connection-monitoring-and-pooling/tests/cmap-format/pool-create-min-size-error.yml @@ -30,11 +30,11 @@ events: address: 42 - type: ConnectionCreated address: 42 + - type: ConnectionPoolCleared + address: 42 - type: ConnectionClosed address: 42 connectionId: 42 reason: error - - type: ConnectionPoolCleared - address: 42 ignore: - ConnectionPoolCreated diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.json new file mode 100644 index 0000000000..b8fd95fee3 --- /dev/null +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.json @@ -0,0 +1,149 @@ +{ + "description": "pool-clear-application-error", + "schemaVersion": "1.4", + "runOnRequirements": [ + { + "minServerVersion": "4.4", + "serverless": "forbid", + "topologies": [ + "single", + "replicaset", + "sharded" + ] + } + ], + "createEntities": [ + { + "client": { + "id": "setupClient", + "useMultipleMongoses": false + } + } + ], + "initialData": [ + { + "collectionName": "find-network-error", + "databaseName": "sdam-tests", + "documents": [ + { + "_id": 1 + }, + { + "_id": 2 + } + ] + } + ], + "tests": [ + { + "description": "Pool is cleared before application connection is checked into the pool", + "operations": [ + { + "name": "failPoint", + "object": "testRunner", + "arguments": { + "client": "setupClient", + "failPoint": { + "configureFailPoint": "failCommand", + "mode": { + "times": 1 + }, + "data": { + "failCommands": [ + "find" + ], + "closeConnection": true, + "appName": "findNetworkErrorTest" + } + } + } + }, + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "useMultipleMongoses": false, + "observeEvents": [ + "poolClearedEvent", + "connectionCheckedInEvent" + ], + "uriOptions": { + "retryWrites": false, + "retryReads": false, + "appname": "findNetworkErrorTest" + } + } + }, + { + "database": { + "id": "database", + "client": "client", + "databaseName": "sdam-tests" + } + }, + { + "collection": { + "id": "collection", + "database": "database", + "collectionName": "find-network-error" + } + } + ] + } + }, + { + "name": "find", + "object": "collection", + "arguments": { + "filter": { + "_id": 1 + } + }, + "expectError": { + "isError": true + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "poolClearedEvent": {} + }, + "count": 1 + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "connectionCheckedInEvent": {} + }, + "count": 1 + } + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "cmap", + "events": [ + { + "poolClearedEvent": {} + }, + { + "connectionCheckedInEvent": {} + } + ] + } + ] + } + ] +} diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.yml new file mode 100644 index 0000000000..43e425711e --- /dev/null +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-application-error.yml @@ -0,0 +1,88 @@ +--- +description: pool-clear-application-error + +schemaVersion: "1.4" + +runOnRequirements: + # failCommand appName requirements + - minServerVersion: "4.4" + serverless: forbid + topologies: [ single, replicaset, sharded ] + +createEntities: + - client: + id: &setupClient setupClient + useMultipleMongoses: false + +initialData: &initialData + - collectionName: &collectionName find-network-error + databaseName: &databaseName sdam-tests + documents: + - _id: 1 + - _id: 2 + +tests: + - description: Pool is cleared before application connection is checked into the pool + operations: + - name: failPoint + object: testRunner + arguments: + client: *setupClient + failPoint: + configureFailPoint: failCommand + mode: + times: 1 + data: + failCommands: + - find + closeConnection: true + appName: findNetworkErrorTest + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + useMultipleMongoses: false + observeEvents: + - poolClearedEvent + - connectionCheckedInEvent + uriOptions: + retryWrites: false + retryReads: false + appname: findNetworkErrorTest + - database: + id: &database database + client: *client + databaseName: *databaseName + - collection: + id: &collection collection + database: *database + collectionName: *collectionName + - name: find + object: *collection + arguments: + filter: + _id: 1 + expectError: + isError: true + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + poolClearedEvent: {} + count: 1 + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + connectionCheckedInEvent: {} + count: 1 + expectEvents: + - client: *client + eventType: cmap + events: + - poolClearedEvent: {} + - connectionCheckedInEvent: {} diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json new file mode 100644 index 0000000000..182c40e27f --- /dev/null +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json @@ -0,0 +1,299 @@ +{ + "description": "pool-clear-on-error-checkout", + "schemaVersion": "1.4", + "runOnRequirements": [ + { + "minServerVersion": "4.4", + "serverless": "forbid", + "topologies": [ + "single", + "replicaset", + "sharded" + ] + } + ], + "createEntities": [ + { + "client": { + "id": "setupClient", + "useMultipleMongoses": false + } + } + ], + "tests": [ + { + "description": "Pool is cleared before connection is closed (authentication error)", + "operations": [ + { + "name": "failPoint", + "object": "testRunner", + "arguments": { + "client": "setupClient", + "failPoint": { + "configureFailPoint": "failCommand", + "mode": { + "times": 1 + }, + "data": { + "failCommands": [ + "saslContinue" + ], + "appName": "authErrorTest", + "errorCode": 18 + } + } + } + }, + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "useMultipleMongoses": false, + "observeEvents": [ + "connectionCheckOutStartedEvent", + "poolClearedEvent", + "connectionClosedEvent", + "connectionCheckOutFailedEvent" + ], + "uriOptions": { + "retryWrites": false, + "appname": "authErrorTest" + } + } + }, + { + "database": { + "id": "database", + "client": "client", + "databaseName": "foo" + } + }, + { + "collection": { + "id": "collection", + "database": "database", + "collectionName": "bar" + } + } + ] + } + }, + { + "name": "insertMany", + "object": "collection", + "arguments": { + "documents": [ + { + "_id": 3 + }, + { + "_id": 4 + } + ] + }, + "expectError": { + "isError": true + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "poolClearedEvent": {} + }, + "count": 1 + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "connectionClosedEvent": {} + }, + "count": 1 + } + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "cmap", + "events": [ + { + "connectionCheckOutStartedEvent": {} + }, + { + "poolClearedEvent": {} + }, + { + "connectionClosedEvent": {} + }, + { + "connectionCheckOutFailedEvent": {} + } + ] + } + ] + }, + { + "description": "Pool is cleared connection is closed (handshake error)", + "runOnRequirements": [ + { + "topologies": [ + "single" + ] + } + ], + "operations": [ + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "useMultipleMongoses": false, + "observeEvents": [ + "connectionCheckOutStartedEvent", + "poolClearedEvent", + "connectionClosedEvent", + "connectionCheckOutFailedEvent", + "topologyDescriptionChangedEvent" + ], + "uriOptions": { + "retryWrites": false, + "appname": "authErrorTest", + "minPoolSize": 0, + "serverMonitoringMode": "poll", + "heartbeatFrequencyMS": 1000000 + } + } + }, + { + "database": { + "id": "database", + "client": "client", + "databaseName": "foo" + } + }, + { + "collection": { + "id": "collection", + "database": "database", + "collectionName": "bar" + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "newDescription": { + "type": "Single" + } + } + }, + "count": 1 + } + }, + { + "name": "failPoint", + "object": "testRunner", + "arguments": { + "client": "setupClient", + "failPoint": { + "configureFailPoint": "failCommand", + "mode": { + "times": 1 + }, + "data": { + "failCommands": [ + "hello", + "isMaster" + ], + "appName": "authErrorTest", + "closeConnection": true + } + } + } + }, + { + "name": "insertMany", + "object": "collection", + "arguments": { + "documents": [ + { + "_id": 3 + }, + { + "_id": 4 + } + ] + }, + "expectError": { + "isError": true + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "poolClearedEvent": {} + }, + "count": 1 + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "connectionClosedEvent": {} + }, + "count": 1 + } + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "cmap", + "events": [ + { + "connectionCheckOutStartedEvent": {} + }, + { + "poolClearedEvent": {} + }, + { + "connectionClosedEvent": {} + }, + { + "connectionCheckOutFailedEvent": {} + } + ] + } + ] + } + ] +} diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml new file mode 100644 index 0000000000..4070ff1256 --- /dev/null +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml @@ -0,0 +1,177 @@ +--- +description: pool-clear-on-error-checkout + +schemaVersion: "1.4" + +runOnRequirements: + # failCommand appName requirements + - minServerVersion: "4.4" + serverless: forbid + topologies: [ single, replicaset, sharded ] + +createEntities: + - client: + id: &setupClient setupClient + useMultipleMongoses: false + +tests: + - description: Pool is cleared before connection is closed (authentication error) + operations: + - name: failPoint + object: testRunner + arguments: + client: *setupClient + failPoint: + configureFailPoint: failCommand + mode: + times: 1 + data: + failCommands: + - saslContinue + appName: authErrorTest + errorCode: 18 + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + useMultipleMongoses: false + observeEvents: + - connectionCheckOutStartedEvent + - poolClearedEvent + - connectionClosedEvent + - connectionCheckOutFailedEvent + uriOptions: + retryWrites: false + appname: authErrorTest + - database: + id: &database database + client: *client + databaseName: foo + - collection: + id: &collection collection + database: *database + collectionName: bar + - name: insertMany + object: *collection + arguments: + documents: + - _id: 3 + - _id: 4 + expectError: + isError: true + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + poolClearedEvent: {} + count: 1 + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + connectionClosedEvent: {} + count: 1 + expectEvents: + - client: *client + eventType: cmap + events: + - connectionCheckOutStartedEvent: {} + - poolClearedEvent: {} + - connectionClosedEvent: {} + - connectionCheckOutFailedEvent: {} + + - description: Pool is cleared connection is closed (handshake error) + runOnRequirements: + - topologies: [ single ] + operations: + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + useMultipleMongoses: false + observeEvents: + - connectionCheckOutStartedEvent + - poolClearedEvent + - connectionClosedEvent + - connectionCheckOutFailedEvent + - topologyDescriptionChangedEvent + uriOptions: + retryWrites: false + appname: authErrorTest + minPoolSize: 0 + # ensure that once we've connected to the server, the failCommand won't + # be triggered by monitors and will only be triggered by handshakes + serverMonitoringMode: poll + heartbeatFrequencyMS: 1000000 + - database: + id: &database database + client: *client + databaseName: foo + - collection: + id: &collection collection + database: *database + collectionName: bar + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + topologyDescriptionChangedEvent: + previousDescription: + type: "Unknown" + newDescription: + type: "Single" + count: 1 + + - name: failPoint + object: testRunner + arguments: + client: *setupClient + failPoint: + configureFailPoint: failCommand + mode: + times: 1 + data: + failCommands: + - hello + - isMaster + appName: authErrorTest + closeConnection: true + + - name: insertMany + object: *collection + arguments: + documents: + - _id: 3 + - _id: 4 + expectError: + isError: true + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + poolClearedEvent: {} + count: 1 + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + connectionClosedEvent: {} + count: 1 + expectEvents: + - client: *client + eventType: cmap + events: + - connectionCheckOutStartedEvent: {} + - poolClearedEvent: {} + - connectionClosedEvent: {} + - connectionCheckOutFailedEvent: {} + diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json new file mode 100644 index 0000000000..8505ebbbfb --- /dev/null +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json @@ -0,0 +1,242 @@ +{ + "description": "pool-cleared-on-min-pool-size-population-error", + "schemaVersion": "1.4", + "runOnRequirements": [ + { + "minServerVersion": "4.4", + "serverless": "forbid", + "topologies": [ + "single", + "replicaset", + "sharded" + ] + } + ], + "createEntities": [ + { + "client": { + "id": "setupClient", + "useMultipleMongoses": false + } + } + ], + "tests": [ + { + "description": "Pool is cleared on authentication error during minPoolSize population", + "runOnRequirements": [ + { + "minServerVersion": "4.4", + "serverless": "forbid" + } + ], + "operations": [ + { + "name": "failPoint", + "object": "testRunner", + "arguments": { + "client": "setupClient", + "failPoint": { + "configureFailPoint": "failCommand", + "mode": { + "times": 1 + }, + "data": { + "failCommands": [ + "saslContinue" + ], + "appName": "authErrorTest", + "errorCode": 18 + } + } + } + }, + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "observeEvents": [ + "connectionCreatedEvent", + "poolClearedEvent", + "connectionClosedEvent" + ], + "uriOptions": { + "appname": "authErrorTest", + "minPoolSize": 1 + } + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "poolClearedEvent": {} + }, + "count": 1 + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "connectionClosedEvent": {} + }, + "count": 1 + } + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "cmap", + "events": [ + { + "connectionCreatedEvent": {} + }, + { + "poolClearedEvent": {} + }, + { + "connectionClosedEvent": {} + } + ] + } + ] + }, + { + "description": "Pool is cleared on handshake error during minPoolSize population", + "runOnRequirements": [ + { + "minServerVersion": "4.4", + "serverless": "forbid", + "topologies": [ + "single" + ] + } + ], + "operations": [ + { + "name": "createEntities", + "object": "testRunner", + "arguments": { + "entities": [ + { + "client": { + "id": "client", + "observeEvents": [ + "topologyDescriptionChangedEvent", + "connectionCreatedEvent", + "poolClearedEvent", + "connectionClosedEvent", + "connectionReadyEvent" + ], + "uriOptions": { + "appname": "authErrorTest", + "minPoolSize": 5, + "maxConnecting": 1, + "serverMonitoringMode": "poll", + "heartbeatFrequencyMS": 1000000 + } + } + } + ] + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "topologyDescriptionChangedEvent": { + "previousDescription": { + "type": "Unknown" + }, + "newDescription": { + "type": "Single" + } + } + }, + "count": 1 + } + }, + { + "name": "failPoint", + "object": "testRunner", + "arguments": { + "client": "setupClient", + "failPoint": { + "configureFailPoint": "failCommand", + "mode": { + "times": 1 + }, + "data": { + "failCommands": [ + "hello", + "isMaster" + ], + "appName": "authErrorTest", + "closeConnection": true + } + } + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "poolClearedEvent": {} + }, + "count": 1 + } + }, + { + "name": "waitForEvent", + "object": "testRunner", + "arguments": { + "client": "client", + "event": { + "connectionClosedEvent": {} + }, + "count": 1 + } + } + ], + "expectEvents": [ + { + "client": "client", + "eventType": "cmap", + "events": [ + { + "connectionCreatedEvent": {} + }, + { + "connectionReadyEvent": {} + }, + { + "connectionCreatedEvent": {} + }, + { + "poolClearedEvent": {} + }, + { + "connectionClosedEvent": {} + } + ] + } + ] + } + ] +} diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml new file mode 100644 index 0000000000..57d126602c --- /dev/null +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml @@ -0,0 +1,150 @@ +--- +description: pool-cleared-on-min-pool-size-population-error + +schemaVersion: "1.4" + +runOnRequirements: + # failCommand appName requirements + - minServerVersion: "4.4" + serverless: forbid + topologies: [ single, replicaset, sharded ] + +createEntities: + - client: + id: &setupClient setupClient + useMultipleMongoses: false + +tests: + - description: Pool is cleared on authentication error during minPoolSize population + runOnRequirements: + # failCommand appName requirements + - minServerVersion: "4.4" + serverless: forbid + operations: + - name: failPoint + object: testRunner + arguments: + client: *setupClient + failPoint: + configureFailPoint: failCommand + mode: + times: 1 + data: + failCommands: + - saslContinue + appName: authErrorTest + errorCode: 18 + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + observeEvents: + - connectionCreatedEvent + - poolClearedEvent + - connectionClosedEvent + uriOptions: + appname: authErrorTest + minPoolSize: 1 + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + poolClearedEvent: {} + count: 1 + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + connectionClosedEvent: {} + count: 1 + expectEvents: + - client: *client + eventType: cmap + events: + - connectionCreatedEvent: {} + - poolClearedEvent: {} + - connectionClosedEvent: {} + + - description: Pool is cleared on handshake error during minPoolSize population + runOnRequirements: + # failCommand appName requirements + - minServerVersion: "4.4" + serverless: forbid + topologies: [ single ] + operations: + - name: createEntities + object: testRunner + arguments: + entities: + - client: + id: &client client + observeEvents: + - topologyDescriptionChangedEvent + - connectionCreatedEvent + - poolClearedEvent + - connectionClosedEvent + - connectionReadyEvent + uriOptions: + appname: authErrorTest + minPoolSize: 5 + maxConnecting: 1 + # ensure that once we've connected to the server, the failCommand won't + # be triggered by monitors and will only be triggered by handshakes + serverMonitoringMode: poll + heartbeatFrequencyMS: 1000000 + + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + topologyDescriptionChangedEvent: + previousDescription: + type: "Unknown" + newDescription: + type: "Single" + count: 1 + + - name: failPoint + object: testRunner + arguments: + client: *setupClient + failPoint: + configureFailPoint: failCommand + mode: + times: 1 + data: + failCommands: + - hello + - isMaster + appName: authErrorTest + closeConnection: true + + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + poolClearedEvent: {} + count: 1 + - name: waitForEvent + object: testRunner + arguments: + client: *client + event: + connectionClosedEvent: {} + count: 1 + expectEvents: + - client: *client + eventType: cmap + events: + - connectionCreatedEvent: {} + - connectionReadyEvent: {} + - connectionCreatedEvent: {} + - poolClearedEvent: {} + - connectionClosedEvent: {} + From 91d9b54c4a1d07866ebea5dd1087a5d7e42ff3b2 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Tue, 29 Oct 2024 12:16:19 -0600 Subject: [PATCH 2/5] POC pt 1 --- .../server-discovery-and-monitoring.md | 7 ++++--- .../tests/unified/pool-clear-checkout-error.json | 5 +++++ .../tests/unified/pool-clear-checkout-error.yml | 3 +++ .../unified/pool-clear-min-pool-size-error.json | 16 +++------------- .../unified/pool-clear-min-pool-size-error.yml | 8 ++------ 5 files changed, 17 insertions(+), 22 deletions(-) diff --git a/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md b/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md index 08c900ba4a..fe3cd418a9 100644 --- a/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md +++ b/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md @@ -1241,10 +1241,11 @@ if and only if the error is "node is shutting down" or the error originated from and [other transient errors](#other-transient-errors) and [Why close connections when a node is shutting down?](#why-close-connections-when-a-node-is-shutting-down).) -##### Authentication errors +##### Authentication and Handshake errors -If the authentication handshake fails for a connection, drivers MUST mark the server Unknown and clear the server's -connection pool if the TopologyType is not LoadBalanced. (See +If the driver encounters errors when establishing application connections (this includes the initial handshake and +authentication), the driver MUST drivers MUST mark the server Unknown and clear the server's connection pool if the +TopologyType is not LoadBalanced. (See [Why mark a server Unknown after an auth error?](#why-mark-a-server-unknown-after-an-auth-error)) ### Monitoring SDAM events diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json index 182c40e27f..188235ec33 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json @@ -23,6 +23,11 @@ "tests": [ { "description": "Pool is cleared before connection is closed (authentication error)", + "runOnRequirements": [ + { + "auth": true + } + ], "operations": [ { "name": "failPoint", diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml index 4070ff1256..c362f75ea4 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml @@ -16,6 +16,9 @@ createEntities: tests: - description: Pool is cleared before connection is closed (authentication error) + runOnRequirements: + - auth: true + operations: - name: failPoint object: testRunner diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json index 8505ebbbfb..c94051bd27 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json @@ -6,9 +6,7 @@ "minServerVersion": "4.4", "serverless": "forbid", "topologies": [ - "single", - "replicaset", - "sharded" + "single" ] } ], @@ -26,7 +24,8 @@ "runOnRequirements": [ { "minServerVersion": "4.4", - "serverless": "forbid" + "serverless": "forbid", + "auth": true } ], "operations": [ @@ -115,15 +114,6 @@ }, { "description": "Pool is cleared on handshake error during minPoolSize population", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single" - ] - } - ], "operations": [ { "name": "createEntities", diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml index 57d126602c..62363a54ff 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml @@ -7,7 +7,7 @@ runOnRequirements: # failCommand appName requirements - minServerVersion: "4.4" serverless: forbid - topologies: [ single, replicaset, sharded ] + topologies: [ single ] createEntities: - client: @@ -20,6 +20,7 @@ tests: # failCommand appName requirements - minServerVersion: "4.4" serverless: forbid + auth: true operations: - name: failPoint object: testRunner @@ -70,11 +71,6 @@ tests: - connectionClosedEvent: {} - description: Pool is cleared on handshake error during minPoolSize population - runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single ] operations: - name: createEntities object: testRunner From b68ed568775b6bbd1ed1cd9082041bcda807cbf5 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Thu, 31 Oct 2024 07:25:01 -0600 Subject: [PATCH 3/5] comments --- .../server-discovery-and-monitoring.md | 5 ++--- .../tests/unified/pool-clear-checkout-error.json | 2 +- .../tests/unified/pool-clear-checkout-error.yml | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md b/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md index fe3cd418a9..661777276c 100644 --- a/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md +++ b/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md @@ -1244,9 +1244,8 @@ and [other transient errors](#other-transient-errors) and ##### Authentication and Handshake errors If the driver encounters errors when establishing application connections (this includes the initial handshake and -authentication), the driver MUST drivers MUST mark the server Unknown and clear the server's connection pool if the -TopologyType is not LoadBalanced. (See -[Why mark a server Unknown after an auth error?](#why-mark-a-server-unknown-after-an-auth-error)) +authentication), the driver MUST mark the server Unknown and clear the server's connection pool if the TopologyType is +not LoadBalanced. (See [Why mark a server Unknown after an auth error?](#why-mark-a-server-unknown-after-an-auth-error)) ### Monitoring SDAM events diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json index 188235ec33..0fa873092a 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json @@ -149,7 +149,7 @@ ] }, { - "description": "Pool is cleared connection is closed (handshake error)", + "description": "Pool is cleared before connection is closed (handshake error)", "runOnRequirements": [ { "topologies": [ diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml index c362f75ea4..8e69899d9a 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml @@ -87,7 +87,7 @@ tests: - connectionClosedEvent: {} - connectionCheckOutFailedEvent: {} - - description: Pool is cleared connection is closed (handshake error) + - description: Pool is cleared before connection is closed (handshake error) runOnRequirements: - topologies: [ single ] operations: From 9c26e90c38534695fe05dc3cfd0d6625438ffb45 Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Tue, 5 Nov 2024 10:43:34 -0700 Subject: [PATCH 4/5] remove unnecessary run on requirements --- .../tests/unified/pool-clear-min-pool-size-error.json | 2 -- .../tests/unified/pool-clear-min-pool-size-error.yml | 4 +--- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json index c94051bd27..11c6be5bc1 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.json @@ -23,8 +23,6 @@ "description": "Pool is cleared on authentication error during minPoolSize population", "runOnRequirements": [ { - "minServerVersion": "4.4", - "serverless": "forbid", "auth": true } ], diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml index 62363a54ff..7e7ef0c590 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-min-pool-size-error.yml @@ -18,9 +18,7 @@ tests: - description: Pool is cleared on authentication error during minPoolSize population runOnRequirements: # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - auth: true + - auth: true operations: - name: failPoint object: testRunner From ea0e5b7e718e4f2fb6bc2f37c8fc3e8f91fcaddc Mon Sep 17 00:00:00 2001 From: Bailey Pearson Date: Mon, 11 Nov 2024 09:25:58 -0700 Subject: [PATCH 5/5] Valentin's comments --- .../tests/unified/pool-clear-checkout-error.json | 10 +--------- .../tests/unified/pool-clear-checkout-error.yml | 4 ---- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json index 0fa873092a..126ee54533 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.json @@ -61,8 +61,7 @@ "observeEvents": [ "connectionCheckOutStartedEvent", "poolClearedEvent", - "connectionClosedEvent", - "connectionCheckOutFailedEvent" + "connectionClosedEvent" ], "uriOptions": { "retryWrites": false, @@ -140,9 +139,6 @@ }, { "connectionClosedEvent": {} - }, - { - "connectionCheckOutFailedEvent": {} } ] } @@ -171,7 +167,6 @@ "connectionCheckOutStartedEvent", "poolClearedEvent", "connectionClosedEvent", - "connectionCheckOutFailedEvent", "topologyDescriptionChangedEvent" ], "uriOptions": { @@ -292,9 +287,6 @@ }, { "connectionClosedEvent": {} - }, - { - "connectionCheckOutFailedEvent": {} } ] } diff --git a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml index 8e69899d9a..8df74b6a6f 100644 --- a/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml +++ b/source/server-discovery-and-monitoring/tests/unified/pool-clear-checkout-error.yml @@ -44,7 +44,6 @@ tests: - connectionCheckOutStartedEvent - poolClearedEvent - connectionClosedEvent - - connectionCheckOutFailedEvent uriOptions: retryWrites: false appname: authErrorTest @@ -85,7 +84,6 @@ tests: - connectionCheckOutStartedEvent: {} - poolClearedEvent: {} - connectionClosedEvent: {} - - connectionCheckOutFailedEvent: {} - description: Pool is cleared before connection is closed (handshake error) runOnRequirements: @@ -102,7 +100,6 @@ tests: - connectionCheckOutStartedEvent - poolClearedEvent - connectionClosedEvent - - connectionCheckOutFailedEvent - topologyDescriptionChangedEvent uriOptions: retryWrites: false @@ -176,5 +173,4 @@ tests: - connectionCheckOutStartedEvent: {} - poolClearedEvent: {} - connectionClosedEvent: {} - - connectionCheckOutFailedEvent: {}