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: "Distinct succeeds on first attempt"
20        operations:
21            - &retryable_operation_succeeds
22                <<: &retryable_operation
23                    name: distinct
24                    object: collection
25                    arguments: { fieldName: "x", filter: { _id: { $gt: 1 } } }
26                result:
27                    - 22
28                    - 33
29        expectations:
30            - &retryable_command_started_event
31                command_started_event:
32                    command:
33                        distinct: *collection_name
34                        key: "x"
35                        query:
36                            _id: {$gt: 1}
37                    database_name: *database_name
38    -
39        description: "Distinct succeeds on second attempt"
40        failPoint:  &failCommand_failPoint
41            configureFailPoint: failCommand
42            mode: { times: 1 }
43            data:
44                failCommands: [distinct]
45                closeConnection: true
46        operations: [*retryable_operation_succeeds]
47        expectations:
48             - *retryable_command_started_event
49             - *retryable_command_started_event
50    -
51        description: "Distinct fails on first attempt"
52        clientOptions:
53            retryReads: false
54        failPoint: *failCommand_failPoint
55        operations:
56            - &retryable_operation_fails
57                <<: *retryable_operation
58                error: true
59        expectations:
60             - *retryable_command_started_event
61
62    -
63        description: "Distinct fails on second attempt"
64        failPoint:
65            <<: *failCommand_failPoint
66            mode: { times: 2 }
67        operations: [*retryable_operation_fails]
68        expectations:
69             - *retryable_command_started_event
70             - *retryable_command_started_event
71
72