SERVER-116273 corruptDocumentOnInsert failpoint should only target specified namespace (#46047)
GitOrigin-RevId: b2c174037204c151593bd4f3418207e3d2df4901
This commit is contained in:
committed by
MongoDB Bot
parent
4566471356
commit
67d243121c
@@ -40,7 +40,13 @@ let createCollWithDoc = function (coll) {
|
||||
// Insert corrupt document for testing via failpoint.
|
||||
let corruptDocumentOnInsert = function (db, coll) {
|
||||
jsTestLog("Corrupt document BSON on insert.");
|
||||
assert.commandWorked(db.adminCommand({configureFailPoint: "corruptDocumentOnInsert", mode: "alwaysOn"}));
|
||||
assert.commandWorked(
|
||||
db.adminCommand({
|
||||
configureFailPoint: "corruptDocumentOnInsert",
|
||||
data: {"ns": coll.getFullName()},
|
||||
mode: "alwaysOn",
|
||||
}),
|
||||
);
|
||||
assert.commandWorked(coll.insert(doc2));
|
||||
assert.commandWorked(db.adminCommand({configureFailPoint: "corruptDocumentOnInsert", mode: "off"}));
|
||||
};
|
||||
|
||||
@@ -7,7 +7,13 @@ const coll = db.getCollection(jsTestName());
|
||||
coll.drop();
|
||||
|
||||
// Corrupt document during insert for testing via failpoint.
|
||||
assert.commandWorked(db.adminCommand({configureFailPoint: "corruptDocumentOnInsert", mode: "alwaysOn"}));
|
||||
assert.commandWorked(
|
||||
db.adminCommand({
|
||||
configureFailPoint: "corruptDocumentOnInsert",
|
||||
data: {"ns": coll.getFullName()},
|
||||
mode: "alwaysOn",
|
||||
}),
|
||||
);
|
||||
assert.commandWorked(coll.insert({a: 1}));
|
||||
assert.commandWorked(db.adminCommand({configureFailPoint: "corruptDocumentOnInsert", mode: "off"}));
|
||||
|
||||
|
||||
@@ -88,7 +88,13 @@ assert.commandWorked(
|
||||
|
||||
// Insert corrupt document for testing via failpoint.
|
||||
const insertCorruptDocument = function (db, collName) {
|
||||
assert.commandWorked(db.adminCommand({configureFailPoint: "corruptDocumentOnInsert", mode: "alwaysOn"}));
|
||||
assert.commandWorked(
|
||||
db.adminCommand({
|
||||
configureFailPoint: "corruptDocumentOnInsert",
|
||||
data: {"ns": `${db.getCollection(collName).getFullName()}`},
|
||||
mode: "alwaysOn",
|
||||
}),
|
||||
);
|
||||
// Use godinsert to insert into the node directly.
|
||||
assert.commandWorked(db.runCommand({godinsert: collName, obj: doc1}));
|
||||
assert.commandWorked(db.adminCommand({configureFailPoint: "corruptDocumentOnInsert", mode: "off"}));
|
||||
|
||||
@@ -30,7 +30,7 @@ assert.commandWorked(s0Coll.insert({_id: 2}));
|
||||
assert.commandWorked(s1.adminCommand({moveChunk: kNsColl, find: {_id: 2}, to: st.shard1.shardName}));
|
||||
|
||||
// Insert corrupted document
|
||||
configureFailPoint(st.shard1, "corruptDocumentOnInsert", {}, "alwaysOn");
|
||||
configureFailPoint(st.shard1, "corruptDocumentOnInsert", {ns: kNsColl}, "alwaysOn");
|
||||
assert.commandWorked(s1Coll.insert({_id: 1}));
|
||||
configureFailPoint(st.shard1, "corruptDocumentOnInsert", {}, "off");
|
||||
|
||||
|
||||
@@ -287,11 +287,19 @@ Status insertDocumentsImpl(OperationContext* opCtx,
|
||||
}
|
||||
|
||||
if (MONGO_unlikely(corruptDocumentOnInsert.shouldFail())) {
|
||||
// Insert a truncated record that is half the expected size of the source document.
|
||||
records.emplace_back(
|
||||
Record{std::move(recordId), RecordData(doc.objdata(), doc.objsize() / 2)});
|
||||
timestamps.emplace_back(it->oplogSlot.getTimestamp());
|
||||
continue;
|
||||
auto scoped = corruptDocumentOnInsert.scoped();
|
||||
const auto fpNss = NamespaceStringUtil::parseFailPointData(scoped.getData(), "ns"_sd);
|
||||
if (collection->ns() == fpNss) {
|
||||
// Insert a truncated record that is half the expected size of the source document.
|
||||
records.emplace_back(
|
||||
Record{std::move(recordId), RecordData(doc.objdata(), doc.objsize() / 2)});
|
||||
timestamps.emplace_back(it->oplogSlot.getTimestamp());
|
||||
LOGV2_WARNING(11627300,
|
||||
"Corrupted document intentionally inserted due to failpoint",
|
||||
"failpoint"_attr = corruptDocumentOnInsert.getName(),
|
||||
"namespace"_attr = collection->ns());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
explicitlySetRecordIdOnInsert.execute([&](const BSONObj& data) {
|
||||
|
||||
Reference in New Issue
Block a user