1runOn:
2    -
3        minServerVersion: "4.0"
4        topology: ["single", "replicaset"]
5    -
6        minServerVersion: "4.1.7"
7        topology: ["sharded"]
8
9database_name: &database_name "retryable-reads-tests"
10collection_name: &collection_name "coll"
11
12data:
13    - {_id: 1, x: 11}
14    - {_id: 2, x: 22}
15    - {_id: 3, x: 33}
16
17tests:
18    -
19        description: "Aggregate succeeds after InterruptedAtShutdown"
20        failPoint: &failCommand_failPoint
21            configureFailPoint: failCommand
22            mode: { times: 1 }
23            data: { failCommands: [aggregate], errorCode: 11600 }
24        operations:
25            - &retryable_operation_succeeds
26                <<: &retryable_operation
27                    name: aggregate
28                    object: collection
29                    arguments:
30                        pipeline:
31                            - $match:
32                                _id: {$gt: 1}
33                            - $sort: {x: 1}
34                result:
35                    - {_id: 2, x: 22}
36                    - {_id: 3, x: 33}
37        expectations:
38            - &retryable_command_started_event
39                command_started_event:
40                    command:
41                        aggregate: *collection_name
42                        pipeline: [{$match: {_id: {$gt: 1}}}, {$sort: {x: 1}}]
43                    database_name: *database_name
44            - *retryable_command_started_event
45    -
46        description: "Aggregate succeeds after InterruptedDueToReplStateChange"
47        failPoint:
48            <<: *failCommand_failPoint
49            data: { failCommands: [aggregate], errorCode: 11602 }
50        operations: [*retryable_operation_succeeds]
51        expectations:
52             - *retryable_command_started_event
53             - *retryable_command_started_event
54    -
55        description: "Aggregate succeeds after NotMaster"
56        failPoint:
57            <<: *failCommand_failPoint
58            data: { failCommands: [aggregate], errorCode: 10107 }
59        operations: [*retryable_operation_succeeds]
60        expectations:
61             - *retryable_command_started_event
62             - *retryable_command_started_event
63    -
64        description: "Aggregate succeeds after NotMasterNoSlaveOk"
65        failPoint:
66            <<: *failCommand_failPoint
67            data: { failCommands: [aggregate], errorCode: 13435 }
68        operations: [*retryable_operation_succeeds]
69        expectations:
70             - *retryable_command_started_event
71             - *retryable_command_started_event
72    -
73        description: "Aggregate succeeds after NotMasterOrSecondary"
74        failPoint:
75            <<: *failCommand_failPoint
76            data: { failCommands: [aggregate], errorCode: 13436 }
77        operations: [*retryable_operation_succeeds]
78        expectations:
79             - *retryable_command_started_event
80             - *retryable_command_started_event
81    -
82        description: "Aggregate succeeds after PrimarySteppedDown"
83        failPoint:
84            <<: *failCommand_failPoint
85            data: { failCommands: [aggregate], errorCode: 189 }
86        operations: [*retryable_operation_succeeds]
87        expectations:
88             - *retryable_command_started_event
89             - *retryable_command_started_event
90    -
91        description: "Aggregate succeeds after ShutdownInProgress"
92        failPoint:
93            <<: *failCommand_failPoint
94            data: { failCommands: [aggregate], errorCode: 91 }
95        operations: [*retryable_operation_succeeds]
96        expectations:
97             - *retryable_command_started_event
98             - *retryable_command_started_event
99    -
100        description: "Aggregate succeeds after HostNotFound"
101        failPoint:
102            <<: *failCommand_failPoint
103            data: { failCommands: [aggregate], errorCode: 7 }
104        operations: [*retryable_operation_succeeds]
105        expectations:
106             - *retryable_command_started_event
107             - *retryable_command_started_event
108    -
109        description: "Aggregate succeeds after HostUnreachable"
110        failPoint:
111            <<: *failCommand_failPoint
112            data: { failCommands: [aggregate], errorCode: 6 }
113        operations: [*retryable_operation_succeeds]
114        expectations:
115             - *retryable_command_started_event
116             - *retryable_command_started_event
117    -
118        description: "Aggregate succeeds after NetworkTimeout"
119        failPoint:
120            <<: *failCommand_failPoint
121            data: { failCommands: [aggregate], errorCode: 89 }
122        operations: [*retryable_operation_succeeds]
123        expectations:
124             - *retryable_command_started_event
125             - *retryable_command_started_event
126    -
127        description: "Aggregate succeeds after SocketException"
128        failPoint:
129            <<: *failCommand_failPoint
130            data: { failCommands: [aggregate], errorCode: 9001 }
131        operations: [*retryable_operation_succeeds]
132        expectations:
133             - *retryable_command_started_event
134             - *retryable_command_started_event
135    -
136        description: "Aggregate fails after two NotMaster errors"
137        failPoint:
138            <<: *failCommand_failPoint
139            mode: { times: 2 }
140            data: { failCommands: [aggregate], errorCode: 10107 }
141        operations:
142            - &retryable_operation_fails
143                <<: *retryable_operation
144                error: true
145        expectations:
146             - *retryable_command_started_event
147             - *retryable_command_started_event
148    -
149        description: "Aggregate fails after NotMaster when retryReads is false"
150        clientOptions:
151            retryReads: false
152        failPoint:
153            <<: *failCommand_failPoint
154            data: { failCommands: [aggregate], errorCode: 10107 }
155        operations: [*retryable_operation_fails]
156        expectations:
157             - *retryable_command_started_event
158