summaryrefslogtreecommitdiff
path: root/jstests/replsets/standalone_recover_to_oplog_timestamp.js
blob: d12e9521605e4d395bad9bbcff4e942ef8554b8a (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
/**
 * Test replication recovery as standalone with 'recoverToOplogTimestamp' in read-only mode
 * (i.e. queryableBackupMode).
 *
 * @tags: [
 *   requires_majority_read_concern,
 *   requires_persistence,
 *   requires_replication,
 *   requires_wiredtiger,
 * ]
 */

(function() {
"use strict";

const dbName = "test";
const collName = jsTestName();

const rst = new ReplSetTest({nodes: 1});
rst.startSet();
rst.initiateWithHighElectionTimeout();
const primary = rst.getPrimary();
const primaryDB = primary.getDB(dbName);

const recoveryTimestamp = assert.commandWorked(primaryDB.runCommand({ping: 1})).operationTime;

// Hold back the recovery timestamp before doing another write so we have some oplog entries to
// apply when restart in queryableBackupMode with recoverToOplogTimestamp.
assert.commandWorked(primaryDB.adminCommand({
    "configureFailPoint": 'holdStableTimestampAtSpecificTimestamp',
    "mode": 'alwaysOn',
    "data": {"timestamp": recoveryTimestamp}
}));

assert.commandWorked(primaryDB.getCollection(collName).createIndex({a: 1}));

const docs = [{_id: 1, a: 1}];
const operationTime =
    assert.commandWorked(primaryDB.runCommand({insert: collName, documents: docs})).operationTime;

rst.stopSet(/*signal=*/null, /*forRestart=*/true);

// Restart as standalone in queryableBackupMode and run replication recovery up to the last insert.
const primaryStandalone = MongoRunner.runMongod({
    dbpath: primary.dbpath,
    noReplSet: true,
    noCleanData: true,
    setParameter: {recoverToOplogTimestamp: tojson({timestamp: operationTime})},
    queryableBackupMode: ""
});

// Test that the last insert is visible after replication recovery.
assert.eq(primaryStandalone.getDB(dbName)[collName].find().toArray(), docs);

MongoRunner.stopMongod(primaryStandalone);
}());