diff options
author | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2020-10-13 15:13:29 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-10-15 19:16:42 +0000 |
commit | 2ebea0648a4bd2d31abb5251d66b2b7925bb06a8 (patch) | |
tree | 9f8f74c44345c1771174ccb09bb5f091f76ca488 | |
parent | 9f52be8cf511d4fe0b2aa8eb20e18c47a5bf097d (diff) | |
download | mongo-2ebea0648a4bd2d31abb5251d66b2b7925bb06a8.tar.gz |
SERVER-47898: Advancing lastDurable should advance lastApplied
-rw-r--r-- | src/mongo/db/repl/member_data.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/mongo/db/repl/member_data.cpp b/src/mongo/db/repl/member_data.cpp index aa5c5d3e850..87d526bf8c5 100644 --- a/src/mongo/db/repl/member_data.cpp +++ b/src/mongo/db/repl/member_data.cpp @@ -152,12 +152,14 @@ void MemberData::setLastDurableOpTimeAndWallTime(OpTimeAndWallTime opTime, Date_ invariant(opTime.opTime.isNull() || opTime.wallTime > Date_t()); _lastUpdate = now; _lastUpdateStale = false; + // Since _lastDurableOpTime is set asynchronously from _lastAppliedOpTime, it is possible that - // 'opTime' is ahead of _lastAppliedOpTime. - if (_lastAppliedOpTime >= opTime.opTime) { - _lastDurableOpTime = opTime.opTime; - _lastDurableWallTime = opTime.wallTime; - } + // 'opTime' is ahead of _lastAppliedOpTime. When we attempt to advance _lastDurableOpTime beyond + // _lastAppliedOpTime, we should also _lastAppliedOpTime. + advanceLastAppliedOpTimeAndWallTime(opTime, now); + + _lastDurableOpTime = opTime.opTime; + _lastDurableWallTime = opTime.wallTime; } bool MemberData::advanceLastAppliedOpTimeAndWallTime(OpTimeAndWallTime opTime, Date_t now) { @@ -176,8 +178,7 @@ bool MemberData::advanceLastDurableOpTimeAndWallTime(OpTimeAndWallTime opTime, D _lastUpdate = now; _lastUpdateStale = false; if (_lastDurableOpTime < opTime.opTime) { - _lastDurableOpTime = opTime.opTime; - _lastDurableWallTime = opTime.wallTime; + setLastDurableOpTimeAndWallTime(opTime, now); return true; } return false; |