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/db/logical_time_metadata_hook.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/db/logical_time_metadata_hook.cpp')
-rw-r--r-- | src/mongo/db/logical_time_metadata_hook.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/mongo/db/logical_time_metadata_hook.cpp b/src/mongo/db/logical_time_metadata_hook.cpp index bb4124d611b..29949e36c82 100644 --- a/src/mongo/db/logical_time_metadata_hook.cpp +++ b/src/mongo/db/logical_time_metadata_hook.cpp @@ -31,6 +31,7 @@ #include "mongo/db/logical_time_metadata_hook.h" #include "mongo/db/logical_clock.h" +#include "mongo/db/logical_time_validator.h" #include "mongo/rpc/metadata/logical_time_metadata.h" #include "mongo/stdx/memory.h" @@ -42,11 +43,13 @@ LogicalTimeMetadataHook::LogicalTimeMetadataHook(ServiceContext* service) : _ser Status LogicalTimeMetadataHook::writeRequestMetadata(OperationContext* opCtx, BSONObjBuilder* metadataBob) { - if (!LogicalClock::get(_service)->canVerifyAndSign()) { + auto validator = LogicalTimeValidator::get(_service); + if (!validator) { return Status::OK(); } - LogicalTimeMetadata metadata(LogicalClock::get(_service)->getClusterTime()); + auto newTime = LogicalClock::get(_service)->getClusterTime(); + LogicalTimeMetadata metadata(validator->signLogicalTime(newTime)); metadata.writeToMetadata(metadataBob); return Status::OK(); } @@ -57,14 +60,21 @@ Status LogicalTimeMetadataHook::readReplyMetadata(StringData replySource, if (!parseStatus.isOK()) { return parseStatus.getStatus(); } + auto& signedTime = parseStatus.getValue().getSignedTime(); + // LogicalTimeMetadata is default constructed if no logical time metadata was sent, so a // default constructed SignedLogicalTime should be ignored. if (signedTime.getTime() == LogicalTime::kUninitialized) { return Status::OK(); } - return LogicalClock::get(_service)->advanceClusterTimeFromTrustedSource(signedTime); + auto validator = LogicalTimeValidator::get(_service); + if (validator) { + validator->updateCacheTrustedSource(signedTime); + } + + return LogicalClock::get(_service)->advanceClusterTime(signedTime.getTime()); } } // namespace rpc |