bson/testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.yml
2025-03-17 20:58:26 +01:00

341 lines
10 KiB
YAML

---
description: interruptInUse
schemaVersion: "1.11"
runOnRequirements:
# failCommand appName requirements
- minServerVersion: "4.9"
serverless: forbid
topologies: [ replicaset, sharded ]
createEntities:
- client:
id: &setupClient setupClient
useMultipleMongoses: false
initialData: &initialData
- collectionName: &collectionName interruptInUse
databaseName: &databaseName sdam-tests
documents: []
tests:
- description: Connection pool clear uses interruptInUseConnections=true after monitor timeout
operations:
- name: createEntities
object: testRunner
arguments:
entities:
- client:
id: &client client
useMultipleMongoses: false
observeEvents:
- poolClearedEvent
- connectionClosedEvent
- commandStartedEvent
- commandSucceededEvent
- commandFailedEvent
- connectionCheckedOutEvent
- connectionCheckedInEvent
uriOptions:
connectTimeoutMS: 500
heartbeatFrequencyMS: 500
appname: interruptInUse
retryReads: false
minPoolSize: 0
- database:
id: &database database
client: *client
databaseName: *databaseName
- collection:
id: &collection collection
database: *database
collectionName: *collectionName
- thread:
id: &thread1 thread1
- name: insertOne
object: *collection
arguments:
document: { _id: 1 }
# simulate a long-running query
- name: runOnThread
object: testRunner
arguments:
thread: *thread1
operation:
name: find
object: *collection
arguments:
filter:
$where : sleep(2000) || true
expectError:
isError: true
# Configure the monitor check to fail with a timeout.
# Use "times: 4" to increase the probability that the Monitor check triggers
# the failpoint, since the RTT hello may trigger this failpoint one or many
# times as well.
- name: failPoint
object: testRunner
arguments:
client: *setupClient
failPoint:
configureFailPoint: failCommand
mode:
times: 4
data:
failCommands:
- hello
- isMaster
blockConnection: true
blockTimeMS: 1500
appName: interruptInUse
- name: waitForThread
object: testRunner
arguments:
thread: *thread1
expectEvents:
- client: *client
eventType: command
events:
- commandStartedEvent:
commandName: insert
- commandSucceededEvent:
commandName: insert
- commandStartedEvent:
commandName: find
- commandFailedEvent:
commandName: find
- client: *client
eventType: cmap
events:
- connectionCheckedOutEvent: {}
- connectionCheckedInEvent: {}
- connectionCheckedOutEvent: {}
- poolClearedEvent:
interruptInUseConnections: true
- connectionCheckedInEvent: {}
- connectionClosedEvent: {}
outcome:
- collectionName: *collectionName
databaseName: *databaseName
documents:
- _id: 1
- description: Error returned from connection pool clear with interruptInUseConnections=true is retryable
operations:
- name: createEntities
object: testRunner
arguments:
entities:
- client:
id: &client client
useMultipleMongoses: false
observeEvents:
- poolClearedEvent
- connectionClosedEvent
- commandStartedEvent
- commandFailedEvent
- commandSucceededEvent
- connectionCheckedOutEvent
- connectionCheckedInEvent
uriOptions:
connectTimeoutMS: 500
heartbeatFrequencyMS: 500
appname: interruptInUseRetryable
retryReads: true
minPoolSize: 0
- database:
id: &database database
client: *client
databaseName: *databaseName
- collection:
id: &collection collection
database: *database
collectionName: *collectionName
- thread:
id: &thread1 thread1
- name: insertOne
object: *collection
arguments:
document: { _id: 1 }
# simulate a long-running query
- name: runOnThread
object: testRunner
arguments:
thread: *thread1
operation:
name: find
object: *collection
arguments:
filter:
$where : sleep(2000) || true
# Configure the monitor check to fail with a timeout.
# Use "times: 4" to increase the probability that the Monitor check triggers
# the failpoint, since the RTT hello may trigger this failpoint one or many
# times as well.
- name: failPoint
object: testRunner
arguments:
client: *setupClient
failPoint:
configureFailPoint: failCommand
mode:
times: 4
data:
failCommands:
- hello
- isMaster
blockConnection: true
blockTimeMS: 1500
appName: interruptInUseRetryable
- name: waitForThread
object: testRunner
arguments:
thread: *thread1
expectEvents:
- client: *client
eventType: command
events:
- commandStartedEvent:
commandName: insert
- commandSucceededEvent:
commandName: insert
- commandStartedEvent:
commandName: find
- commandFailedEvent:
commandName: find
- commandStartedEvent:
commandName: find
- commandSucceededEvent:
commandName: find
- client: *client
eventType: cmap
events:
- connectionCheckedOutEvent: {}
- connectionCheckedInEvent: {}
- connectionCheckedOutEvent: {}
- poolClearedEvent:
interruptInUseConnections: true
- connectionCheckedInEvent: {}
- connectionClosedEvent: {}
- connectionCheckedOutEvent: {}
- connectionCheckedInEvent: {}
outcome:
- collectionName: *collectionName
databaseName: *databaseName
documents:
- _id: 1
- description: Error returned from connection pool clear with interruptInUseConnections=true is retryable for write
operations:
- name: createEntities
object: testRunner
arguments:
entities:
- client:
id: &client client
useMultipleMongoses: false
observeEvents:
- poolClearedEvent
- connectionClosedEvent
- commandStartedEvent
- commandFailedEvent
- commandSucceededEvent
- connectionCheckedOutEvent
- connectionCheckedInEvent
uriOptions:
connectTimeoutMS: 500
heartbeatFrequencyMS: 500
appname: interruptInUseRetryableWrite
retryWrites: true
minPoolSize: 0
- database:
id: &database database
client: *client
databaseName: *databaseName
- collection:
id: &collection collection
database: *database
collectionName: *collectionName
- thread:
id: &thread1 thread1
# ensure the primary is discovered
- name: insertOne
object: *collection
arguments:
document: { _id: 1 }
# simulate a long-running query
- name: runOnThread
object: testRunner
arguments:
thread: *thread1
operation:
name: updateOne
object: *collection
arguments:
filter:
$where: sleep(2000) || true
update:
"$set": { "a": "bar" }
# Configure the monitor check to fail with a timeout.
# Use "times: 4" to increase the probability that the Monitor check triggers
# the failpoint, since the RTT hello may trigger this failpoint one or many
# times as well.
- name: failPoint
object: testRunner
arguments:
client: *setupClient
failPoint:
configureFailPoint: failCommand
mode:
times: 4
data:
failCommands:
- hello
- isMaster
blockConnection: true
blockTimeMS: 1500
appName: interruptInUseRetryableWrite
- name: waitForThread
object: testRunner
arguments:
thread: *thread1
expectEvents:
- client: *client
eventType: command
events:
- commandStartedEvent:
commandName: insert
- commandSucceededEvent:
commandName: insert
- commandStartedEvent:
commandName: update
- commandFailedEvent:
commandName: update
- commandStartedEvent:
commandName: update
- commandSucceededEvent:
commandName: update
- client: *client
eventType: cmap
events:
- connectionCheckedOutEvent: {}
- connectionCheckedInEvent: {}
- connectionCheckedOutEvent: {}
- poolClearedEvent:
interruptInUseConnections: true
- connectionCheckedInEvent: {}
- connectionClosedEvent: {}
- connectionCheckedOutEvent: {}
- connectionCheckedInEvent: {}
outcome:
- collectionName: *collectionName
databaseName: *databaseName
documents:
- { _id: 1, a : bar }