Co-authored-by: Yuhong Zhang <yuhong.zhang@mongodb.com> GitOrigin-RevId: 278dc49f572c0302f5f32631efa4b5df79b498cf
95 lines
3.5 KiB
JavaScript
95 lines
3.5 KiB
JavaScript
/**
|
|
* Tests that we can remove the 'recordIdsReplicated' flag from
|
|
* a collection's catalog entry via the collMod command.
|
|
*
|
|
* This allows us to irreversibly disable replicated record IDs on a collection.
|
|
*
|
|
* @tags: [
|
|
* featureFlagRecordIdsReplicated,
|
|
* ]
|
|
*/
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
|
|
const replSet = new ReplSetTest({nodes: [{}, {rsConfig: {votes: 0, priority: 0}}]});
|
|
replSet.startSet();
|
|
replSet.initiate();
|
|
|
|
const primary = replSet.getPrimary();
|
|
|
|
const collName = "replRecIdCollForCollMod";
|
|
|
|
// Create a collection with the param set.
|
|
const testDB = primary.getDB("test");
|
|
testDB.runCommand({create: collName});
|
|
const coll = testDB.getCollection(collName);
|
|
assert.commandWorked(coll.insert({_id: 1}));
|
|
|
|
// For the coll the recordId should be in the oplog, and should match
|
|
// the actual recordId on disk.
|
|
const primOplog = replSet.findOplog(primary, {ns: coll.getFullName(), "o._id": 1}).toArray()[0];
|
|
const doc = coll.find().showRecordId().toArray()[0];
|
|
assert.eq(
|
|
primOplog.rid,
|
|
doc["$recordId"],
|
|
`Mismatching recordIds. Primary's oplog entry: ${tojson(primOplog)}, on disk: ${tojson(doc)}`,
|
|
);
|
|
|
|
// Enable debug logs for catalog changes.
|
|
const originalStorageLogLevel = assert.commandWorked(testDB.setLogLevel(1, "storage")).was.storage.verbosity;
|
|
|
|
let result = assert.commandWorked(testDB.runCommand({collMod: collName, recordIdsReplicated: false}));
|
|
jsTestLog("Result from successful collMod command: " + tojson(result));
|
|
|
|
// Check for "Unsetting 'recordIdsReplicated' catalog entry flag" debug log message.
|
|
checkLog.containsJson(primary, 8650601, {namespace: coll.getFullName()});
|
|
assert.commandWorked(testDB.setLogLevel(originalStorageLogLevel, "storage"));
|
|
|
|
// Confirm that 'recordIdsReplicated' option has been removed from collection options.
|
|
const collInfo = coll.exists();
|
|
assert(
|
|
collInfo,
|
|
"unable to find collection " +
|
|
coll.getFullName() +
|
|
" in listCollections results: " +
|
|
tojson(testDB.getCollectionInfos()),
|
|
);
|
|
jsTestLog("Collection options: " + tojson(collInfo));
|
|
assert(
|
|
!collInfo.info.hasOwnProperty("recordIdsReplicated"),
|
|
"collMod failed to remove recordIdsReplicated flag from collection options",
|
|
);
|
|
|
|
// Check collection metadata on secondary.
|
|
replSet.awaitReplication();
|
|
const secondary = replSet.getSecondary();
|
|
const secondaryDB = secondary.getDB(testDB.getName());
|
|
const secondaryColl = secondaryDB.getCollection(coll.getName());
|
|
const secondaryCollInfo = secondaryColl.exists();
|
|
assert(
|
|
secondaryCollInfo,
|
|
"unable to find collection " +
|
|
secondaryColl.getFullName() +
|
|
" in listCollections results on secondary: " +
|
|
tojson(secondaryDB.getCollectionInfos()),
|
|
);
|
|
assert(
|
|
!secondaryCollInfo.info.hasOwnProperty("recordIdsReplicated"),
|
|
"collMod failed to remove recordIdsReplicated flag from collection options on secondary",
|
|
);
|
|
|
|
// Running collMod to unset 'recordIdsReplicated' on a collection that does not replicate record IDs is allowed.
|
|
assert.commandWorked(testDB.runCommand({collMod: collName, recordIdsReplicated: false}));
|
|
|
|
// Modifying with a true 'recordIdsReplicated' value is not allowed
|
|
assert.commandFailedWithCode(
|
|
testDB.runCommand({collMod: collName, recordIdsReplicated: true}),
|
|
ErrorCodes.InvalidOptions,
|
|
);
|
|
|
|
// Insert a document and confirm that the record ID is not replicated in the oplog.
|
|
assert.commandWorked(coll.insert({_id: 2}));
|
|
const oplogNoRid = replSet.findOplog(primary, {ns: coll.getFullName(), "o._id": 2}).toArray()[0];
|
|
assert(!oplogNoRid.rid, `Unexpectedly found rid in entry: ${tojson(oplogNoRid)}`);
|
|
|
|
replSet.stopSet();
|