-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
db-aggregate-write-readPreference.yml
151 lines (142 loc) · 4.83 KB
/
db-aggregate-write-readPreference.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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"
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