summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlake Oler <blake.oler@mongodb.com>2021-04-27 21:02:38 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-04-29 16:02:14 +0000
commit71b7bfbd35c779d59d5d24db860513aaf3c9e365 (patch)
treed962ab458ce364c4dbef390b4e2b3ffae59077c8
parent67db15323c295c19fc42af721dd741dd18a8dbb8 (diff)
downloadmongo-71b7bfbd35c779d59d5d24db860513aaf3c9e365.tar.gz
SERVER-55873 Force secondaries to apply each write to config.localReshardingOperations.donor in its own batch
-rw-r--r--src/mongo/db/namespace_string.cpp1
-rw-r--r--src/mongo/db/repl/oplog_applier_test.cpp11
2 files changed, 12 insertions, 0 deletions
diff --git a/src/mongo/db/namespace_string.cpp b/src/mongo/db/namespace_string.cpp
index d8e0ad191f4..6f1b7c63622 100644
--- a/src/mongo/db/namespace_string.cpp
+++ b/src/mongo/db/namespace_string.cpp
@@ -192,6 +192,7 @@ bool NamespaceString::isLegalClientSystemNS(
*/
bool NamespaceString::mustBeAppliedInOwnOplogBatch() const {
return isSystemDotViews() || isServerConfigurationCollection() || isPrivilegeCollection() ||
+ _ns == kDonorReshardingOperationsNamespace.ns() ||
_ns == kForceOplogBatchBoundaryNamespace.ns();
}
diff --git a/src/mongo/db/repl/oplog_applier_test.cpp b/src/mongo/db/repl/oplog_applier_test.cpp
index 994b36523ce..5fc5420cf17 100644
--- a/src/mongo/db/repl/oplog_applier_test.cpp
+++ b/src/mongo/db/repl/oplog_applier_test.cpp
@@ -163,6 +163,17 @@ TEST_F(OplogApplierTest, GetNextApplierBatchReturnsServerConfigurationOpInOwnBat
ASSERT_EQUALS(srcOps[0], batch[0]);
}
+TEST_F(OplogApplierTest, GetNextApplierBatchReturnsConfigReshardingDonorOpInOwnBatch) {
+ std::vector<OplogEntry> srcOps;
+ srcOps.push_back(makeInsertOplogEntry(1, NamespaceString::kDonorReshardingOperationsNamespace));
+ srcOps.push_back(makeInsertOplogEntry(2, NamespaceString(dbName, "bar")));
+ _applier->enqueue(_opCtx.get(), srcOps.cbegin(), srcOps.cend());
+
+ auto batch = unittest::assertGet(_applier->getNextApplierBatch(_opCtx.get(), _limits));
+ ASSERT_EQUALS(1U, batch.size()) << toString(batch);
+ ASSERT_EQUALS(srcOps[0], batch[0]);
+}
+
TEST_F(OplogApplierTest, GetNextApplierBatchReturnsPreparedCommitTransactionOpInOwnBatch) {
std::vector<OplogEntry> srcOps;
srcOps.push_back(makeCommitTransactionOplogEntry(1, dbName, true, 3));