Details
Description
class LogicalClock {
|
public:
|
...
|
|
|
// sets new time if the newTime > _clusterTime and the newTime passes validation.
|
// Return OK if time is updated
|
// Returns SignatureDoesNotMatch on signature mismatch.
|
Status advanceClusterTime(OperationContext* txn, SignedLogicalTime newTime) {
|
// TODO: grab mutex here
|
|
|
if (_lastLogicalTime.getTime() >= newTime.getTime()) {
|
return Status::OK();
|
}
|
|
|
if (!passesRateLimiter(newTime)) {
|
return {ErrorCodes::CannotAdvanceLogicalClock, ""};
|
}
|
|
|
if (autoOn) {
|
if (!hasEnoughPrivilege(txn)) {
|
auto mySignature = _hmacService->sign(newTime.getTime().serialize());
|
|
|
if (mySignature != newTime.getSignature()) {
|
return {ErrorCodes::SignatureDoesNotMatch, ""};
|
}
|
}
|
}
|
|
|
_lastLogicalTime = std::move(newTime);
|
}
|
}
|
processNewLogicalTime should be added to:
- readRequestMetadata() in metadata.cpp
- ShardingEgressMetadataHook::readReplyMetadata()
Distribution of the metadata means that its read/written from/to op_command and op_command_reply. This should use LogicalTimeMetadata from SERVER-27748 to append metadata to these places:
Attachments
Issue Links
- depends on
-
SERVER-27855 Attach all NetworkInterface instances with EgressHooks
-
- Closed
-
-
SERVER-28158 SnapshotThread should stop using LogicalClock to trigger snapshots
-
- Closed
-
- is depended on by
-
SERVER-27750 Sharding component LogicalTimeMetadata distribution
-
- Closed
-
- is related to
-
SERVER-46257 OplogFetcher should run LogicalTimeMetadataHook on reply metadata
-
- Closed
-