File tree Expand file tree Collapse file tree 3 files changed +218
-5
lines changed
test/spec/retryable-reads/unified Expand file tree Collapse file tree 3 files changed +218
-5
lines changed Original file line number Diff line number Diff line change @@ -1145,14 +1145,12 @@ const RETRYABLE_READ_ERROR_CODES = new Set<number>([
1145
1145
MONGODB_ERROR_CODES.InterruptedAtShutdown,
1146
1146
MONGODB_ERROR_CODES.InterruptedDueToReplStateChange,
1147
1147
MONGODB_ERROR_CODES.NotPrimaryNoSecondaryOk,
1148
- MONGODB_ERROR_CODES.NotPrimaryOrSecondary
1148
+ MONGODB_ERROR_CODES.NotPrimaryOrSecondary,
1149
+ MONGODB_ERROR_CODES.ExceededTimeLimit
1149
1150
]);
1150
1151
1151
1152
// see: https://github.com/mongodb/specifications/blob/master/source/retryable-writes/retryable-writes.rst#terms
1152
- const RETRYABLE_WRITE_ERROR_CODES = new Set<number>([
1153
- ...RETRYABLE_READ_ERROR_CODES,
1154
- MONGODB_ERROR_CODES.ExceededTimeLimit
1155
- ]);
1153
+ const RETRYABLE_WRITE_ERROR_CODES = RETRYABLE_READ_ERROR_CODES;
1156
1154
1157
1155
export function needsRetryableWriteLabel(error: Error, maxWireVersion: number): boolean {
1158
1156
// pre-4.4 server, then the driver adds an error label for every valid case
Original file line number Diff line number Diff line change
1
+ {
2
+ "description": "ExceededTimeLimit is a retryable read",
3
+ "schemaVersion": "1.3",
4
+ "runOnRequirements": [
5
+ {
6
+ "minServerVersion": "4.0",
7
+ "topologies": [
8
+ "single",
9
+ "replicaset"
10
+ ]
11
+ },
12
+ {
13
+ "minServerVersion": "4.1.7",
14
+ "topologies": [
15
+ "sharded",
16
+ "load-balanced"
17
+ ]
18
+ }
19
+ ],
20
+ "createEntities": [
21
+ {
22
+ "client": {
23
+ "id": "client0",
24
+ "useMultipleMongoses": false,
25
+ "observeEvents": [
26
+ "commandStartedEvent"
27
+ ]
28
+ }
29
+ },
30
+ {
31
+ "database": {
32
+ "id": "database0",
33
+ "client": "client0",
34
+ "databaseName": "retryable-reads-tests"
35
+ }
36
+ },
37
+ {
38
+ "collection": {
39
+ "id": "collection0",
40
+ "database": "database0",
41
+ "collectionName": "exceededtimelimit-test"
42
+ }
43
+ }
44
+ ],
45
+ "initialData": [
46
+ {
47
+ "collectionName": "exceededtimelimit-test",
48
+ "databaseName": "retryable-reads-tests",
49
+ "documents": [
50
+ {
51
+ "_id": 1,
52
+ "x": 11
53
+ },
54
+ {
55
+ "_id": 2,
56
+ "x": 22
57
+ },
58
+ {
59
+ "_id": 3,
60
+ "x": 33
61
+ }
62
+ ]
63
+ }
64
+ ],
65
+ "tests": [
66
+ {
67
+ "description": "Find succeeds on second attempt after ExceededTimeLimit",
68
+ "operations": [
69
+ {
70
+ "name": "failPoint",
71
+ "object": "testRunner",
72
+ "arguments": {
73
+ "client": "client0",
74
+ "failPoint": {
75
+ "configureFailPoint": "failCommand",
76
+ "mode": {
77
+ "times": 1
78
+ },
79
+ "data": {
80
+ "failCommands": [
81
+ "find"
82
+ ],
83
+ "errorCode": 262
84
+ }
85
+ }
86
+ }
87
+ },
88
+ {
89
+ "name": "find",
90
+ "arguments": {
91
+ "filter": {
92
+ "_id": {
93
+ "$gt": 1
94
+ }
95
+ }
96
+ },
97
+ "object": "collection0",
98
+ "expectResult": [
99
+ {
100
+ "_id": 2,
101
+ "x": 22
102
+ },
103
+ {
104
+ "_id": 3,
105
+ "x": 33
106
+ }
107
+ ]
108
+ }
109
+ ],
110
+ "expectEvents": [
111
+ {
112
+ "client": "client0",
113
+ "events": [
114
+ {
115
+ "commandStartedEvent": {
116
+ "command": {
117
+ "find": "exceededtimelimit-test",
118
+ "filter": {
119
+ "_id": {
120
+ "$gt": 1
121
+ }
122
+ }
123
+ },
124
+ "commandName": "find",
125
+ "databaseName": "retryable-reads-tests"
126
+ }
127
+ },
128
+ {
129
+ "commandStartedEvent": {
130
+ "command": {
131
+ "find": "exceededtimelimit-test",
132
+ "filter": {
133
+ "_id": {
134
+ "$gt": 1
135
+ }
136
+ }
137
+ },
138
+ "commandName": "find",
139
+ "databaseName": "retryable-reads-tests"
140
+ }
141
+ }
142
+ ]
143
+ }
144
+ ]
145
+ }
146
+ ]
147
+ }
Original file line number Diff line number Diff line change
1
+ description: "ExceededTimeLimit is a retryable read"
2
+
3
+ schemaVersion: "1.3"
4
+
5
+ runOnRequirements:
6
+ - minServerVersion: "4.0"
7
+ topologies: [single, replicaset]
8
+ - minServerVersion: "4.1.7"
9
+ topologies: [sharded, load-balanced]
10
+
11
+ createEntities:
12
+ - client:
13
+ id: &client0 client0
14
+ # Ensure the `configureFailpoint` and `find` commands are run on the same mongos
15
+ useMultipleMongoses: false
16
+ observeEvents: [ commandStartedEvent ]
17
+ - database:
18
+ id: &database0 database0
19
+ client: *client0
20
+ databaseName: &database0Name "retryable-reads-tests"
21
+ - collection:
22
+ id: &collection0 collection0
23
+ database: *database0
24
+ collectionName: &collection0Name "exceededtimelimit-test"
25
+
26
+ initialData:
27
+ - collectionName: *collection0Name
28
+ databaseName: *database0Name
29
+ documents:
30
+ - { _id: 1, x: 11 }
31
+ - { _id: 2, x: 22 }
32
+ - { _id: 3, x: 33 }
33
+
34
+ tests:
35
+ - description: "Find succeeds on second attempt after ExceededTimeLimit"
36
+ operations:
37
+ - name: failPoint
38
+ object: testRunner
39
+ arguments:
40
+ client: *client0
41
+ failPoint:
42
+ configureFailPoint: failCommand
43
+ mode: { times: 1 }
44
+ data:
45
+ failCommands: [ "find" ]
46
+ errorCode: 262 # ExceededTimeLimit
47
+ - name: find
48
+ arguments:
49
+ filter: { _id: { $gt: 1 } }
50
+ object: *collection0
51
+ expectResult:
52
+ - { _id: 2, x: 22 }
53
+ - { _id: 3, x: 33 }
54
+ expectEvents:
55
+ - client: *client0
56
+ events:
57
+ - commandStartedEvent:
58
+ command:
59
+ find: *collection0Name
60
+ filter: { _id: { $gt: 1 } }
61
+ commandName: find
62
+ databaseName: *database0Name
63
+ - commandStartedEvent:
64
+ command:
65
+ find: *collection0Name
66
+ filter: { _id: { $gt: 1 } }
67
+ commandName: find
68
+ databaseName: *database0Name
You can’t perform that action at this time.
0 commit comments