summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorali-mir <ali.mir@mongodb.com>2022-08-23 19:44:28 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-12-08 22:05:40 +0000
commit198cd42e240e7ae8d2cc06250dccb67deda169ad (patch)
tree3cb95dbf16640231113262178de2f4bfa21e1e7d
parent1372bfc84c1913fa4c6c2d882ac8bbc7763af123 (diff)
downloadmongo-198cd42e240e7ae8d2cc06250dccb67deda169ad.tar.gz
SERVER-65177 Use executor clock to calculate elapsed initial sync time
(cherry picked from commit 9d47a813c02607ff8fb4fbc50b544ebeb494ce85)
-rw-r--r--src/mongo/db/repl/initial_syncer.cpp4
-rw-r--r--src/mongo/db/repl/initial_syncer.h1
-rw-r--r--src/mongo/db/repl/initial_syncer_test.cpp10
3 files changed, 11 insertions, 4 deletions
diff --git a/src/mongo/db/repl/initial_syncer.cpp b/src/mongo/db/repl/initial_syncer.cpp
index c8fa7bdc372..d8a2f5104d7 100644
--- a/src/mongo/db/repl/initial_syncer.cpp
+++ b/src/mongo/db/repl/initial_syncer.cpp
@@ -548,6 +548,7 @@ void InitialSyncer::_setUp_inlock(OperationContext* opCtx, std::uint32_t initial
_stats.initialSyncStart = _exec->now();
_stats.maxFailedInitialSyncAttempts = initialSyncMaxAttempts;
_stats.failedInitialSyncAttempts = 0;
+ _stats.exec = std::weak_ptr<executor::TaskExecutor>(_exec);
_allowedOutageDuration = Seconds(initialSyncTransientErrorRetryPeriodSeconds.load());
}
@@ -2196,9 +2197,10 @@ void InitialSyncer::Stats::append(BSONObjBuilder* builder) const {
builder->appendNumber("maxFailedInitialSyncAttempts",
static_cast<long long>(maxFailedInitialSyncAttempts));
+ auto e = exec.lock();
if (initialSyncStart != Date_t()) {
builder->appendDate("initialSyncStart", initialSyncStart);
- auto elapsedDurationEnd = Date_t::now();
+ auto elapsedDurationEnd = e ? e->now() : Date_t::now();
if (initialSyncEnd != Date_t()) {
builder->appendDate("initialSyncEnd", initialSyncEnd);
elapsedDurationEnd = initialSyncEnd;
diff --git a/src/mongo/db/repl/initial_syncer.h b/src/mongo/db/repl/initial_syncer.h
index 177122e12d9..3a124b6b02d 100644
--- a/src/mongo/db/repl/initial_syncer.h
+++ b/src/mongo/db/repl/initial_syncer.h
@@ -140,6 +140,7 @@ public:
Date_t initialSyncStart;
Date_t initialSyncEnd;
std::vector<InitialSyncer::InitialSyncAttemptInfo> initialSyncAttemptInfos;
+ std::weak_ptr<executor::TaskExecutor> exec;
std::string toString() const;
BSONObj toBSON() const;
diff --git a/src/mongo/db/repl/initial_syncer_test.cpp b/src/mongo/db/repl/initial_syncer_test.cpp
index 147d0571ceb..82670cc53ba 100644
--- a/src/mongo/db/repl/initial_syncer_test.cpp
+++ b/src/mongo/db/repl/initial_syncer_test.cpp
@@ -4510,6 +4510,10 @@ TEST_F(InitialSyncerTest, TestRemainingInitialSyncEstimatedMillisMetric) {
// Wait for the server to have reached the end of cloning collection 'a.a'. The size of this
// collection is expected to equal 'dbSize'.
hangDuringCloningFailPoint->waitForTimesEntered(timesEntered + 1);
+ {
+ executor::NetworkInterfaceMock::InNetworkGuard guard(net);
+ net->runUntil(Date_t::now() + Seconds(1));
+ }
auto progress = initialSyncer->getInitialSyncProgress();
LOGV2(5301701, "Progress in middle of cloning", "progress"_attr = progress);
{
@@ -4605,7 +4609,7 @@ TEST_F(InitialSyncerTest, GetInitialSyncProgressReturnsCorrectProgress) {
ASSERT_FALSE(progress.hasField("InitialSyncEnd"));
ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 0) << progress;
ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2) << progress;
- ASSERT_EQUALS(progress["totalInitialSyncElapsedMillis"].type(), NumberLong) << progress;
+ ASSERT_EQUALS(progress["totalInitialSyncElapsedMillis"].type(), NumberInt) << progress;
ASSERT_EQUALS(progress.getIntField("approxTotalDataSize"), 0) << progress;
ASSERT_EQUALS(progress.getIntField("approxTotalBytesCopied"), 0) << progress;
ASSERT_EQUALS(progress["initialSyncStart"].type(), Date) << progress;
@@ -4673,7 +4677,7 @@ TEST_F(InitialSyncerTest, GetInitialSyncProgressReturnsCorrectProgress) {
ASSERT_FALSE(progress.hasField("InitialSyncEnd"));
ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 1) << progress;
ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2) << progress;
- ASSERT_EQUALS(progress["totalInitialSyncElapsedMillis"].type(), NumberLong) << progress;
+ ASSERT_EQUALS(progress["totalInitialSyncElapsedMillis"].type(), NumberInt) << progress;
ASSERT_EQUALS(progress.getIntField("approxTotalDataSize"), 0) << progress;
ASSERT_EQUALS(progress.getIntField("approxTotalBytesCopied"), 0) << progress;
ASSERT_EQUALS(progress["initialSyncStart"].type(), Date) << progress;
@@ -4775,7 +4779,7 @@ TEST_F(InitialSyncerTest, GetInitialSyncProgressReturnsCorrectProgress) {
ASSERT_EQUALS(progress.nFields(), 14) << progress;
ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 1) << progress;
ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2) << progress;
- ASSERT_EQUALS(progress["totalInitialSyncElapsedMillis"].type(), NumberLong) << progress;
+ ASSERT_EQUALS(progress["totalInitialSyncElapsedMillis"].type(), NumberInt) << progress;
ASSERT_EQUALS(progress.getIntField("approxTotalDataSize"), 10) << progress;
ASSERT_EQUALS(progress.getIntField("approxTotalBytesCopied"), 10) << progress;
ASSERT_EQUALS(progress["initialSyncOplogStart"].timestamp(), Timestamp(1, 1)) << progress;