runOn: - minServerVersion: "4.3.1" topology: ["replicaset", "sharded"] data: - { _id: 1, x: 11 } - { _id: 2, x: 22 } tests: - description: "BulkWrite succeeds with RetryableWriteError from server" failPoint: configureFailPoint: failCommand mode: { times: 1 } data: failCommands: ["update"] errorCode: 112 # WriteConflict, not a retryable error code errorLabels: ["RetryableWriteError"] # Override server behavior: send RetryableWriteError label with non-retryable error code operation: name: "bulkWrite" arguments: requests: - name: "deleteOne" arguments: filter: { _id: 1 } - name: "insertOne" arguments: document: { _id: 3, x: 33 } - name: "updateOne" arguments: filter: { _id: 2 } update: { $inc: { x: 1 } } options: { ordered: true } outcome: # Driver retries operation and it succeeds result: deletedCount: 1 insertedCount: 1 insertedIds: { 1: 3 } matchedCount: 1 modifiedCount: 1 upsertedCount: 0 upsertedIds: {} collection: data: - { _id: 2, x: 23 } - { _id: 3, x: 33 } - description: "BulkWrite fails if server does not return RetryableWriteError" failPoint: configureFailPoint: failCommand mode: { times: 1 } data: failCommands: ["update"] errorCode: 11600 # InterruptedAtShutdown, normally a retryable error code errorLabels: [] # Override server behavior: do not send RetryableWriteError label with retryable code operation: name: "bulkWrite" arguments: requests: - name: "deleteOne" arguments: filter: { _id: 1 } - name: "insertOne" arguments: document: { _id: 3, x: 33 } - name: "updateOne" arguments: filter: { _id: 2 } update: { $inc: { x: 1 } } options: { ordered: true } outcome: error: true # Driver does not retry operation because there was no RetryableWriteError label on response result: errorLabelsOmit: ["RetryableWriteError"] collection: data: - { _id: 2, x: 22 } - { _id: 3, x: 33 }