diff options
Diffstat (limited to 'src/mongo/s')
-rw-r--r-- | src/mongo/s/commands/strategy.cpp | 20 | ||||
-rw-r--r-- | src/mongo/s/sharding_initialization.cpp | 7 |
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(); } |