diff options
author | jannaerin <golden.janna@gmail.com> | 2021-07-15 14:05:34 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-07-29 18:51:17 +0000 |
commit | 298d02f7432b84df2a955addc5bcdf6a366c6645 (patch) | |
tree | cd63849097905aee03c691c1fa400c6ba801b987 /src/mongo/db/s/resharding/resharding_donor_oplog_iterator_test.cpp | |
parent | 68f6c01d0f0452a9aef96e2da6289ce40fac2e41 (diff) | |
download | mongo-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.cpp | 37 |
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 |