summaryrefslogtreecommitdiff
path: root/src/mongo/db/logical_time_metadata_hook.cpp
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2017-05-03 13:20:52 -0400
committerRandolph Tan <randolph@10gen.com>2017-05-04 16:29:38 -0400
commit2b3d18c8e9871f7cbb89650133ee694bc28636c2 (patch)
tree0bfed2d46be908e569e724b8cddfbc5f2e1a1b98 /src/mongo/db/logical_time_metadata_hook.cpp
parent67b8dfc2beb283b08f2549df4d99730325ee5de2 (diff)
downloadmongo-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.cpp16
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