summaryrefslogtreecommitdiff
path: root/jstests/sharding/retryable_mongos_write_errors.js
blob: e175dd9c023cc34654825a913daa539552a7f5e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
 * Tests that retryable write errors in MongoS return a top level error message.
 */

(function() {
"use strict";

load("jstests/libs/fail_point_util.js");
load('jstests/libs/parallelTester.js');  // for ScopedThread.

// Creates a new connection, uses it to get the database from the parameter name and inserts
// multiple documents to the provided collection.
function insertHandler(host, databaseName, collectionName) {
    const conn = new Mongo(host);
    const database = conn.getDB(databaseName);
    // creates an array with 10 documents
    const docs = Array.from(Array(10).keys()).map((i) => ({a: i, b: "retryable"}));
    return database.runCommand({insert: collectionName, documents: docs});
}

const dbName = "test";
const collName = "retryable_mongos_write_errors";
const ns = dbName + "." + collName;

const st = new ShardingTest({config: 1, mongos: 1, shards: 1});
const shard0Primary = st.rs0.getPrimary();

const insertFailPoint =
    configureFailPoint(shard0Primary, "hangAfterCollectionInserts", {collectionNS: ns});

const insertThread = new Thread(insertHandler, st.s.host, dbName, collName);
jsTest.log("Starting To Insert Documents");
insertThread.start();
insertFailPoint.wait();
MongoRunner.stopMongos(st.s);

try {
    const commandResponse = insertThread.returnData();
    jsTest.log("Command Response: " + tojson(commandResponse) + "." + commandResponse.code);
    // assert that retryableInsertRes failed with the HostUnreachableError or
    // InterruptedAtShutdown error code
    assert.eq(commandResponse.code, ErrorCodes.InterruptedAtShutdown, tojson(commandResponse));
} catch (e) {
    jsTest.log("Error ocurred: " + e);
    if (!isNetworkError(e)) {
        throw e;
    }
}

jsTest.log("Finished Assertions, Turning Off Failpoint");

insertFailPoint.off();
st.s = MongoRunner.runMongos(st.s);

jsTest.log('Shutting down sharding test');
st.stop();
}());