mirror of https://github.com/mongodb/mongo
77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
/**
|
|
* Tests that the validate command detects incorrect WT table logging settings.
|
|
*
|
|
* @tags: [
|
|
* requires_wiredtiger,
|
|
* ]
|
|
*/
|
|
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
|
|
let conn = MongoRunner.runMongod();
|
|
|
|
const dbpath = conn.dbpath;
|
|
const dbName = jsTestName();
|
|
const collName = "coll";
|
|
|
|
const create = function (conn) {
|
|
assert.commandWorked(conn.getDB(dbName).createCollection(collName));
|
|
};
|
|
|
|
const collUri = function (conn) {
|
|
return conn
|
|
.getDB(dbName)
|
|
[collName].aggregate([{$collStats: {storageStats: {}}}])
|
|
.toArray()[0]
|
|
.storageStats.wiredTiger.uri.split("statistics:")[1];
|
|
};
|
|
|
|
const indexUri = function (conn, indexName) {
|
|
return conn
|
|
.getDB(dbName)
|
|
[collName].aggregate([{$collStats: {storageStats: {}}}])
|
|
.toArray()[0]
|
|
.storageStats.indexDetails[indexName].uri.split("statistics:")[1];
|
|
};
|
|
|
|
// Create the collection and indexes as a standlone, which will cause the tables to be logged.
|
|
create(conn);
|
|
MongoRunner.stopMongod(conn);
|
|
|
|
const nodeOptions = {
|
|
dbpath: dbpath,
|
|
noCleanData: true,
|
|
// Skip the normal step of switching the logging setting on the tables.
|
|
setParameter: {wiredTigerSkipTableLoggingChecksOnStartup: true},
|
|
};
|
|
const replTest = new ReplSetTest({
|
|
nodes: 1,
|
|
nodeOptions: nodeOptions,
|
|
});
|
|
replTest.startSet();
|
|
replTest.initiate();
|
|
const primary = replTest.getPrimary();
|
|
|
|
// Run validate as a replica set, which will expect the tables to not be logged.
|
|
let res = assert.commandWorked(primary.getDB(dbName).runCommand({validate: collName}));
|
|
assert(!res.valid);
|
|
assert.eq(res.errors.length, 2);
|
|
checkLog.containsJson(primary, 6898101, {uri: collUri(primary), expected: false});
|
|
checkLog.containsJson(primary, 6898101, {index: "_id_", uri: indexUri(primary, "_id_"), expected: false});
|
|
|
|
// Create the collection and indexes as a replica set, which will cause the tables to not be logged.
|
|
assert.commandWorked(primary.getDB(dbName).runCommand({drop: collName}));
|
|
create(primary);
|
|
|
|
replTest.stopSet(null, false, {noCleanData: true, skipValidation: true});
|
|
conn = MongoRunner.runMongod(nodeOptions);
|
|
|
|
// Run validate as a standalone, which will expect the tables to be logged.
|
|
res = assert.commandWorked(conn.getDB(dbName).runCommand({validate: collName}));
|
|
assert(!res.valid);
|
|
assert.eq(res.errors.length, 2);
|
|
checkLog.containsJson(conn, 6898101, {uri: collUri(conn), expected: true});
|
|
checkLog.containsJson(conn, 6898101, {index: "_id_", uri: indexUri(conn, "_id_"), expected: true});
|
|
|
|
MongoRunner.stopMongod(conn, null, {skipValidation: true});
|