diff options
author | Randolph Tan <randolph@10gen.com> | 2017-05-03 13:20:52 -0400 |
---|---|---|
committer | Randolph Tan <randolph@10gen.com> | 2017-05-04 16:29:38 -0400 |
commit | 2b3d18c8e9871f7cbb89650133ee694bc28636c2 (patch) | |
tree | 0bfed2d46be908e569e724b8cddfbc5f2e1a1b98 /src/mongo/rpc/metadata.cpp | |
parent | 67b8dfc2beb283b08f2549df4d99730325ee5de2 (diff) | |
download | mongo-2b3d18c8e9871f7cbb89650133ee694bc28636c2.tar.gz |
Revert "Revert "SERVER-28562 Move LogicalTime HMAC computation outside collection lock""
This reverts commit b7c013aa097b2d999ad3f942cdfce130558ef40f.
Diffstat (limited to 'src/mongo/rpc/metadata.cpp')
-rw-r--r-- | src/mongo/rpc/metadata.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/mongo/rpc/metadata.cpp b/src/mongo/rpc/metadata.cpp index d0e837302c4..07cdfef9fca 100644 --- a/src/mongo/rpc/metadata.cpp +++ b/src/mongo/rpc/metadata.cpp @@ -38,6 +38,7 @@ #include "mongo/db/auth/privilege.h" #include "mongo/db/jsobj.h" #include "mongo/db/logical_clock.h" +#include "mongo/db/logical_time_validator.h" #include "mongo/rpc/metadata/audit_metadata.h" #include "mongo/rpc/metadata/client_metadata_ismaster.h" #include "mongo/rpc/metadata/config_server_metadata.h" @@ -131,7 +132,7 @@ Status readRequestMetadata(OperationContext* opCtx, const BSONObj& metadataObj) auto logicalClock = LogicalClock::get(opCtx); if (logicalClock) { - auto logicalTimeMetadata = LogicalTimeMetadata::readFromMetadata(logicalTimeElem); + auto logicalTimeMetadata = rpc::LogicalTimeMetadata::readFromMetadata(logicalTimeElem); if (!logicalTimeMetadata.isOK()) { return logicalTimeMetadata.getStatus(); } @@ -143,19 +144,24 @@ Status readRequestMetadata(OperationContext* opCtx, const BSONObj& metadataObj) return Status::OK(); } + auto logicalTimeValidator = LogicalTimeValidator::get(opCtx); if (isAuthorizedToAdvanceClock(opCtx)) { - auto advanceClockStatus = logicalClock->advanceClusterTimeFromTrustedSource(signedTime); - - if (!advanceClockStatus.isOK()) { - return advanceClockStatus; + if (logicalTimeValidator) { + logicalTimeValidator->updateCacheTrustedSource(signedTime); } + } else if (!logicalTimeValidator) { + return Status(ErrorCodes::CannotVerifyAndSignLogicalTime, + "Cannot accept logicalTime: " + signedTime.getTime().toString() + + ". May not be a part of a sharded cluster"); } else { - auto advanceClockStatus = logicalClock->advanceClusterTime(signedTime); + auto advanceClockStatus = logicalTimeValidator->validate(signedTime); if (!advanceClockStatus.isOK()) { return advanceClockStatus; } } + + logicalClock->advanceClusterTime(signedTime.getTime()); } return Status::OK(); |