summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp
diff options
context:
space:
mode:
authorjannaerin <golden.janna@gmail.com>2021-07-15 14:05:34 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-07-29 18:51:17 +0000
commit298d02f7432b84df2a955addc5bcdf6a366c6645 (patch)
treecd63849097905aee03c691c1fa400c6ba801b987 /src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp
parent68f6c01d0f0452a9aef96e2da6289ce40fac2e41 (diff)
downloadmongo-298d02f7432b84df2a955addc5bcdf6a366c6645.tar.gz
SERVER-49897 Insert no-op entries into oplog buffer collections for resharding so resuming is less wasteful
Diffstat (limited to 'src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp')
-rw-r--r--src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp b/src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp
index e1ca728d8f0..f98dae2426f 100644
--- a/src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp
@@ -135,6 +135,14 @@ public:
return makeOplog(_crudNss, _uuid, repl::OpTypeEnum::kNoop, oField, o2Field, oplogId);
}
+ repl::MutableOplogEntry makeProgressMarkOplogEntry(Timestamp ts) {
+ ReshardingDonorOplogId oplogId(ts, ts);
+ const BSONObj oField(BSON("msg"
+ << "Latest oplog ts from donor's cursor response"));
+ const BSONObj o2Field(BSON("type" << kReshardProgressMark));
+ return makeOplog(_crudNss, _uuid, repl::OpTypeEnum::kNoop, oField, o2Field, oplogId);
+ }
+
const NamespaceString& oplogNss() const {
return _oplogNss;
}
@@ -412,5 +420,34 @@ TEST_F(ReshardingDonorOplogIterTest, FillsInPostImageOplogEntry) {
ASSERT_TRUE(next.empty());
}
+TEST_F(ReshardingDonorOplogIterTest, BatchIncludesProgressMarkEntries) {
+ const auto oplog1 = makeInsertOplog(Timestamp(2, 4), BSON("x" << 1));
+ const auto progressMarkOplog1 = makeProgressMarkOplogEntry(Timestamp(15, 3));
+ const auto finalOplog = makeFinalOplog(Timestamp(43, 24));
+
+ DBDirectClient client(operationContext());
+ const auto ns = oplogNss().ns();
+ client.insert(ns, oplog1.toBSON());
+ client.insert(ns, progressMarkOplog1.toBSON());
+ client.insert(ns, finalOplog.toBSON());
+
+ ReshardingDonorOplogIterator iter(oplogNss(), kResumeFromBeginning, &onInsertAlwaysReady);
+ auto executor = makeTaskExecutorForIterator();
+ auto factory = makeCancelableOpCtx();
+ auto altClient = makeKillableClient();
+ AlternativeClientRegion acr(altClient);
+
+ auto next = getNextBatch(&iter, executor, factory);
+ ASSERT_EQ(next.size(), 1U);
+ ASSERT_BSONOBJ_EQ(getId(oplog1), getId(next[0]));
+
+ next = getNextBatch(&iter, executor, factory);
+ ASSERT_EQ(next.size(), 1U);
+ ASSERT_BSONOBJ_EQ(getId(progressMarkOplog1), getId(next[0]));
+
+ next = getNextBatch(&iter, executor, factory);
+ ASSERT_TRUE(next.empty());
+}
+
} // anonymous namespace
} // namespace mongo