186 lines
5.5 KiB
YAML
186 lines
5.5 KiB
YAML
description: mongos-unpin
|
|
|
|
schemaVersion: '1.4'
|
|
|
|
runOnRequirements:
|
|
- minServerVersion: '4.2'
|
|
topologies: [ sharded ]
|
|
|
|
createEntities:
|
|
- client:
|
|
id: &client0 client0
|
|
useMultipleMongoses: true
|
|
- database:
|
|
id: &database0 database0
|
|
client: *client0
|
|
databaseName: &database0Name mongos-unpin-db
|
|
- collection:
|
|
id: &collection0 collection0
|
|
database: *database0
|
|
collectionName: &collection0Name test
|
|
- session:
|
|
id: &session0 session0
|
|
client: *client0
|
|
|
|
initialData:
|
|
- collectionName: *collection0Name
|
|
databaseName: *database0Name
|
|
documents: []
|
|
|
|
_yamlAnchors:
|
|
anchors:
|
|
# LockTimeout will cause the server to add a TransientTransactionError label. It is not retryable.
|
|
&lockTimeoutErrorCode 24
|
|
|
|
tests:
|
|
- description: unpin after TransientTransactionError error on commit
|
|
runOnRequirements:
|
|
-
|
|
# serverless proxy doesn't append error labels to errors in transactions
|
|
# caused by failpoints (CLOUDP-88216)
|
|
serverless: "forbid"
|
|
# Note: test utilizes targetedFailPoint, which is incompatible with
|
|
# load-balanced and useMultipleMongoses:true
|
|
topologies: [ sharded ]
|
|
operations:
|
|
- &startTransaction
|
|
name: startTransaction
|
|
object: *session0
|
|
- &insertOne
|
|
name: insertOne
|
|
object: *collection0
|
|
arguments:
|
|
document: { x: 1 }
|
|
session: *session0
|
|
- name: targetedFailPoint
|
|
object: testRunner
|
|
arguments:
|
|
session: *session0
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: [ commitTransaction ]
|
|
errorCode: *lockTimeoutErrorCode
|
|
- name: commitTransaction
|
|
object: *session0
|
|
expectError:
|
|
# LockTimeout is not retryable, so the commit fails.
|
|
errorCode: *lockTimeoutErrorCode
|
|
errorLabelsContain: [ TransientTransactionError ]
|
|
errorLabelsOmit: [ UnknownTransactionCommitResult ]
|
|
- &assertNoPinnedServer
|
|
name: assertSessionUnpinned
|
|
object: testRunner
|
|
arguments:
|
|
session: *session0
|
|
# Cleanup the potentionally open server transaction by starting and
|
|
# aborting a new transaction on the same session.
|
|
- *startTransaction
|
|
- *insertOne
|
|
- &abortTransaction
|
|
name: abortTransaction
|
|
object: *session0
|
|
|
|
- description: unpin on successful abort
|
|
operations:
|
|
- *startTransaction
|
|
- *insertOne
|
|
- *abortTransaction
|
|
- *assertNoPinnedServer
|
|
|
|
- description: unpin after non-transient error on abort
|
|
runOnRequirements:
|
|
-
|
|
# serverless proxy doesn't append error labels to errors in transactions
|
|
# caused by failpoints (CLOUDP-88216)
|
|
serverless: "forbid"
|
|
# Note: test utilizes targetedFailPoint, which is incompatible with
|
|
# load-balanced and useMultipleMongoses:true
|
|
topologies: [ sharded ]
|
|
operations:
|
|
- *startTransaction
|
|
- *insertOne
|
|
- name: targetedFailPoint
|
|
object: testRunner
|
|
arguments:
|
|
session: *session0
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: [ abortTransaction ]
|
|
errorCode: *lockTimeoutErrorCode
|
|
- *abortTransaction
|
|
- *assertNoPinnedServer
|
|
# Cleanup the potentionally open server transaction by starting and
|
|
# aborting a new transaction on the same session.
|
|
- *startTransaction
|
|
- *insertOne
|
|
- *abortTransaction
|
|
|
|
- description: unpin after TransientTransactionError error on abort
|
|
runOnRequirements:
|
|
-
|
|
# Note: test utilizes targetedFailPoint, which is incompatible with
|
|
# load-balanced and useMultipleMongoses:true
|
|
topologies: [ sharded ]
|
|
operations:
|
|
- *startTransaction
|
|
- *insertOne
|
|
- name: targetedFailPoint
|
|
object: testRunner
|
|
arguments:
|
|
session: *session0
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: [ abortTransaction ]
|
|
errorCode: 91 # ShutdownInProgress
|
|
- *abortTransaction
|
|
- *assertNoPinnedServer
|
|
# Cleanup the potentionally open server transaction by starting and
|
|
# aborting a new transaction on the same session.
|
|
- *startTransaction
|
|
- *insertOne
|
|
- *abortTransaction
|
|
|
|
- description: unpin when a new transaction is started
|
|
operations:
|
|
- *startTransaction
|
|
- *insertOne
|
|
- name: commitTransaction
|
|
object: *session0
|
|
- &assertPinnedServer
|
|
name: assertSessionPinned
|
|
object: testRunner
|
|
arguments:
|
|
session: *session0
|
|
- *startTransaction
|
|
- *assertNoPinnedServer
|
|
|
|
- description: unpin when a non-transaction write operation uses a session
|
|
operations:
|
|
- *startTransaction
|
|
- *insertOne
|
|
- name: commitTransaction
|
|
object: *session0
|
|
- *assertPinnedServer
|
|
- *insertOne
|
|
- *assertNoPinnedServer
|
|
|
|
- description: unpin when a non-transaction read operation uses a session
|
|
operations:
|
|
- *startTransaction
|
|
- *insertOne
|
|
- name: commitTransaction
|
|
object: *session0
|
|
- *assertPinnedServer
|
|
- name: find
|
|
object: *collection0
|
|
arguments:
|
|
filter: { x: 1 }
|
|
session: *session0
|
|
- *assertNoPinnedServer
|