summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/initial_syncer.h
diff options
context:
space:
mode:
authorMaria van Keulen <maria@mongodb.com>2019-02-28 13:38:37 -0500
committerMaria van Keulen <maria@mongodb.com>2019-03-19 19:33:08 -0400
commitd8d3d3ab1cef37bcc6f65182463b83eaf4669e17 (patch)
treed40a098c2b9fcb6b4a09c3b88057cbf7e01a137a /src/mongo/db/repl/initial_syncer.h
parentf094ef24969b20a4483e0211d82887655cc133e8 (diff)
downloadmongo-d8d3d3ab1cef37bcc6f65182463b83eaf4669e17.tar.gz
SERVER-40080 report last applied and last durable wall clock times
Diffstat (limited to 'src/mongo/db/repl/initial_syncer.h')
-rw-r--r--src/mongo/db/repl/initial_syncer.h26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/mongo/db/repl/initial_syncer.h b/src/mongo/db/repl/initial_syncer.h
index 512a2cbd504..d9c13ec9635 100644
--- a/src/mongo/db/repl/initial_syncer.h
+++ b/src/mongo/db/repl/initial_syncer.h
@@ -85,8 +85,8 @@ struct InitialSyncerOptions {
using GetMyLastOptimeFn = stdx::function<OpTime()>;
/** Function to update optime of last operation applied on this node */
- using SetMyLastOptimeFn =
- stdx::function<void(const OpTime&, ReplicationCoordinator::DataConsistency consistency)>;
+ using SetMyLastOptimeFn = stdx::function<void(
+ const OpTimeAndWallTime&, ReplicationCoordinator::DataConsistency consistency)>;
/** Function to reset all optimes on this node (e.g. applied & durable). */
using ResetOptimesFn = stdx::function<void()>;
@@ -145,12 +145,13 @@ public:
/**
* Callback function to report last applied optime of initial sync.
*/
- typedef stdx::function<void(const StatusWith<OpTime>& lastApplied)> OnCompletionFn;
+ typedef stdx::function<void(const StatusWith<std::tuple<OpTime, Date_t>>& lastApplied)>
+ OnCompletionFn;
/**
* Callback completion guard for initial syncer.
*/
- using OnCompletionGuard = CallbackCompletionGuard<StatusWith<OpTime>>;
+ using OnCompletionGuard = CallbackCompletionGuard<StatusWith<std::tuple<OpTime, Date_t>>>;
using StartCollectionClonerFn = DatabaseCloner::StartCollectionClonerFn;
@@ -242,6 +243,12 @@ public:
*/
State getState_forTest() const;
+ /**
+ * Returns the wall clock time component of _lastApplied.
+ * For testing only.
+ */
+ Date_t getWallClockTime_forTest() const;
+
private:
/**
* Returns true if we are still processing initial sync tasks (_state is either Running or
@@ -363,7 +370,8 @@ private:
/**
* Tears down internal state before reporting final status to caller.
*/
- void _tearDown_inlock(OperationContext* opCtx, const StatusWith<OpTime>& lastApplied);
+ void _tearDown_inlock(OperationContext* opCtx,
+ const StatusWith<std::tuple<OpTime, Date_t>>& lastApplied);
/**
* Callback to start a single initial sync attempt.
@@ -464,7 +472,7 @@ private:
* Callback for MultiApplier completion.
*/
void _multiApplierCallback(const Status& status,
- OpTime lastApplied,
+ std::tuple<OpTime, Date_t> lastApplied,
std::uint32_t numApplied,
std::shared_ptr<OnCompletionGuard> onCompletionGuard);
@@ -490,12 +498,12 @@ private:
* Reports result of current initial sync attempt. May schedule another initial sync attempt
* depending on shutdown state and whether we've exhausted all initial sync retries.
*/
- void _finishInitialSyncAttempt(const StatusWith<OpTime>& lastApplied);
+ void _finishInitialSyncAttempt(const StatusWith<std::tuple<OpTime, Date_t>>& lastApplied);
/**
* Invokes completion callback and transitions state to State::kComplete.
*/
- void _finishCallback(StatusWith<OpTime> lastApplied);
+ void _finishCallback(StatusWith<std::tuple<OpTime, Date_t>> lastApplied);
// Obtains a valid sync source from the sync source selector.
// Returns error if a sync source cannot be found.
@@ -642,7 +650,7 @@ private:
std::unique_ptr<MultiApplier> _applier; // (M)
HostAndPort _syncSource; // (M)
OpTime _lastFetched; // (MX)
- OpTime _lastApplied; // (MX)
+ std::tuple<OpTime, Date_t> _lastApplied; // (MX)
std::unique_ptr<OplogBuffer> _oplogBuffer; // (M)
std::unique_ptr<OplogApplier::Observer> _observer; // (S)
std::unique_ptr<OplogApplier> _oplogApplier; // (M)