Files
mongo/jstests/replsets/initial_sync_visibility.js

50 lines
1.8 KiB
JavaScript

// SERVER-30927 Initial sync from a source with an invisible oplog entry
(function() {
'use strict';
load('jstests/replsets/rslib.js');
const basename = 'initial_sync_visibility';
jsTestLog('Bring up set');
const rst = new ReplSetTest({name: basename, nodes: 1});
rst.startSet();
rst.initiate();
const primary = rst.getPrimary();
const primaryDB = primary.getDB(basename);
jsTestLog('Create a collection');
assert.writeOK(primaryDB['coll'].save({_id: "visible"}));
jsTestLog('Make sure synced');
rst.awaitReplication();
jsTestLog('Activate WT visibility failpoint and write an invisible document');
assert.commandWorked(primaryDB.adminCommand(
{configureFailPoint: 'WTPausePrimaryOplogDurabilityLoop', mode: 'alwaysOn'}));
assert.writeOK(primaryDB['coll'].save({_id: "invisible"}));
jsTestLog('Bring up a new node');
const secondary = rst.add({setParameter: 'numInitialSyncAttempts=3'});
rst.reInitiate();
assert.eq(primary, rst.getPrimary(), 'Primary changed after reconfig');
jsTestLog('Wait for new node to start cloning');
secondary.setSlaveOk();
const secondaryDB = secondary.getDB(basename);
wait(function() {
return secondaryDB.stats().collections >= 1;
}, 'never saw new node starting to clone, was waiting for collections in: ' + basename);
jsTestLog('Disable WT visibility failpoint on primary making all visible.');
assert.commandWorked(primaryDB.adminCommand(
{configureFailPoint: 'WTPausePrimaryOplogDurabilityLoop', mode: 'off'}));
jsTestLog('Wait for both nodes to be up-to-date');
rst.awaitSecondaryNodes();
rst.awaitReplication();
jsTestLog('Check all OK');
rst.checkReplicatedDataHashes();
rst.stopSet(15);
})();