bson/testdata/crud/unified/db-aggregate-write-readPreference.yml
2025-03-17 20:58:26 +01:00

154 lines
4.9 KiB
YAML

description: db-aggregate-write-readPreference
schemaVersion: '1.4'
runOnRequirements:
# 3.6+ non-standalone is needed to utilize $readPreference in OP_MSG.
# Serverless does not support $listLocalSessions and $currentOp stages, and
# mongos does not allow combining them with $out or $merge.
- minServerVersion: "3.6"
topologies: [ replicaset ]
serverless: forbid
_yamlAnchors:
readConcern: &readConcern
level: &readConcernLevel "local"
writeConcern: &writeConcern
w: &writeConcernW 1
createEntities:
- client:
id: &client0 client0
observeEvents:
- commandStartedEvent
# Used to test that read and write concerns are still inherited
uriOptions:
readConcernLevel: *readConcernLevel
w: *writeConcernW
- database:
id: &database0 database0
client: *client0
databaseName: &database0Name db0
databaseOptions:
readPreference: &readPreference
# secondaryPreferred is specified for compatibility with clusters that
# may not have a secondary (e.g. each shard is only a primary).
mode: secondaryPreferred
# maxStalenessSeconds is specified to ensure that drivers forward the
# read preference to mongos or a load balancer. That would not be the
# case with only secondaryPreferred.
maxStalenessSeconds: 600
- collection:
id: &collection0 collection0
database: *database0
collectionName: &collection0Name coll0
initialData:
- collectionName: *collection0Name
databaseName: *database0Name
documents: []
tests:
- description: "Database-level aggregate with $out includes read preference for 5.0+ server"
runOnRequirements:
- minServerVersion: "5.0"
serverless: "forbid"
# GODRIVER-3218
maxServerVersion: "7.99"
operations:
- object: *database0
name: aggregate
arguments:
pipeline: &outPipeline
- { $listLocalSessions: {} }
- { $limit: 1 }
- { $addFields: { _id: 1 } }
- { $project: { _id: 1 } }
- { $out: *collection0Name }
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: 1
pipeline: *outPipeline
$readPreference: *readPreference
readConcern: *readConcern
writeConcern: *writeConcern
outcome: &outcome
- collectionName: *collection0Name
databaseName: *database0Name
documents:
- { _id: 1 }
- description: "Database-level aggregate with $out omits read preference for pre-5.0 server"
runOnRequirements:
# MongoDB 4.2 introduced support for read concerns and write stages.
# Pre-4.2 servers may allow a "local" read concern anyway, but some
# drivers may avoid inheriting a client-level read concern for pre-4.2.
- minServerVersion: "4.2"
maxServerVersion: "4.4.99"
serverless: "forbid"
operations:
- object: *database0
name: aggregate
arguments:
pipeline: *outPipeline
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: 1
pipeline: *outPipeline
$readPreference: { $$exists: false }
readConcern: *readConcern
writeConcern: *writeConcern
outcome: *outcome
- description: "Database-level aggregate with $merge includes read preference for 5.0+ server"
runOnRequirements:
- minServerVersion: "5.0"
operations:
- object: *database0
name: aggregate
arguments:
pipeline: &mergePipeline
- { $listLocalSessions: {} }
- { $limit: 1 }
- { $addFields: { _id: 1 } }
- { $project: { _id: 1 } }
- { $merge: { into: *collection0Name } }
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: 1
pipeline: *mergePipeline
$readPreference: *readPreference
readConcern: *readConcern
writeConcern: *writeConcern
outcome: *outcome
- description: "Database-level aggregate with $merge omits read preference for pre-5.0 server"
runOnRequirements:
- minServerVersion: "4.2"
maxServerVersion: "4.4.99"
operations:
- object: *database0
name: aggregate
arguments:
pipeline: *mergePipeline
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: 1
pipeline: *mergePipeline
$readPreference: { $$exists: false }
readConcern: *readConcern
writeConcern: *writeConcern
outcome: *outcome