summaryrefslogtreecommitdiff
path: root/src/mongo/s
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s')
-rw-r--r--src/mongo/s/commands/strategy.cpp20
-rw-r--r--src/mongo/s/sharding_initialization.cpp7
2 files changed, 14 insertions, 13 deletions
diff --git a/src/mongo/s/commands/strategy.cpp b/src/mongo/s/commands/strategy.cpp
index 25ac876dfd2..5c24d16bdc1 100644
--- a/src/mongo/s/commands/strategy.cpp
+++ b/src/mongo/s/commands/strategy.cpp
@@ -44,6 +44,7 @@
#include "mongo/db/commands.h"
#include "mongo/db/lasterror.h"
#include "mongo/db/logical_clock.h"
+#include "mongo/db/logical_time_validator.h"
#include "mongo/db/matcher/extensions_callback_noop.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_time_tracker.h"
@@ -149,30 +150,29 @@ Status processCommandMetadata(OperationContext* opCtx, const BSONObj& cmdObj) {
}
auto authSession = AuthorizationSession::get(opCtx->getClient());
+ auto logicalTimeValidator = LogicalTimeValidator::get(opCtx);
+ const auto& signedTime = logicalTimeMetadata.getValue().getSignedTime();
+
if (authSession->getAuthorizationManager().isAuthEnabled()) {
- auto advanceClockStatus =
- logicalClock->advanceClusterTime(logicalTimeMetadata.getValue().getSignedTime());
+ auto advanceClockStatus = logicalTimeValidator->validate(signedTime);
if (!advanceClockStatus.isOK()) {
return advanceClockStatus;
}
} else {
- auto advanceClockStatus = logicalClock->advanceClusterTimeFromTrustedSource(
- logicalTimeMetadata.getValue().getSignedTime());
-
- if (!advanceClockStatus.isOK()) {
- return advanceClockStatus;
- }
+ logicalTimeValidator->updateCacheTrustedSource(signedTime);
}
- return Status::OK();
+ return logicalClock->advanceClusterTime(signedTime.getTime());
}
/**
* Append required fields to command response.
*/
void appendRequiredFieldsToResponse(OperationContext* opCtx, BSONObjBuilder* responseBuilder) {
- rpc::LogicalTimeMetadata logicalTimeMetadata(LogicalClock::get(opCtx)->getClusterTime());
+ auto validator = LogicalTimeValidator::get(opCtx);
+ auto currentTime = validator->signLogicalTime(LogicalClock::get(opCtx)->getClusterTime());
+ rpc::LogicalTimeMetadata logicalTimeMetadata(currentTime);
logicalTimeMetadata.writeToMetadata(responseBuilder);
auto tracker = OperationTimeTracker::get(opCtx);
if (tracker) {
diff --git a/src/mongo/s/sharding_initialization.cpp b/src/mongo/s/sharding_initialization.cpp
index 30403eb725e..9220176f29e 100644
--- a/src/mongo/s/sharding_initialization.cpp
+++ b/src/mongo/s/sharding_initialization.cpp
@@ -38,6 +38,7 @@
#include "mongo/client/remote_command_targeter_factory_impl.h"
#include "mongo/db/audit.h"
#include "mongo/db/logical_clock.h"
+#include "mongo/db/logical_time_validator.h"
#include "mongo/db/s/sharding_task_executor.h"
#include "mongo/db/server_options.h"
#include "mongo/db/server_parameters.h"
@@ -208,9 +209,6 @@ Status initializeGlobalShardingState(OperationContext* opCtx,
std::move(executorPool),
networkPtr);
- auto timeProofService = stdx::make_unique<TimeProofService>();
- LogicalClock::get(opCtx)->setTimeProofService(std::move(timeProofService));
-
// must be started once the grid is initialized
grid.shardRegistry()->startup(opCtx);
@@ -227,6 +225,9 @@ Status initializeGlobalShardingState(OperationContext* opCtx,
}
}
+ LogicalTimeValidator::set(opCtx->getServiceContext(),
+ stdx::make_unique<LogicalTimeValidator>());
+
return Status::OK();
}