summaryrefslogtreecommitdiff
path: root/jstests/multiVersion/3_upgrade_replset.js
blob: 45d3a7f48441d54e666655b1011bf48240da5b00 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//
// Tests upgrading a replica set
//

load('./jstests/multiVersion/libs/multi_rs.js');
load('./jstests/libs/test_background_ops.js');

var oldVersion = "last-stable";

var nodes = {
    n1: {binVersion: oldVersion},
    n2: {binVersion: oldVersion},
    a3: {binVersion: oldVersion}
};

var rst = new ReplSetTest({nodes: nodes});

rst.startSet();
rst.initiate();

// Wait for a primary node...
var primary = rst.getPrimary();
var otherOpConn = new Mongo(rst.getURL());
var insertNS = "test.foo";

jsTest.log("Starting parallel operations during upgrade...");

function findAndInsert(rsURL, coll) {
    var coll = new Mongo(rsURL).getCollection(coll + "");
    var count = 0;

    jsTest.log("Starting finds and inserts...");

    while (!isFinished()) {
        try {
            coll.insert({_id: count, hello: "world"});
            assert.eq(null, coll.getDB().getLastError());
            assert.neq(null, coll.findOne({_id: count}));
        } catch (e) {
            printjson(e);
        }

        count++;
    }

    jsTest.log("Finished finds and inserts...");
    return count;
}

var joinFindInsert =
    startParallelOps(primary,  // The connection where the test info is passed and stored
                     findAndInsert,
                     [rst.getURL(), insertNS]);

jsTest.log("Upgrading replica set...");

rst.upgradeSet({binVersion: "latest"});

jsTest.log("Replica set upgraded.");

// Wait for primary
var primary = rst.getPrimary();

printjson(rst.status());

// Allow more valid writes to go through
sleep(10 * 1000);

joinFindInsert();

var totalInserts = primary.getCollection(insertNS).find().sort({_id: -1}).next()._id + 1;
var dataFound = primary.getCollection(insertNS).count();

jsTest.log("Found " + dataFound + " docs out of " + tojson(totalInserts) + " inserted.");

assert.gt(dataFound / totalInserts, 0.5);

rst.stopSet();