...
1runOn:
2 - minServerVersion: "4.3.1"
3 topology: ["replicaset", "sharded", "load-balanced"]
4
5data:
6 - { _id: 1, x: 11 }
7 - { _id: 2, x: 22 }
8
9tests:
10 - description: "FindOneAndDelete succeeds with RetryableWriteError from server"
11 failPoint:
12 configureFailPoint: failCommand
13 mode: { times: 1 }
14 data:
15 failCommands: ["findAndModify"]
16 errorCode: 112 # WriteConflict, not a retryable error code
17 errorLabels: ["RetryableWriteError"] # Override server behavior: send RetryableWriteError label with non-retryable error code
18 operation:
19 name: "findOneAndDelete"
20 arguments:
21 filter: { x: { $gte: 11 } }
22 sort: { x: 1 }
23 outcome: # Driver retries operation and it succeeds
24 result: { _id: 1, x: 11 }
25 collection:
26 data:
27 - { _id: 2, x: 22 }
28
29 - description: "FindOneAndDelete fails if server does not return RetryableWriteError"
30 failPoint:
31 configureFailPoint: failCommand
32 mode: { times: 1 }
33 data:
34 failCommands: ["findAndModify"]
35 errorCode: 11600 # InterruptedAtShutdown, normally a retryable error code
36 errorLabels: [] # Override server behavior: do not send RetryableWriteError label with retryable code
37 operation:
38 name: "findOneAndDelete"
39 arguments:
40 filter: { x: { $gte: 11 } }
41 sort: { x: 1 }
42 outcome:
43 error: true # Driver does not retry operation because there was no RetryableWriteError label on response
44 result:
45 errorLabelsOmit: ["RetryableWriteError"]
46 collection:
47 data:
48 - { _id: 1, x: 11 }
49 - { _id: 2, x: 22 }
View as plain text