154 lines
4.9 KiB
YAML
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
|