summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKevin Pulo <kevin.pulo@mongodb.com>2020-09-15 11:44:54 +1000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-09-17 04:31:08 +0000
commit686ee776666ebcfa15f3744142f74b6f1d59e617 (patch)
tree4b03cae9999243359291acc931eaae8daa2b5869 /src
parent8213debcbf8b9495c0e336d98a8bf75df7f088c5 (diff)
downloadmongo-686ee776666ebcfa15f3744142f74b6f1d59e617.tar.gz
SERVER-48433 Remove LogicalClock facade
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/SConscript9
-rw-r--r--src/mongo/db/auth/auth_op_observer_test.cpp1
-rw-r--r--src/mongo/db/catalog/index_build_block.cpp4
-rw-r--r--src/mongo/db/catalog/index_catalog_entry_impl.cpp1
-rw-r--r--src/mongo/db/catalog/index_catalog_impl.cpp4
-rw-r--r--src/mongo/db/commands/dbhash.cpp1
-rw-r--r--src/mongo/db/commands/drop_indexes.cpp4
-rw-r--r--src/mongo/db/commands/snapshot_management.cpp4
-rw-r--r--src/mongo/db/key_generator.cpp16
-rw-r--r--src/mongo/db/keys_collection_client_direct.cpp1
-rw-r--r--src/mongo/db/keys_collection_manager.cpp6
-rw-r--r--src/mongo/db/keys_collection_manager_sharding_test.cpp2
-rw-r--r--src/mongo/db/logical_clock.cpp82
-rw-r--r--src/mongo/db/logical_clock.h74
-rw-r--r--src/mongo/db/logical_time_validator.cpp6
-rw-r--r--src/mongo/db/mongod_main.cpp4
-rw-r--r--src/mongo/db/op_msg_fuzzer.cpp3
-rw-r--r--src/mongo/db/op_observer_impl_test.cpp1
-rw-r--r--src/mongo/db/pipeline/document_source_change_stream.cpp7
-rw-r--r--src/mongo/db/pipeline/document_source_change_stream_transform.cpp1
-rw-r--r--src/mongo/db/pipeline/expression_context_test.cpp3
-rw-r--r--src/mongo/db/pipeline/sharded_agg_helpers.cpp5
-rw-r--r--src/mongo/db/pipeline/variables.cpp10
-rw-r--r--src/mongo/db/read_concern_mongod.cpp10
-rw-r--r--src/mongo/db/read_write_concern_defaults.cpp5
-rw-r--r--src/mongo/db/read_write_concern_defaults_test.cpp5
-rw-r--r--src/mongo/db/repair.cpp4
-rw-r--r--src/mongo/db/repl/oplog_fetcher_test.cpp15
-rw-r--r--src/mongo/db/repl/replication_coordinator_external_state_impl.cpp5
-rw-r--r--src/mongo/db/repl/replication_coordinator_test_fixture.cpp4
-rw-r--r--src/mongo/db/repl/storage_interface_impl.cpp1
-rw-r--r--src/mongo/db/s/config/initial_split_policy.cpp43
-rw-r--r--src/mongo/db/s/config/initial_split_policy_test.cpp16
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp1
-rw-r--r--src/mongo/db/s/merge_chunks_command.cpp5
-rw-r--r--src/mongo/db/s/migration_source_manager.cpp18
-rw-r--r--src/mongo/db/s/shardsvr_shard_collection.cpp1
-rw-r--r--src/mongo/db/service_context_d_test_fixture.cpp3
-rw-r--r--src/mongo/db/service_entry_point_common.cpp1
-rw-r--r--src/mongo/db/service_liaison.cpp1
-rw-r--r--src/mongo/db/storage/storage_engine_impl.cpp1
-rw-r--r--src/mongo/db/update/object_replace_executor_test.cpp1
-rw-r--r--src/mongo/db/update/pipeline_executor_test.cpp1
-rw-r--r--src/mongo/db/update/update_node_test_fixture.h6
-rw-r--r--src/mongo/db/vector_clock.cpp13
-rw-r--r--src/mongo/db/vector_clock.h7
-rw-r--r--src/mongo/db/vector_clock_test.cpp (renamed from src/mongo/db/logical_clock_test.cpp)93
-rw-r--r--src/mongo/db/vector_clock_test_fixture.cpp (renamed from src/mongo/db/logical_clock_test_fixture.cpp)34
-rw-r--r--src/mongo/db/vector_clock_test_fixture.h (renamed from src/mongo/db/logical_clock_test_fixture.h)18
-rw-r--r--src/mongo/dbtests/dbtests.cpp4
-rw-r--r--src/mongo/dbtests/querytests.cpp1
-rw-r--r--src/mongo/embedded/embedded.cpp4
-rw-r--r--src/mongo/embedded/stitch_support/stitch_support.cpp3
-rw-r--r--src/mongo/rpc/metadata.cpp1
-rw-r--r--src/mongo/s/catalog_cache.cpp1
-rw-r--r--src/mongo/s/cluster_commands_helpers.cpp1
-rw-r--r--src/mongo/s/commands/cluster_command_test_fixture.cpp5
-rw-r--r--src/mongo/s/commands/cluster_write_cmd.cpp1
-rw-r--r--src/mongo/s/commands/strategy.cpp7
-rw-r--r--src/mongo/s/grid.cpp8
-rw-r--r--src/mongo/s/mongos_main.cpp3
-rw-r--r--src/mongo/s/query/cluster_aggregate.cpp1
-rw-r--r--src/mongo/s/query/cluster_find.cpp1
-rw-r--r--src/mongo/s/query/sharded_agg_test_fixture.h3
-rw-r--r--src/mongo/s/sessions_collection_sharded_test.cpp3
-rw-r--r--src/mongo/s/sharding_initialization.cpp1
-rw-r--r--src/mongo/s/transaction_router.cpp9
-rw-r--r--src/mongo/s/transaction_router_test.cpp5
-rw-r--r--src/mongo/s/write_ops/batch_write_exec_test.cpp3
69 files changed, 211 insertions, 415 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript
index 0d27639c637..66aa6d8cf13 100644
--- a/src/mongo/db/SConscript
+++ b/src/mongo/db/SConscript
@@ -1655,7 +1655,6 @@ env.Library(
'key_generator.cpp',
'keys_collection_cache.cpp',
'keys_collection_manager.cpp',
- 'logical_clock.cpp',
'logical_time_validator.cpp',
'vector_clock.cpp',
env.Idlc('keys_collection_manager.idl')[0],
@@ -1741,9 +1740,9 @@ env.Library(
)
env.Library(
- target= 'logical_clock_test_fixture',
+ target= 'vector_clock_test_fixture',
source= [
- 'logical_clock_test_fixture.cpp',
+ 'vector_clock_test_fixture.cpp',
],
LIBDEPS= [
'$BUILD_DIR/mongo/db/auth/authmocks',
@@ -2226,7 +2225,6 @@ envWithAsio.CppUnitTest(
'index_builds_coordinator_mongod_test.cpp',
'keypattern_test.cpp',
'keys_collection_document_test.cpp',
- 'logical_clock_test.cpp',
'logical_session_cache_test.cpp',
'logical_session_id_test.cpp',
'logical_time_test.cpp',
@@ -2253,6 +2251,7 @@ envWithAsio.CppUnitTest(
'transaction_participant_test.cpp',
'update_index_data_test.cpp',
'vector_clock_mongod_test.cpp',
+ 'vector_clock_test.cpp',
'write_concern_options_test.cpp',
'error_labels_test.cpp',
env.Idlc('commands_test_example.idl')[0],
@@ -2290,7 +2289,6 @@ envWithAsio.CppUnitTest(
'index_builds_coordinator_mongod',
'keys_collection_client_direct',
'keys_collection_document',
- 'logical_clock_test_fixture',
'logical_session_cache',
'logical_session_cache_impl',
'logical_session_id',
@@ -2331,6 +2329,7 @@ envWithAsio.CppUnitTest(
'transaction',
'update_index_data',
'vector_clock',
+ 'vector_clock_test_fixture',
'write_concern_options',
'write_ops',
],
diff --git a/src/mongo/db/auth/auth_op_observer_test.cpp b/src/mongo/db/auth/auth_op_observer_test.cpp
index 8527a96af52..6069ee02f13 100644
--- a/src/mongo/db/auth/auth_op_observer_test.cpp
+++ b/src/mongo/db/auth/auth_op_observer_test.cpp
@@ -37,7 +37,6 @@
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/keys_collection_client_sharded.h"
#include "mongo/db/keys_collection_manager.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/oplog_interface_local.h"
diff --git a/src/mongo/db/catalog/index_build_block.cpp b/src/mongo/db/catalog/index_build_block.cpp
index cbb504241b3..9fa6361b82b 100644
--- a/src/mongo/db/catalog/index_build_block.cpp
+++ b/src/mongo/db/catalog/index_build_block.cpp
@@ -40,11 +40,11 @@
#include "mongo/db/catalog_raii.h"
#include "mongo/db/db_raii.h"
#include "mongo/db/index/index_descriptor.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/query/collection_query_info.h"
#include "mongo/db/storage/durable_catalog.h"
#include "mongo/db/ttl_collection_cache.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
#include "mongo/util/assert_util.h"
@@ -228,7 +228,7 @@ void IndexBuildBlock::success(OperationContext* opCtx, Collection* collection) {
// timestamp. We use the cluster time since it's guaranteed to be greater than the
// time of the index build. It is possible the cluster time could be in the future,
// and we will need to do another write to reach the minimum visible snapshot.
- commitTime = LogicalClock::getClusterTimeForReplicaSet(svcCtx).asTimestamp();
+ commitTime = VectorClock::getClusterTimeForReplicaSet(svcCtx).asTimestamp();
}
LOGV2(20345,
diff --git a/src/mongo/db/catalog/index_catalog_entry_impl.cpp b/src/mongo/db/catalog/index_catalog_entry_impl.cpp
index d1603408b7c..7c604a98a99 100644
--- a/src/mongo/db/catalog/index_catalog_entry_impl.cpp
+++ b/src/mongo/db/catalog/index_catalog_entry_impl.cpp
@@ -42,7 +42,6 @@
#include "mongo/db/concurrency/write_conflict_exception.h"
#include "mongo/db/index/index_access_method.h"
#include "mongo/db/index/index_descriptor.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/matcher/expression.h"
#include "mongo/db/matcher/expression_parser.h"
#include "mongo/db/multi_key_path_tracker.h"
diff --git a/src/mongo/db/catalog/index_catalog_impl.cpp b/src/mongo/db/catalog/index_catalog_impl.cpp
index d90f7977674..7855f9afb4d 100644
--- a/src/mongo/db/catalog/index_catalog_impl.cpp
+++ b/src/mongo/db/catalog/index_catalog_impl.cpp
@@ -56,7 +56,6 @@
#include "mongo/db/index_names.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/keypattern.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/matcher/expression.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/ops/delete.h"
@@ -74,6 +73,7 @@
#include "mongo/db/storage/storage_engine_init.h"
#include "mongo/db/storage/storage_util.h"
#include "mongo/db/ttl_collection_cache.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
#include "mongo/util/assert_util.h"
#include "mongo/util/fail_point.h"
@@ -1026,7 +1026,7 @@ public:
// a commit timestamp. We use the cluster time since it's guaranteed to be greater
// than the time of the index removal. It is possible the cluster time could be in the
// future, and we will need to do another write to reach the minimum visible snapshot.
- commitTime = LogicalClock::getClusterTimeForReplicaSet(_opCtx).asTimestamp();
+ commitTime = VectorClock::getClusterTimeForReplicaSet(_opCtx).asTimestamp();
}
_entry->setDropped();
_collection->setMinimumVisibleSnapshot(commitTime.get());
diff --git a/src/mongo/db/commands/dbhash.cpp b/src/mongo/db/commands/dbhash.cpp
index ad150d7c116..be9243982ca 100644
--- a/src/mongo/db/commands/dbhash.cpp
+++ b/src/mongo/db/commands/dbhash.cpp
@@ -44,7 +44,6 @@
#include "mongo/db/commands/test_commands_enabled.h"
#include "mongo/db/db_raii.h"
#include "mongo/db/exec/working_set_common.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/query/internal_plans.h"
#include "mongo/db/repl/replication_coordinator.h"
diff --git a/src/mongo/db/commands/drop_indexes.cpp b/src/mongo/db/commands/drop_indexes.cpp
index eebf122c494..b0d2a25e7e6 100644
--- a/src/mongo/db/commands/drop_indexes.cpp
+++ b/src/mongo/db/commands/drop_indexes.cpp
@@ -47,10 +47,10 @@
#include "mongo/db/db_raii.h"
#include "mongo/db/index/index_descriptor.h"
#include "mongo/db/index_builds_coordinator.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/op_observer.h"
#include "mongo/db/service_context.h"
#include "mongo/db/storage/durable_catalog.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/db/views/view_catalog.h"
#include "mongo/logv2/log.h"
#include "mongo/util/exit_code.h"
@@ -262,7 +262,7 @@ public:
// This was also done when dropAllIndexes() committed, but we need to ensure that no one
// tries to read in the intermediate state where all indexes are newer than the current
// snapshot so are unable to be used.
- auto clusterTime = LogicalClock::getClusterTimeForReplicaSet(opCtx).asTimestamp();
+ auto clusterTime = VectorClock::getClusterTimeForReplicaSet(opCtx).asTimestamp();
collection.getWritableCollection()->setMinimumVisibleSnapshot(clusterTime);
collection.commitToCatalog();
diff --git a/src/mongo/db/commands/snapshot_management.cpp b/src/mongo/db/commands/snapshot_management.cpp
index be2e432c243..43e2a07e01a 100644
--- a/src/mongo/db/commands/snapshot_management.cpp
+++ b/src/mongo/db/commands/snapshot_management.cpp
@@ -34,11 +34,11 @@
#include "mongo/db/commands.h"
#include "mongo/db/commands/test_commands_enabled.h"
#include "mongo/db/concurrency/d_concurrency.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/db/service_context.h"
#include "mongo/db/storage/snapshot_manager.h"
+#include "mongo/db/vector_clock.h"
namespace mongo {
class CmdMakeSnapshot final : public BasicCommand {
@@ -77,7 +77,7 @@ public:
Lock::GlobalLock lk(opCtx, MODE_IX);
- auto name = LogicalClock::getClusterTimeForReplicaSet(opCtx).asTimestamp();
+ auto name = VectorClock::getClusterTimeForReplicaSet(opCtx).asTimestamp();
result.append("name", static_cast<long long>(name.asULL()));
return true;
diff --git a/src/mongo/db/key_generator.cpp b/src/mongo/db/key_generator.cpp
index 7c95d210bfa..3e899fd888b 100644
--- a/src/mongo/db/key_generator.cpp
+++ b/src/mongo/db/key_generator.cpp
@@ -33,8 +33,8 @@
#include "mongo/client/read_preference.h"
#include "mongo/db/keys_collection_client.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/operation_context.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/s/client/shard_registry.h"
#include "mongo/util/fail_point.h"
@@ -80,8 +80,8 @@ Status KeyGenerator::generateNewKeysIfNeeded(OperationContext* opCtx) {
return {ErrorCodes::FailPointEnabled, "key generation disabled"};
}
- auto currentTime = LogicalClock::get(opCtx)->getClusterTime();
- auto keyStatus = _client->getNewKeys(opCtx, _purpose, currentTime, false);
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
+ auto keyStatus = _client->getNewKeys(opCtx, _purpose, currentTime.clusterTime(), false);
if (!keyStatus.isOK()) {
return keyStatus.getStatus();
@@ -92,10 +92,10 @@ Status KeyGenerator::generateNewKeysIfNeeded(OperationContext* opCtx) {
LogicalTime currentKeyExpiresAt;
- long long keyId = currentTime.asTimestamp().asLL();
+ long long keyId = currentTime.clusterTime().asTimestamp().asLL();
if (keyIter == newKeys.cend()) {
- currentKeyExpiresAt = addSeconds(currentTime, _keyValidForInterval);
+ currentKeyExpiresAt = addSeconds(currentTime.clusterTime(), _keyValidForInterval);
auto status = insertNewKey(opCtx, _client, keyId, _purpose, currentKeyExpiresAt);
if (!status.isOK()) {
@@ -103,8 +103,8 @@ Status KeyGenerator::generateNewKeysIfNeeded(OperationContext* opCtx) {
}
keyId++;
- } else if (keyIter->getExpiresAt() < currentTime) {
- currentKeyExpiresAt = addSeconds(currentTime, _keyValidForInterval);
+ } else if (keyIter->getExpiresAt() < currentTime.clusterTime()) {
+ currentKeyExpiresAt = addSeconds(currentTime.clusterTime(), _keyValidForInterval);
auto status = insertNewKey(opCtx, _client, keyId, _purpose, currentKeyExpiresAt);
if (!status.isOK()) {
@@ -128,7 +128,7 @@ Status KeyGenerator::generateNewKeysIfNeeded(OperationContext* opCtx) {
if (!status.isOK()) {
return status;
}
- } else if (keyIter->getExpiresAt() < currentTime) {
+ } else if (keyIter->getExpiresAt() < currentTime.clusterTime()) {
currentKeyExpiresAt = addSeconds(currentKeyExpiresAt, _keyValidForInterval);
auto status = insertNewKey(opCtx, _client, keyId, _purpose, currentKeyExpiresAt);
diff --git a/src/mongo/db/keys_collection_client_direct.cpp b/src/mongo/db/keys_collection_client_direct.cpp
index 7b00475749a..2ee8b003bf8 100644
--- a/src/mongo/db/keys_collection_client_direct.cpp
+++ b/src/mongo/db/keys_collection_client_direct.cpp
@@ -41,7 +41,6 @@
#include "mongo/client/read_preference.h"
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/keys_collection_document.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/service_context.h"
diff --git a/src/mongo/db/keys_collection_manager.cpp b/src/mongo/db/keys_collection_manager.cpp
index 75bade8e329..86a95a1a864 100644
--- a/src/mongo/db/keys_collection_manager.cpp
+++ b/src/mongo/db/keys_collection_manager.cpp
@@ -37,10 +37,10 @@
#include "mongo/db/key_generator.h"
#include "mongo/db/keys_collection_cache.h"
#include "mongo/db/keys_collection_client.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/service_context.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
#include "mongo/util/concurrency/idle_thread_block.h"
#include "mongo/util/fail_point.h"
@@ -252,12 +252,12 @@ void KeysCollectionManager::PeriodicRunner::_doPeriodicRefresh(ServiceContext* s
if (latestKeyStatusWith.getStatus().isOK()) {
errorCount = 0;
const auto& latestKey = latestKeyStatusWith.getValue();
- auto currentTime = LogicalClock::get(service)->getClusterTime();
+ const auto currentTime = VectorClock::get(service)->getTime();
_hasSeenKeys.store(true);
nextWakeup = keys_collection_manager_util::howMuchSleepNeedFor(
- currentTime, latestKey.getExpiresAt(), refreshInterval);
+ currentTime.clusterTime(), latestKey.getExpiresAt(), refreshInterval);
} else {
errorCount += 1;
nextWakeup = Milliseconds(kRefreshIntervalIfErrored.count() * errorCount);
diff --git a/src/mongo/db/keys_collection_manager_sharding_test.cpp b/src/mongo/db/keys_collection_manager_sharding_test.cpp
index ba24d2bf03f..dc19e7f5c9e 100644
--- a/src/mongo/db/keys_collection_manager_sharding_test.cpp
+++ b/src/mongo/db/keys_collection_manager_sharding_test.cpp
@@ -381,7 +381,7 @@ TEST(KeysCollectionManagerUtilTest, HowMuchSleepNeededForCalculationDoesNotOverf
auto defaultKeysIntervalSeconds = Seconds(KeysRotationIntervalSec);
// Mock inputs that would have caused an overflow without the changes from SERVER-48709.
- // "currentTime" is the current logical time in the LogicalClock, which will typically be close
+ // "currentTime" is the current clusterTime in the VectorClock, which will typically be close
// to a timestamp constructed from the number of seconds since the unix epoch. "latestExpiredAt"
// is the highest expiration logical time of any key, which will at most be currentTime +
// (default key rotation interval * 2) because two valid keys are kept at a time. "interval" is
diff --git a/src/mongo/db/logical_clock.cpp b/src/mongo/db/logical_clock.cpp
deleted file mode 100644
index 41a7d40b5d2..00000000000
--- a/src/mongo/db/logical_clock.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Copyright (C) 2018-present MongoDB, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the Server Side Public License, version 1,
- * as published by MongoDB, Inc.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * Server Side Public License for more details.
- *
- * You should have received a copy of the Server Side Public License
- * along with this program. If not, see
- * <http://www.mongodb.com/licensing/server-side-public-license>.
- *
- * As a special exception, the copyright holders give permission to link the
- * code of portions of this program with the OpenSSL library under certain
- * conditions as described in each individual source file and distribute
- * linked combinations including the program with the OpenSSL library. You
- * must comply with the Server Side Public License in all respects for
- * all of the code used other than as permitted herein. If you modify file(s)
- * with this exception, you may extend this exception to your version of the
- * file(s), but you are not obligated to do so. If you do not wish to do so,
- * delete this exception statement from your version. If you delete this
- * exception statement from all source files in the program, then also delete
- * it in the license file.
- */
-
-#define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kDefault
-
-#include "mongo/platform/basic.h"
-
-#include "mongo/db/logical_clock.h"
-
-#include "mongo/base/status.h"
-#include "mongo/db/global_settings.h"
-#include "mongo/db/operation_context.h"
-#include "mongo/db/service_context.h"
-#include "mongo/db/time_proof_service.h"
-#include "mongo/db/vector_clock.h"
-#include "mongo/logv2/log.h"
-
-namespace mongo {
-
-namespace {
-const auto getLogicalClock = ServiceContext::declareDecoration<std::unique_ptr<LogicalClock>>();
-} // namespace
-
-LogicalTime LogicalClock::getClusterTimeForReplicaSet(ServiceContext* svcCtx) {
- if (getGlobalReplSettings().usingReplSets()) {
- return get(svcCtx)->getClusterTime();
- }
-
- return {};
-}
-
-LogicalTime LogicalClock::getClusterTimeForReplicaSet(OperationContext* opCtx) {
- return getClusterTimeForReplicaSet(opCtx->getClient()->getServiceContext());
-}
-
-LogicalClock* LogicalClock::get(ServiceContext* service) {
- return getLogicalClock(service).get();
-}
-
-LogicalClock* LogicalClock::get(OperationContext* ctx) {
- return get(ctx->getClient()->getServiceContext());
-}
-
-void LogicalClock::set(ServiceContext* service, std::unique_ptr<LogicalClock> clockArg) {
- auto& clock = getLogicalClock(service);
- clock = std::move(clockArg);
-}
-
-LogicalClock::LogicalClock(ServiceContext* service) : _service(service) {}
-
-LogicalTime LogicalClock::getClusterTime() {
- auto time = VectorClock::get(_service)->getTime();
- return time.clusterTime();
-}
-
-} // namespace mongo
diff --git a/src/mongo/db/logical_clock.h b/src/mongo/db/logical_clock.h
deleted file mode 100644
index 059a9dcdfd6..00000000000
--- a/src/mongo/db/logical_clock.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Copyright (C) 2018-present MongoDB, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the Server Side Public License, version 1,
- * as published by MongoDB, Inc.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * Server Side Public License for more details.
- *
- * You should have received a copy of the Server Side Public License
- * along with this program. If not, see
- * <http://www.mongodb.com/licensing/server-side-public-license>.
- *
- * As a special exception, the copyright holders give permission to link the
- * code of portions of this program with the OpenSSL library under certain
- * conditions as described in each individual source file and distribute
- * linked combinations including the program with the OpenSSL library. You
- * must comply with the Server Side Public License in all respects for
- * all of the code used other than as permitted herein. If you modify file(s)
- * with this exception, you may extend this exception to your version of the
- * file(s), but you are not obligated to do so. If you do not wish to do so,
- * delete this exception statement from your version. If you delete this
- * exception statement from all source files in the program, then also delete
- * it in the license file.
- */
-
-#pragma once
-
-#include "mongo/db/logical_time.h"
-#include "mongo/platform/mutex.h"
-
-namespace mongo {
-class ServiceContext;
-class OperationContext;
-
-
-/**
- * LogicalClock provides a legacy interface to the cluster time, which is now provided by the
- * VectorClock class.
- *
- * TODO SERVER-48433: Remove this legacy LogicalClock interface.
- */
-class LogicalClock {
-public:
- // Decorate ServiceContext with LogicalClock instance.
- static LogicalClock* get(ServiceContext* service);
- static LogicalClock* get(OperationContext* ctx);
- static void set(ServiceContext* service, std::unique_ptr<LogicalClock> logicalClock);
-
- /**
- * Returns the current cluster time if this is a replica set node, otherwise returns a null
- * logical time.
- */
- static LogicalTime getClusterTimeForReplicaSet(ServiceContext* svcCtx);
- static LogicalTime getClusterTimeForReplicaSet(OperationContext* opCtx);
-
- /**
- * Creates an instance of LogicalClock.
- */
- LogicalClock(ServiceContext*);
-
- /**
- * Returns the current clusterTime.
- */
- LogicalTime getClusterTime();
-
-private:
- ServiceContext* const _service;
-};
-
-} // namespace mongo
diff --git a/src/mongo/db/logical_time_validator.cpp b/src/mongo/db/logical_time_validator.cpp
index 3f0e4d9b33b..56abc27ab46 100644
--- a/src/mongo/db/logical_time_validator.cpp
+++ b/src/mongo/db/logical_time_validator.cpp
@@ -52,7 +52,7 @@ namespace {
MONGO_FAIL_POINT_DEFINE(throwClientDisconnectInSignLogicalTimeForExternalClients);
-const auto getLogicalClockValidator =
+const auto getLogicalTimeValidator =
ServiceContext::declareDecoration<std::unique_ptr<LogicalTimeValidator>>();
Mutex validatorMutex; // protects access to decoration instance of LogicalTimeValidator.
@@ -72,7 +72,7 @@ Milliseconds kRefreshIntervalIfErrored(200);
LogicalTimeValidator* LogicalTimeValidator::get(ServiceContext* service) {
stdx::lock_guard<Latch> lk(validatorMutex);
- return getLogicalClockValidator(service).get();
+ return getLogicalTimeValidator(service).get();
}
LogicalTimeValidator* LogicalTimeValidator::get(OperationContext* ctx) {
@@ -82,7 +82,7 @@ LogicalTimeValidator* LogicalTimeValidator::get(OperationContext* ctx) {
void LogicalTimeValidator::set(ServiceContext* service,
std::unique_ptr<LogicalTimeValidator> newValidator) {
stdx::lock_guard<Latch> lk(validatorMutex);
- auto& validator = getLogicalClockValidator(service);
+ auto& validator = getLogicalTimeValidator(service);
validator = std::move(newValidator);
}
diff --git a/src/mongo/db/mongod_main.cpp b/src/mongo/db/mongod_main.cpp
index 74bbc372882..d4a02657b49 100644
--- a/src/mongo/db/mongod_main.cpp
+++ b/src/mongo/db/mongod_main.cpp
@@ -95,7 +95,6 @@
#include "mongo/db/kill_sessions.h"
#include "mongo/db/kill_sessions_local.h"
#include "mongo/db/log_process_details.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_cache.h"
#include "mongo/db/logical_session_cache_factory_mongod.h"
#include "mongo/db/logical_time_metadata_hook.h"
@@ -969,9 +968,6 @@ void setUpReplication(ServiceContext* serviceContext) {
topoCoordOptions.maxSyncSourceLagSecs = Seconds(repl::maxSyncSourceLagSecs);
topoCoordOptions.clusterRole = serverGlobalParams.clusterRole;
- auto logicalClock = std::make_unique<LogicalClock>(serviceContext);
- LogicalClock::set(serviceContext, std::move(logicalClock));
-
auto replCoord = std::make_unique<repl::ReplicationCoordinatorImpl>(
serviceContext,
getGlobalReplSettings(),
diff --git a/src/mongo/db/op_msg_fuzzer.cpp b/src/mongo/db/op_msg_fuzzer.cpp
index b3dad6a5a17..04810109ef8 100644
--- a/src/mongo/db/op_msg_fuzzer.cpp
+++ b/src/mongo/db/op_msg_fuzzer.cpp
@@ -33,7 +33,6 @@
#include "mongo/db/auth/authz_manager_external_state_local.h"
#include "mongo/db/auth/authz_manager_external_state_mock.h"
#include "mongo/db/client.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/repl/repl_client_info.h"
@@ -98,8 +97,6 @@ extern "C" int LLVMFuzzerTestOneInput(const char* Data, size_t Size) {
}
mongo::ServiceContext::UniqueOperationContext opCtx =
serviceContext->makeOperationContext(client.get());
- auto logicalClock = std::make_unique<mongo::LogicalClock>(serviceContext);
- mongo::LogicalClock::set(serviceContext, std::move(logicalClock));
mongo::VectorClockMutable::get(serviceContext)->tickClusterTimeTo(kInMemoryLogicalTime);
int new_size = Size + sizeof(int);
diff --git a/src/mongo/db/op_observer_impl_test.cpp b/src/mongo/db/op_observer_impl_test.cpp
index 51614c4b62e..a802989396c 100644
--- a/src/mongo/db/op_observer_impl_test.cpp
+++ b/src/mongo/db/op_observer_impl_test.cpp
@@ -35,7 +35,6 @@
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/keys_collection_client_sharded.h"
#include "mongo/db/keys_collection_manager.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/op_observer_impl.h"
#include "mongo/db/read_write_concern_defaults.h"
diff --git a/src/mongo/db/pipeline/document_source_change_stream.cpp b/src/mongo/db/pipeline/document_source_change_stream.cpp
index 7a859ccbbd6..b99c8fa6ddb 100644
--- a/src/mongo/db/pipeline/document_source_change_stream.cpp
+++ b/src/mongo/db/pipeline/document_source_change_stream.cpp
@@ -34,7 +34,6 @@
#include "mongo/bson/simple_bsonelement_comparator.h"
#include "mongo/db/bson/bson_helper.h"
#include "mongo/db/commands/feature_compatibility_version_documentation.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/change_stream_constants.h"
#include "mongo/db/pipeline/document_path_support.h"
#include "mongo/db/pipeline/document_source_change_stream_close_cursor.h"
@@ -52,6 +51,7 @@
#include "mongo/db/repl/oplog_entry.h"
#include "mongo/db/repl/oplog_entry_gen.h"
#include "mongo/db/repl/replication_coordinator.h"
+#include "mongo/db/vector_clock.h"
namespace mongo {
@@ -413,7 +413,10 @@ list<intrusive_ptr<DocumentSource>> buildPipeline(const intrusive_ptr<Expression
if (!startFrom) {
const auto currentTime = !expCtx->inMongos
? LogicalTime{replCoord->getMyLastAppliedOpTime().getTimestamp()}
- : LogicalClock::get(expCtx->opCtx)->getClusterTime();
+ : [&] {
+ const auto currentTime = VectorClock::get(expCtx->opCtx)->getTime();
+ return currentTime.clusterTime();
+ }();
startFrom = currentTime.addTicks(1).asTimestamp();
}
diff --git a/src/mongo/db/pipeline/document_source_change_stream_transform.cpp b/src/mongo/db/pipeline/document_source_change_stream_transform.cpp
index c42def9ca86..fd12c8822c3 100644
--- a/src/mongo/db/pipeline/document_source_change_stream_transform.cpp
+++ b/src/mongo/db/pipeline/document_source_change_stream_transform.cpp
@@ -37,7 +37,6 @@
#include "mongo/db/bson/bson_helper.h"
#include "mongo/db/catalog/collection_catalog.h"
#include "mongo/db/commands/feature_compatibility_version_documentation.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/change_stream_constants.h"
#include "mongo/db/pipeline/change_stream_document_diff_parser.h"
#include "mongo/db/pipeline/document_path_support.h"
diff --git a/src/mongo/db/pipeline/expression_context_test.cpp b/src/mongo/db/pipeline/expression_context_test.cpp
index ce304716133..294237c0e49 100644
--- a/src/mongo/db/pipeline/expression_context_test.cpp
+++ b/src/mongo/db/pipeline/expression_context_test.cpp
@@ -30,7 +30,6 @@
#include "mongo/platform/basic.h"
#include "mongo/bson/bsonmisc.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/pipeline/expression_context.h"
@@ -56,8 +55,6 @@ using ExpressionContextTest = ServiceContextTest;
TEST_F(ExpressionContextTest, ExpressionContextSummonsMissingTimeValues) {
auto opCtx = makeOperationContext();
- auto logicalClock = std::make_unique<LogicalClock>(opCtx->getServiceContext());
- LogicalClock::set(opCtx->getServiceContext(), std::move(logicalClock));
auto t1 = VectorClockMutable::get(opCtx->getServiceContext())->tickClusterTime(1);
t1.addTicks(100);
VectorClockMutable::get(opCtx->getServiceContext())->tickClusterTimeTo(t1);
diff --git a/src/mongo/db/pipeline/sharded_agg_helpers.cpp b/src/mongo/db/pipeline/sharded_agg_helpers.cpp
index e4275b4a3d9..0639e63ab61 100644
--- a/src/mongo/db/pipeline/sharded_agg_helpers.cpp
+++ b/src/mongo/db/pipeline/sharded_agg_helpers.cpp
@@ -33,7 +33,6 @@
#include "sharded_agg_helpers.h"
#include "mongo/db/curop.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/document_source.h"
#include "mongo/db/pipeline/document_source_change_stream.h"
#include "mongo/db/pipeline/document_source_group.h"
@@ -48,6 +47,7 @@
#include "mongo/db/pipeline/document_source_unwind.h"
#include "mongo/db/pipeline/lite_parsed_pipeline.h"
#include "mongo/db/pipeline/semantic_analysis.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
#include "mongo/rpc/get_status_from_command_result.h"
#include "mongo/s/catalog/type_shard.h"
@@ -845,7 +845,8 @@ DispatchShardPipelineResults dispatchShardPipeline(
// if there was only one shard in the cluster when the command began execution. If a shard was
// added since the earlier targeting logic ran, then refreshing here may cause us to illegally
// target an unsplit pipeline to more than one shard.
- auto shardRegistryReloadTime = LogicalClock::get(opCtx)->getClusterTime().asTimestamp();
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
+ auto shardRegistryReloadTime = currentTime.clusterTime().asTimestamp();
if (hasChangeStream) {
auto* shardRegistry = Grid::get(opCtx)->shardRegistry();
if (!shardRegistry->reload(opCtx)) {
diff --git a/src/mongo/db/pipeline/variables.cpp b/src/mongo/db/pipeline/variables.cpp
index 28d8e135271..353e3645568 100644
--- a/src/mongo/db/pipeline/variables.cpp
+++ b/src/mongo/db/pipeline/variables.cpp
@@ -30,9 +30,9 @@
#include "mongo/db/pipeline/variables.h"
#include "mongo/bson/bsonobj.h"
#include "mongo/db/client.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/expression.h"
#include "mongo/db/pipeline/variable_validation.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/platform/basic.h"
#include "mongo/platform/random.h"
#include "mongo/util/str.h"
@@ -224,10 +224,10 @@ RuntimeConstants Variables::generateRuntimeConstants(OperationContext* opCtx) {
// logical clock is available, set the clusterTime in the runtime constants. Otherwise, the
// clusterTime is set to the null Timestamp.
if (opCtx->getClient()) {
- if (auto logicalClock = LogicalClock::get(opCtx); logicalClock) {
- auto clusterTime = logicalClock->getClusterTime();
- if (clusterTime != LogicalTime::kUninitialized) {
- return {Date_t::now(), clusterTime.asTimestamp()};
+ if (const auto vectorClock = VectorClock::get(opCtx)) {
+ const auto now = vectorClock->getTime();
+ if (now.clusterTime() != LogicalTime::kUninitialized) {
+ return {Date_t::now(), now.clusterTime().asTimestamp()};
}
}
}
diff --git a/src/mongo/db/read_concern_mongod.cpp b/src/mongo/db/read_concern_mongod.cpp
index 30b76024344..f9eba2ad488 100644
--- a/src/mongo/db/read_concern_mongod.cpp
+++ b/src/mongo/db/read_concern_mongod.cpp
@@ -34,7 +34,6 @@
#include "mongo/db/catalog_raii.h"
#include "mongo/db/concurrency/write_conflict_exception.h"
#include "mongo/db/curop_failpoint_helpers.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/op_observer.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/read_concern.h"
@@ -45,6 +44,7 @@
#include "mongo/db/s/sharding_state.h"
#include "mongo/db/server_options.h"
#include "mongo/db/storage/recovery_unit.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
#include "mongo/s/grid.h"
#include "mongo/util/concurrency/notification.h"
@@ -334,14 +334,14 @@ Status waitForReadConcernImpl(OperationContext* opCtx,
<< " readConcern without replication enabled"};
}
- auto currentTime = LogicalClock::get(opCtx)->getClusterTime();
- if (currentTime < *targetClusterTime) {
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
+ if (currentTime.clusterTime() < *targetClusterTime) {
return {ErrorCodes::InvalidOptions,
str::stream() << "readConcern " << readConcernName
<< " value must not be greater than the current clusterTime. "
"Requested clusterTime: "
- << targetClusterTime->toString()
- << "; current clusterTime: " << currentTime.toString()};
+ << targetClusterTime->toString() << "; current clusterTime: "
+ << currentTime.clusterTime().toString()};
}
auto status = makeNoopWriteIfNeeded(opCtx, *targetClusterTime);
diff --git a/src/mongo/db/read_write_concern_defaults.cpp b/src/mongo/db/read_write_concern_defaults.cpp
index 5e675f6d627..ec9d9cb8625 100644
--- a/src/mongo/db/read_write_concern_defaults.cpp
+++ b/src/mongo/db/read_write_concern_defaults.cpp
@@ -33,7 +33,7 @@
#include "mongo/db/read_write_concern_defaults.h"
-#include "mongo/db/logical_clock.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
namespace mongo {
@@ -119,7 +119,8 @@ RWConcernDefault ReadWriteConcernDefaults::generateNewConcerns(
}
auto* const serviceContext = opCtx->getServiceContext();
- rwc.setUpdateOpTime(LogicalClock::get(serviceContext)->getClusterTime().asTimestamp());
+ const auto currentTime = VectorClock::get(serviceContext)->getTime();
+ rwc.setUpdateOpTime(currentTime.clusterTime().asTimestamp());
rwc.setUpdateWallClockTime(serviceContext->getFastClockSource()->now());
auto current = _getDefault(opCtx);
diff --git a/src/mongo/db/read_write_concern_defaults_test.cpp b/src/mongo/db/read_write_concern_defaults_test.cpp
index b17aabda3ad..c07de0e93f0 100644
--- a/src/mongo/db/read_write_concern_defaults_test.cpp
+++ b/src/mongo/db/read_write_concern_defaults_test.cpp
@@ -29,13 +29,12 @@
#include "mongo/platform/basic.h"
-#include "mongo/db/logical_clock.h"
-#include "mongo/db/logical_clock_test_fixture.h"
#include "mongo/db/read_write_concern_defaults.h"
#include "mongo/db/read_write_concern_defaults_cache_lookup_mock.h"
#include "mongo/db/repl/optime.h"
#include "mongo/db/service_context_test_fixture.h"
#include "mongo/db/vector_clock_mutable.h"
+#include "mongo/db/vector_clock_test_fixture.h"
#include "mongo/util/clock_source_mock.h"
namespace mongo {
@@ -252,7 +251,7 @@ TEST_F(ReadWriteConcernDefaultsTest, TestRefreshDefaultsWithLowerEpoch) {
* ReadWriteConcernDefaults::generateNewConcerns() uses the current clusterTime and wall clock time
* (for epoch and setTime/localSetTime), so testing it requires a fixture with a logical clock.
*/
-class ReadWriteConcernDefaultsTestWithClusterTime : public LogicalClockTestFixture {
+class ReadWriteConcernDefaultsTestWithClusterTime : public VectorClockTestFixture {
public:
virtual ~ReadWriteConcernDefaultsTestWithClusterTime() {
_rwcd.invalidate();
diff --git a/src/mongo/db/repair.cpp b/src/mongo/db/repair.cpp
index 1ef573f0b45..770b3866dc1 100644
--- a/src/mongo/db/repair.cpp
+++ b/src/mongo/db/repair.cpp
@@ -52,7 +52,6 @@
#include "mongo/db/db_raii.h"
#include "mongo/db/index/index_descriptor.h"
#include "mongo/db/index_builds_coordinator.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/query/query_knobs_gen.h"
#include "mongo/db/rebuild_indexes.h"
@@ -61,6 +60,7 @@
#include "mongo/db/storage/storage_engine.h"
#include "mongo/db/storage/storage_repair_observer.h"
#include "mongo/db/storage/storage_util.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
#include "mongo/util/scopeguard.h"
@@ -170,7 +170,7 @@ Status repairDatabase(OperationContext* opCtx, StorageEngine* engine, const std:
// Set the minimum snapshot for all Collections in this db. This ensures that readers
// using majority readConcern level can only use the collections after their repaired
// versions are in the committed view.
- auto clusterTime = LogicalClock::getClusterTimeForReplicaSet(opCtx).asTimestamp();
+ auto clusterTime = VectorClock::getClusterTimeForReplicaSet(opCtx).asTimestamp();
for (auto collIt = db->begin(opCtx); collIt != db->end(opCtx); ++collIt) {
auto collection =
diff --git a/src/mongo/db/repl/oplog_fetcher_test.cpp b/src/mongo/db/repl/oplog_fetcher_test.cpp
index 5cd3e456eb5..932b7da8e37 100644
--- a/src/mongo/db/repl/oplog_fetcher_test.cpp
+++ b/src/mongo/db/repl/oplog_fetcher_test.cpp
@@ -29,13 +29,13 @@
#include <memory>
-#include "mongo/db/logical_clock.h"
#include "mongo/db/repl/data_replicator_external_state_mock.h"
#include "mongo/db/repl/oplog_fetcher.h"
#include "mongo/db/repl/repl_server_parameters_gen.h"
#include "mongo/db/repl/task_executor_mock.h"
#include "mongo/db/service_context_test_fixture.h"
#include "mongo/db/signed_logical_time.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/dbtests/mock/mock_dbclient_connection.h"
#include "mongo/executor/thread_pool_task_executor_test_fixture.h"
#include "mongo/rpc/metadata.h"
@@ -394,11 +394,6 @@ void OplogFetcherTest::setUp() {
// Always enable oplogFetcherUsesExhaust at the beginning of each unittest in case some
// unittests disable it in the test.
oplogFetcherUsesExhaust = true;
-
- // Set up a logical clock.
- auto service = getGlobalServiceContext();
- auto logicalClock = std::make_unique<LogicalClock>(service);
- LogicalClock::set(service, std::move(logicalClock));
}
std::unique_ptr<OplogFetcher> OplogFetcherTest::makeOplogFetcher() {
@@ -2284,7 +2279,7 @@ TEST_F(OplogFetcherTest, GetMoreEmptyBatch) {
TEST_F(OplogFetcherTest, HandleLogicalTimeMetaDataAndAdvanceClusterTime) {
auto firstEntry = makeNoopOplogEntry(lastFetched);
- auto oldClusterTime = LogicalClock::get(getGlobalServiceContext())->getClusterTime();
+ const auto oldTime = VectorClock::get(getGlobalServiceContext())->getTime();
auto logicalTime = LogicalTime(Timestamp(123456, 78));
auto signedTime = SignedLogicalTime(logicalTime, TimeProofService::TimeProof(), 0);
@@ -2309,9 +2304,9 @@ TEST_F(OplogFetcherTest, HandleLogicalTimeMetaDataAndAdvanceClusterTime) {
ASSERT_OK(processSingleBatch(makeFirstBatch(0LL, {firstEntry}, metadataObj))->getStatus());
// Test that the cluster time is updated to the cluster time in the metadata.
- auto currentClusterTime = LogicalClock::get(getGlobalServiceContext())->getClusterTime();
- ASSERT_EQ(currentClusterTime, logicalTime);
- ASSERT_NE(oldClusterTime, logicalTime);
+ const auto currentTime = VectorClock::get(getGlobalServiceContext())->getTime();
+ ASSERT_EQ(currentTime.clusterTime(), logicalTime);
+ ASSERT_NE(oldTime.clusterTime(), logicalTime);
}
TEST_F(OplogFetcherTest, CheckFindCommandIncludesFilter) {
diff --git a/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp b/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp
index 08fe07b0ed2..8e2badd998f 100644
--- a/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp
+++ b/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp
@@ -56,7 +56,6 @@
#include "mongo/db/index_builds_coordinator.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/kill_sessions_local.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time_metadata_hook.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/op_observer.h"
@@ -93,6 +92,7 @@
#include "mongo/db/storage/flow_control.h"
#include "mongo/db/storage/storage_engine.h"
#include "mongo/db/system_index.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/executor/network_connection_hook.h"
#include "mongo/executor/network_interface.h"
#include "mongo/executor/network_interface_factory.h"
@@ -710,7 +710,8 @@ void ReplicationCoordinatorExternalStateImpl::setGlobalTimestamp(ServiceContext*
}
Timestamp ReplicationCoordinatorExternalStateImpl::getGlobalTimestamp(ServiceContext* service) {
- return LogicalClock::get(service)->getClusterTime().asTimestamp();
+ const auto currentTime = VectorClock::get(service)->getTime();
+ return currentTime.clusterTime().asTimestamp();
}
bool ReplicationCoordinatorExternalStateImpl::oplogExists(OperationContext* opCtx) {
diff --git a/src/mongo/db/repl/replication_coordinator_test_fixture.cpp b/src/mongo/db/repl/replication_coordinator_test_fixture.cpp
index 1d34e556e2f..ca22749ea91 100644
--- a/src/mongo/db/repl/replication_coordinator_test_fixture.cpp
+++ b/src/mongo/db/repl/replication_coordinator_test_fixture.cpp
@@ -36,7 +36,6 @@
#include <functional>
#include <memory>
-#include "mongo/db/logical_clock.h"
#include "mongo/db/repl/is_master_response.h"
#include "mongo/db/repl/repl_set_heartbeat_args_v1.h"
#include "mongo/db/repl/repl_settings.h"
@@ -129,9 +128,6 @@ void ReplCoordTest::init() {
// PRNG seed for tests.
const int64_t seed = 0;
- auto logicalClock = std::make_unique<LogicalClock>(service);
- LogicalClock::set(service, std::move(logicalClock));
-
TopologyCoordinator::Options settings;
auto topo = std::make_unique<TopologyCoordinator>(settings);
_topo = topo.get();
diff --git a/src/mongo/db/repl/storage_interface_impl.cpp b/src/mongo/db/repl/storage_interface_impl.cpp
index ec13845dce4..f9b6945b259 100644
--- a/src/mongo/db/repl/storage_interface_impl.cpp
+++ b/src/mongo/db/repl/storage_interface_impl.cpp
@@ -61,7 +61,6 @@
#include "mongo/db/exec/working_set_common.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/keypattern.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/matcher/extensions_callback_real.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/ops/delete_request_gen.h"
diff --git a/src/mongo/db/s/config/initial_split_policy.cpp b/src/mongo/db/s/config/initial_split_policy.cpp
index 36c0f1bf15b..60c719d521d 100644
--- a/src/mongo/db/s/config/initial_split_policy.cpp
+++ b/src/mongo/db/s/config/initial_split_policy.cpp
@@ -34,8 +34,8 @@
#include "mongo/db/s/config/initial_split_policy.h"
#include "mongo/client/read_preference.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/sharded_agg_helpers.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/s/balancer_configuration.h"
#include "mongo/s/catalog/type_shard.h"
#include "mongo/s/grid.h"
@@ -273,11 +273,12 @@ InitialSplitPolicy::ShardCollectionConfig SingleChunkOnPrimarySplitPolicy::creat
ShardCollectionConfig initialChunks;
ChunkVersion version(1, 0, OID::gen());
const auto& keyPattern = shardKeyPattern.getKeyPattern();
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
appendChunk(params.nss,
keyPattern.globalMin(),
keyPattern.globalMax(),
&version,
- LogicalClock::get(opCtx)->getClusterTime().asTimestamp(),
+ currentTime.clusterTime().asTimestamp(),
params.primaryShardId,
&initialChunks.chunks);
return initialChunks;
@@ -301,14 +302,14 @@ InitialSplitPolicy::ShardCollectionConfig UnoptimizedSplitPolicy::createFirstChu
shardKeyPattern.getKeyPattern().globalMax()),
balancerConfig->getMaxChunkSizeBytes(),
0));
- return generateShardCollectionInitialChunks(
- params.nss,
- shardKeyPattern,
- params.primaryShardId,
- LogicalClock::get(opCtx)->getClusterTime().asTimestamp(),
- shardSelectedSplitPoints,
- shardIds,
- 1 // numContiguousChunksPerShard
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
+ return generateShardCollectionInitialChunks(params.nss,
+ shardKeyPattern,
+ params.primaryShardId,
+ currentTime.clusterTime().asTimestamp(),
+ shardSelectedSplitPoints,
+ shardIds,
+ 1 // numContiguousChunksPerShard
);
}
@@ -321,14 +322,14 @@ InitialSplitPolicy::ShardCollectionConfig SplitPointsBasedSplitPolicy::createFir
std::vector<ShardId> shardIds;
shardRegistry->getAllShardIdsNoReload(&shardIds);
- return generateShardCollectionInitialChunks(
- params.nss,
- shardKeyPattern,
- params.primaryShardId,
- LogicalClock::get(opCtx)->getClusterTime().asTimestamp(),
- _splitPoints,
- shardIds,
- _numContiguousChunksPerShard);
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
+ return generateShardCollectionInitialChunks(params.nss,
+ shardKeyPattern,
+ params.primaryShardId,
+ currentTime.clusterTime().asTimestamp(),
+ _splitPoints,
+ shardIds,
+ _numContiguousChunksPerShard);
}
AbstractTagsBasedSplitPolicy::AbstractTagsBasedSplitPolicy(OperationContext* opCtx,
@@ -356,7 +357,8 @@ InitialSplitPolicy::ShardCollectionConfig AbstractTagsBasedSplitPolicy::createFi
std::vector<ShardId> shardIds;
shardRegistry->getAllShardIdsNoReload(&shardIds);
- const auto validAfter = LogicalClock::get(opCtx)->getClusterTime().asTimestamp();
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
+ const auto validAfter = currentTime.clusterTime().asTimestamp();
const auto& keyPattern = shardKeyPattern.getKeyPattern();
auto tagToShards = getTagsToShardIds();
@@ -667,12 +669,13 @@ ReshardingSplitPolicy::ReshardingSplitPolicy(OperationContext* opCtx,
InitialSplitPolicy::ShardCollectionConfig ReshardingSplitPolicy::createFirstChunks(
OperationContext* opCtx, const ShardKeyPattern& shardKeyPattern, SplitPolicyParams params) {
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
return createChunks(shardKeyPattern,
params,
_numContiguousChunksPerShard,
_recipientShardIds,
_splitPoints,
- LogicalClock::get(opCtx)->getClusterTime().asTimestamp());
+ currentTime.clusterTime().asTimestamp());
}
} // namespace mongo
diff --git a/src/mongo/db/s/config/initial_split_policy_test.cpp b/src/mongo/db/s/config/initial_split_policy_test.cpp
index a8702c81606..b974830f7f5 100644
--- a/src/mongo/db/s/config/initial_split_policy_test.cpp
+++ b/src/mongo/db/s/config/initial_split_policy_test.cpp
@@ -32,9 +32,9 @@
#include "mongo/platform/basic.h"
#include "mongo/bson/json.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/s/config/config_server_test_fixture.h"
#include "mongo/db/s/config/initial_split_policy.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/s/catalog/type_shard.h"
#include "mongo/s/catalog/type_tags.h"
#include "mongo/unittest/unittest.h"
@@ -331,10 +331,9 @@ public:
const auto shardCollectionConfig =
splitPolicy.createFirstChunks(opCtx, shardKeyPattern, {});
- const std::vector<ChunkType> expectedChunks =
- makeChunks(expectedChunkRanges,
- expectedShardIds,
- LogicalClock::get(opCtx)->getClusterTime().asTimestamp());
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
+ const std::vector<ChunkType> expectedChunks = makeChunks(
+ expectedChunkRanges, expectedShardIds, currentTime.clusterTime().asTimestamp());
assertChunkVectorsAreEqual(expectedChunks, shardCollectionConfig.chunks);
}
@@ -582,10 +581,9 @@ public:
const auto shardCollectionConfig =
splitPolicy.createFirstChunks(operationContext(), shardKeyPattern, {});
- const std::vector<ChunkType> expectedChunks =
- makeChunks(expectedChunkRanges,
- expectedShardIds,
- LogicalClock::get(operationContext())->getClusterTime().asTimestamp());
+ const auto currentTime = VectorClock::get(operationContext())->getTime();
+ const std::vector<ChunkType> expectedChunks = makeChunks(
+ expectedChunkRanges, expectedShardIds, currentTime.clusterTime().asTimestamp());
assertChunkVectorsAreEqual(expectedChunks, shardCollectionConfig.chunks);
}
};
diff --git a/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp b/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp
index 01aedaceb5e..23b6688bf9e 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp
@@ -48,7 +48,6 @@
#include "mongo/db/catalog/collection_options.h"
#include "mongo/db/client.h"
#include "mongo/db/commands.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_cache.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_context.h"
diff --git a/src/mongo/db/s/merge_chunks_command.cpp b/src/mongo/db/s/merge_chunks_command.cpp
index 7dd1cb1f20d..0eb7a19ac65 100644
--- a/src/mongo/db/s/merge_chunks_command.cpp
+++ b/src/mongo/db/s/merge_chunks_command.cpp
@@ -37,11 +37,11 @@
#include "mongo/db/catalog_raii.h"
#include "mongo/db/commands.h"
#include "mongo/db/field_parser.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/s/collection_sharding_runtime.h"
#include "mongo/db/s/shard_filtering_metadata_refresh.h"
#include "mongo/db/s/sharding_state.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/logv2/log.h"
#include "mongo/s/catalog/type_chunk.h"
#include "mongo/s/client/shard_registry.h"
@@ -196,11 +196,12 @@ void mergeChunks(OperationContext* opCtx,
//
// Run _configsvrCommitChunkMerge.
//
+ const auto currentTime = VectorClock::get(opCtx)->getTime();
MergeChunkRequest request{nss,
shardingState->shardId().toString(),
epoch,
chunkBoundaries,
- LogicalClock::get(opCtx)->getClusterTime().asTimestamp()};
+ currentTime.clusterTime().asTimestamp()};
auto configCmdObj =
request.toConfigCommandBSON(ShardingCatalogClient::kMajorityWriteConcern.toBSON());
diff --git a/src/mongo/db/s/migration_source_manager.cpp b/src/mongo/db/s/migration_source_manager.cpp
index 07f8f94daf9..caca00e850f 100644
--- a/src/mongo/db/s/migration_source_manager.cpp
+++ b/src/mongo/db/s/migration_source_manager.cpp
@@ -36,7 +36,6 @@
#include "mongo/bson/bsonobjbuilder.h"
#include "mongo/db/catalog_raii.h"
#include "mongo/db/concurrency/write_conflict_exception.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_cache.h"
#include "mongo/db/logical_session_id_helpers.h"
#include "mongo/db/op_observer.h"
@@ -53,6 +52,7 @@
#include "mongo/db/s/sharding_state.h"
#include "mongo/db/s/sharding_state_recovery.h"
#include "mongo/db/s/sharding_statistics.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/executor/task_executor.h"
#include "mongo/executor/task_executor_pool.h"
#include "mongo/logv2/log.h"
@@ -408,14 +408,14 @@ Status MigrationSourceManager::commitChunkMetadataOnConfig() {
migratedChunkType.setMax(_args.getMaxKey());
migratedChunkType.setVersion(_chunkVersion);
- CommitChunkMigrationRequest::appendAsCommand(
- &builder,
- getNss(),
- _args.getFromShardId(),
- _args.getToShardId(),
- migratedChunkType,
- metadata.getCollVersion(),
- LogicalClock::get(_opCtx)->getClusterTime().asTimestamp());
+ const auto currentTime = VectorClock::get(_opCtx)->getTime();
+ CommitChunkMigrationRequest::appendAsCommand(&builder,
+ getNss(),
+ _args.getFromShardId(),
+ _args.getToShardId(),
+ migratedChunkType,
+ metadata.getCollVersion(),
+ currentTime.clusterTime().asTimestamp());
builder.append(kWriteConcernField, kMajorityWriteConcern.toBSON());
}
diff --git a/src/mongo/db/s/shardsvr_shard_collection.cpp b/src/mongo/db/s/shardsvr_shard_collection.cpp
index 7488d687790..a311110cc98 100644
--- a/src/mongo/db/s/shardsvr_shard_collection.cpp
+++ b/src/mongo/db/s/shardsvr_shard_collection.cpp
@@ -41,7 +41,6 @@
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/hasher.h"
#include "mongo/db/index/index_descriptor.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/query/collation/collator_factory_interface.h"
#include "mongo/db/s/active_shard_collection_registry.h"
diff --git a/src/mongo/db/service_context_d_test_fixture.cpp b/src/mongo/db/service_context_d_test_fixture.cpp
index 08192fd53fb..9c23bcbabda 100644
--- a/src/mongo/db/service_context_d_test_fixture.cpp
+++ b/src/mongo/db/service_context_d_test_fixture.cpp
@@ -43,7 +43,6 @@
#include "mongo/db/concurrency/d_concurrency.h"
#include "mongo/db/index/index_access_method_factory_impl.h"
#include "mongo/db/index_builds_coordinator_mongod.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/op_observer_registry.h"
#include "mongo/db/s/collection_sharding_state_factory_shard.h"
#include "mongo/db/service_entry_point_mongod.h"
@@ -83,8 +82,6 @@ ServiceContextMongoDTest::ServiceContextMongoDTest(std::string engine, RepairAct
auto const serviceContext = getServiceContext();
serviceContext->setServiceEntryPoint(std::make_unique<ServiceEntryPointMongod>(serviceContext));
- auto logicalClock = std::make_unique<LogicalClock>(serviceContext);
- LogicalClock::set(serviceContext, std::move(logicalClock));
// Set up the periodic runner to allow background job execution for tests that require it.
auto runner = makePeriodicRunner(getServiceContext());
diff --git a/src/mongo/db/service_entry_point_common.cpp b/src/mongo/db/service_entry_point_common.cpp
index 77dda9f44a5..b9210ccc995 100644
--- a/src/mongo/db/service_entry_point_common.cpp
+++ b/src/mongo/db/service_entry_point_common.cpp
@@ -57,7 +57,6 @@
#include "mongo/db/introspect.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/lasterror.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_id.h"
#include "mongo/db/logical_session_id_helpers.h"
#include "mongo/db/logical_time_validator.h"
diff --git a/src/mongo/db/service_liaison.cpp b/src/mongo/db/service_liaison.cpp
index 85d2acbd39a..8f370ccd1bc 100644
--- a/src/mongo/db/service_liaison.cpp
+++ b/src/mongo/db/service_liaison.cpp
@@ -31,7 +31,6 @@
#include "mongo/db/service_liaison.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/service_context.h"
namespace mongo {
diff --git a/src/mongo/db/storage/storage_engine_impl.cpp b/src/mongo/db/storage/storage_engine_impl.cpp
index 22c82a09eba..cf4d17f3f1d 100644
--- a/src/mongo/db/storage/storage_engine_impl.cpp
+++ b/src/mongo/db/storage/storage_engine_impl.cpp
@@ -39,7 +39,6 @@
#include "mongo/db/client.h"
#include "mongo/db/concurrency/d_concurrency.h"
#include "mongo/db/index_builds_coordinator.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/operation_context_noop.h"
#include "mongo/db/server_options.h"
#include "mongo/db/storage/durable_catalog_feature_tracker.h"
diff --git a/src/mongo/db/update/object_replace_executor_test.cpp b/src/mongo/db/update/object_replace_executor_test.cpp
index 0f7adf40df5..811c8eb0e06 100644
--- a/src/mongo/db/update/object_replace_executor_test.cpp
+++ b/src/mongo/db/update/object_replace_executor_test.cpp
@@ -34,7 +34,6 @@
#include "mongo/bson/mutable/algorithm.h"
#include "mongo/bson/mutable/mutable_bson_test_utils.h"
#include "mongo/db/json.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/update/update_node_test_fixture.h"
#include "mongo/unittest/unittest.h"
diff --git a/src/mongo/db/update/pipeline_executor_test.cpp b/src/mongo/db/update/pipeline_executor_test.cpp
index e1dfaf40fd8..496b99ef3ce 100644
--- a/src/mongo/db/update/pipeline_executor_test.cpp
+++ b/src/mongo/db/update/pipeline_executor_test.cpp
@@ -35,7 +35,6 @@
#include "mongo/bson/mutable/mutable_bson_test_utils.h"
#include "mongo/db/exec/document_value/document_value_test_util.h"
#include "mongo/db/json.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/expression_context_for_test.h"
#include "mongo/db/query/query_knobs_gen.h"
#include "mongo/db/update/update_node_test_fixture.h"
diff --git a/src/mongo/db/update/update_node_test_fixture.h b/src/mongo/db/update/update_node_test_fixture.h
index aaa72fe2545..b9c27ed8bc0 100644
--- a/src/mongo/db/update/update_node_test_fixture.h
+++ b/src/mongo/db/update/update_node_test_fixture.h
@@ -29,7 +29,6 @@
#pragma once
-#include "mongo/db/logical_clock.h"
#include "mongo/db/service_context.h"
#include "mongo/db/service_context_test_fixture.h"
#include "mongo/db/update/update_node.h"
@@ -69,11 +68,6 @@ protected:
void setUp() override {
resetApplyParams();
-
- // Set up the logical clock needed by CurrentDateNode and ObjectReplaceExecutor.
- auto service = mongo::getGlobalServiceContext();
- auto logicalClock = std::make_unique<mongo::LogicalClock>(service);
- mongo::LogicalClock::set(service, std::move(logicalClock));
}
virtual void resetApplyParams() {
diff --git a/src/mongo/db/vector_clock.cpp b/src/mongo/db/vector_clock.cpp
index ba65d0acaa9..abbc490d586 100644
--- a/src/mongo/db/vector_clock.cpp
+++ b/src/mongo/db/vector_clock.cpp
@@ -33,6 +33,7 @@
#include "mongo/bson/util/bson_extract.h"
#include "mongo/db/auth/authorization_session.h"
+#include "mongo/db/global_settings.h"
#include "mongo/db/logical_clock_gen.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/vector_clock_document_gen.h"
@@ -79,6 +80,18 @@ VectorClock::VectorTime VectorClock::getTime() const {
return VectorTime(_vectorTime);
}
+LogicalTime VectorClock::getClusterTimeForReplicaSet(ServiceContext* svcCtx) {
+ if (getGlobalReplSettings().usingReplSets()) {
+ auto now = get(svcCtx)->getTime();
+ return now.clusterTime();
+ }
+ return {};
+}
+
+LogicalTime VectorClock::getClusterTimeForReplicaSet(OperationContext* opCtx) {
+ return getClusterTimeForReplicaSet(opCtx->getClient()->getServiceContext());
+}
+
bool VectorClock::_lessThanOrEqualToMaxPossibleTime(LogicalTime time, uint64_t nTicks) {
return time.asTimestamp().getSecs() <= kMaxValue &&
time.asTimestamp().getInc() <= (kMaxValue - nTicks);
diff --git a/src/mongo/db/vector_clock.h b/src/mongo/db/vector_clock.h
index 9cf544a06c0..b33151f3a3e 100644
--- a/src/mongo/db/vector_clock.h
+++ b/src/mongo/db/vector_clock.h
@@ -136,6 +136,13 @@ public:
VectorTime getTime() const;
/**
+ * Returns the current cluster time if this is a replica set node, otherwise returns a null
+ * logical time.
+ */
+ static LogicalTime getClusterTimeForReplicaSet(ServiceContext* svcCtx);
+ static LogicalTime getClusterTimeForReplicaSet(OperationContext* opCtx);
+
+ /**
* Adds the necessary fields to outMessage to gossip the current time to another node, taking
* into account if the gossiping is to an internal or external client (based on the session
* tags). Returns true if the ClusterTime was output into outMessage, or false otherwise.
diff --git a/src/mongo/db/logical_clock_test.cpp b/src/mongo/db/vector_clock_test.cpp
index af475c5439e..b889f463e7d 100644
--- a/src/mongo/db/logical_clock_test.cpp
+++ b/src/mongo/db/vector_clock_test.cpp
@@ -36,12 +36,11 @@
#include "mongo/bson/bsonobj.h"
#include "mongo/bson/timestamp.h"
#include "mongo/db/dbdirectclient.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_clock_gen.h"
-#include "mongo/db/logical_clock_test_fixture.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/repl/replication_coordinator_mock.h"
#include "mongo/db/vector_clock_mutable.h"
+#include "mongo/db/vector_clock_test_fixture.h"
#include "mongo/unittest/unittest.h"
#include "mongo/util/clock_source_mock.h"
@@ -50,7 +49,7 @@ namespace {
const NamespaceString kDummyNamespaceString("test", "foo");
-using LogicalClockTest = LogicalClockTestFixture;
+using VectorClockTest = VectorClockTestFixture;
constexpr unsigned maxVal = std::numeric_limits<int32_t>::max();
@@ -58,24 +57,24 @@ LogicalTime buildLogicalTime(unsigned secs, unsigned inc) {
return LogicalTime(Timestamp(secs, inc));
}
-// Check that the initial time does not change during logicalClock creation.
-TEST_F(LogicalClockTest, roundtrip) {
+// Check that the initial time does not change during VectorClock creation.
+TEST_F(VectorClockTest, roundtrip) {
Timestamp tX(1);
auto time = LogicalTime(tX);
VectorClockMutable::get(getServiceContext())->tickClusterTimeTo(time);
- auto storedTime(getClock()->getClusterTime());
+ auto storedTime(getClusterTime());
ASSERT_TRUE(storedTime == time);
}
// Verify the reserve ticks functionality.
-TEST_F(LogicalClockTest, reserveTicks) {
+TEST_F(VectorClockTest, reserveTicks) {
// Set clock to a non-zero time, so we can verify wall clock synchronization.
setMockClockSourceTime(Date_t::fromMillisSinceEpoch(10 * 1000));
auto t1 = VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
- auto t2(getClock()->getClusterTime());
+ auto t2(getClusterTime());
ASSERT_TRUE(t1 == t2);
// Make sure we synchronized with the wall clock.
@@ -94,22 +93,22 @@ TEST_F(LogicalClockTest, reserveTicks) {
ASSERT_TRUE(t3 == t1);
// Ensure overflow to a new second.
- auto initTimeSecs = getClock()->getClusterTime().asTimestamp().getSecs();
+ auto initTimeSecs = getClusterTime().asTimestamp().getSecs();
VectorClockMutable::get(getServiceContext())->tickClusterTime((1U << 31) - 1);
- auto newTimeSecs = getClock()->getClusterTime().asTimestamp().getSecs();
+ auto newTimeSecs = getClusterTime().asTimestamp().getSecs();
ASSERT_TRUE(newTimeSecs == initTimeSecs + 1);
}
// Verify the advanceClusterTime functionality.
-TEST_F(LogicalClockTest, advanceClusterTime) {
+TEST_F(VectorClockTest, advanceClusterTime) {
auto t1 = VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
t1.addTicks(100);
advanceClusterTime(t1);
- ASSERT_TRUE(t1 == getClock()->getClusterTime());
+ ASSERT_TRUE(t1 == getClusterTime());
}
// Verify rate limiter rejects cluster times whose seconds values are too far ahead.
-TEST_F(LogicalClockTest, RateLimiterRejectsLogicalTimesTooFarAhead) {
+TEST_F(VectorClockTest, RateLimiterRejectsLogicalTimesTooFarAhead) {
setMockClockSourceTime(Date_t::fromMillisSinceEpoch(10 * 1000));
Timestamp tooFarAheadTimestamp(
@@ -124,7 +123,7 @@ TEST_F(LogicalClockTest, RateLimiterRejectsLogicalTimesTooFarAhead) {
}
// Verify cluster time can be initialized to a very old time.
-TEST_F(LogicalClockTest, InitFromTrustedSourceCanAcceptVeryOldLogicalTime) {
+TEST_F(VectorClockTest, InitFromTrustedSourceCanAcceptVeryOldLogicalTime) {
setMockClockSourceTime(Date_t::fromMillisSinceEpoch(
durationCount<Seconds>(Seconds(kMaxAcceptableLogicalClockDriftSecsDefault)) * 10 * 1000));
@@ -134,20 +133,20 @@ TEST_F(LogicalClockTest, InitFromTrustedSourceCanAcceptVeryOldLogicalTime) {
auto veryOldTime = LogicalTime(veryOldTimestamp);
VectorClockMutable::get(getServiceContext())->tickClusterTimeTo(veryOldTime);
- ASSERT_TRUE(getClock()->getClusterTime() == veryOldTime);
+ ASSERT_TRUE(getClusterTime() == veryOldTime);
}
// Verify writes to the oplog advance cluster time.
-TEST_F(LogicalClockTest, WritesToOplogAdvanceClusterTime) {
+TEST_F(VectorClockTest, WritesToOplogAdvanceClusterTime) {
Timestamp tX(1, 0);
auto initialTime = LogicalTime(tX);
VectorClockMutable::get(getServiceContext())->tickClusterTimeTo(initialTime);
- ASSERT_TRUE(getClock()->getClusterTime() == initialTime);
+ ASSERT_TRUE(getClusterTime() == initialTime);
getDBClient()->insert(kDummyNamespaceString.ns(), BSON("x" << 1));
- ASSERT_TRUE(getClock()->getClusterTime() > initialTime);
- ASSERT_EQ(getClock()->getClusterTime().asTimestamp(),
+ ASSERT_TRUE(getClusterTime() > initialTime);
+ ASSERT_EQ(getClusterTime().asTimestamp(),
replicationCoordinator()->getMyLastAppliedOpTime().getTimestamp());
}
@@ -157,7 +156,7 @@ TEST_F(LogicalClockTest, WritesToOplogAdvanceClusterTime) {
// cluster time can be advanced through metadata as long as the new time isn't
// maxAcceptableLogicalClockDriftSecs ahead of the correct current wall clock time, since the rate
// limiter compares new times to the wall clock, not the cluster time.
-TEST_F(LogicalClockTest, WallClockSetTooFarInPast) {
+TEST_F(VectorClockTest, WallClockSetTooFarInPast) {
auto oneDay = Seconds(24 * 60 * 60);
// Current wall clock and cluster time.
@@ -171,7 +170,7 @@ TEST_F(LogicalClockTest, WallClockSetTooFarInPast) {
// If cluster time is either uninitialized or even farther in the past, a write would set
// cluster time more than maxAcceptableLogicalClockDriftSecs in the past.
getDBClient()->insert(kDummyNamespaceString.ns(), BSON("x" << 1));
- ASSERT_TRUE(getClock()->getClusterTime() <
+ ASSERT_TRUE(getClusterTime() <
LogicalTime(Timestamp(
currentSecs - Seconds(kMaxAcceptableLogicalClockDriftSecsDefault), 0)));
@@ -181,14 +180,14 @@ TEST_F(LogicalClockTest, WallClockSetTooFarInPast) {
// Verify that maxAcceptableLogicalClockDriftSecs parameter does not need to be increased to
// advance cluster time through metadata back to the current time.
advanceClusterTime(currentTime);
- ASSERT_TRUE(getClock()->getClusterTime() == currentTime);
+ ASSERT_TRUE(getClusterTime() == currentTime);
}
// Tests the scenario where an admin incorrectly sets the wall clock more than
// maxAcceptableLogicalClockDriftSecs in the future and a write is accepted, advancing cluster
// time, then the admin resets the clock to the current time. In this case, cluster time cannot be
// advanced through metadata unless the drift parameter is increased.
-TEST_F(LogicalClockTest, WallClockSetTooFarInFuture) {
+TEST_F(VectorClockTest, WallClockSetTooFarInFuture) {
auto oneDay = Seconds(24 * 60 * 60);
// Current wall clock and cluster time.
@@ -202,7 +201,7 @@ TEST_F(LogicalClockTest, WallClockSetTooFarInFuture) {
// A write gets through and advances cluster time more than maxAcceptableLogicalClockDriftSecs
// in the future.
getDBClient()->insert(kDummyNamespaceString.ns(), BSON("x" << 1));
- ASSERT_TRUE(getClock()->getClusterTime() >
+ ASSERT_TRUE(getClusterTime() >
LogicalTime(Timestamp(
currentSecs + Seconds(kMaxAcceptableLogicalClockDriftSecsDefault), 0)));
@@ -211,7 +210,7 @@ TEST_F(LogicalClockTest, WallClockSetTooFarInFuture) {
// Verify that maxAcceptableLogicalClockDriftSecs parameter has to be increased to advance
// cluster time through metadata.
- auto nextTime = getClock()->getClusterTime();
+ auto nextTime = getClusterTime();
nextTime.addTicks(1); // The next lowest cluster time.
ASSERT_THROWS_CODE(
@@ -223,96 +222,96 @@ TEST_F(LogicalClockTest, WallClockSetTooFarInFuture) {
setMockClockSourceTime(Date_t::fromDurationSinceEpoch(currentSecs + oneDay));
advanceClusterTime(nextTime);
- ASSERT_TRUE(getClock()->getClusterTime() == nextTime);
+ ASSERT_TRUE(getClusterTime() == nextTime);
}
// Verify the behavior of advancing cluster time around the max allowed values.
-TEST_F(LogicalClockTest, ReserveTicksBehaviorAroundMaxTime) {
+TEST_F(VectorClockTest, ReserveTicksBehaviorAroundMaxTime) {
// Verify clock can be advanced near the max values.
// Can always advance to the max value for the inc field.
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal - 1, maxVal - 1));
VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal - 1, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal - 1, maxVal));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal - 1, maxVal - 5));
VectorClockMutable::get(getServiceContext())->tickClusterTime(5);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal - 1, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal - 1, maxVal));
resetClock()->tickClusterTimeTo(buildLogicalTime(0, maxVal - 1));
VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(0, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(0, maxVal));
// Can overflow inc into seconds to reach max seconds value.
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal - 1, maxVal));
VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, 1));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, 1));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal - 1, maxVal - 5));
VectorClockMutable::get(getServiceContext())->tickClusterTime(10);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, 10));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, 10));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal - 1, 1));
VectorClockMutable::get(getServiceContext())->tickClusterTime(maxVal);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, maxVal));
// Can advance inc field when seconds field is at the max value.
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, 1));
VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, 2));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, 2));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, 1));
VectorClockMutable::get(getServiceContext())->tickClusterTime(100);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, 101));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, 101));
// Can advance to the max value for both the inc and seconds fields.
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, maxVal - 1));
VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, maxVal));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, maxVal - 5));
VectorClockMutable::get(getServiceContext())->tickClusterTime(5);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, maxVal));
// Verify scenarios where the clock cannot be advanced.
// Can't overflow inc into seconds when seconds field is at the max value.
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, maxVal));
ASSERT_THROWS(VectorClockMutable::get(getServiceContext())->tickClusterTime(1), DBException);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, maxVal));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, maxVal));
ASSERT_THROWS(VectorClockMutable::get(getServiceContext())->tickClusterTime(5), DBException);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, maxVal));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, maxVal));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, maxVal - 1));
ASSERT_THROWS(VectorClockMutable::get(getServiceContext())->tickClusterTime(2), DBException);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, maxVal - 1));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, maxVal - 1));
resetClock()->tickClusterTimeTo(buildLogicalTime(maxVal, maxVal - 11));
ASSERT_THROWS(VectorClockMutable::get(getServiceContext())->tickClusterTime(12), DBException);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, maxVal - 11));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, maxVal - 11));
}
// Verify behavior of advancing cluster time when the wall clock is near the max allowed value.
-TEST_F(LogicalClockTest, ReserveTicksBehaviorWhenWallClockNearMaxTime) {
+TEST_F(VectorClockTest, ReserveTicksBehaviorWhenWallClockNearMaxTime) {
// Can be set to the max possible time by catching up to the wall clock.
setMockClockSourceTime(Date_t::fromDurationSinceEpoch(Seconds(maxVal)));
resetClock()->tickClusterTimeTo(buildLogicalTime(1, 1));
VectorClockMutable::get(getServiceContext())->tickClusterTime(1);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(maxVal, 1));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(maxVal, 1));
// Should fail when wall clock would advance cluster time beyond the max allowed time.
setMockClockSourceTime(Date_t::max());
resetClock()->tickClusterTimeTo(buildLogicalTime(1, 1));
ASSERT_THROWS(VectorClockMutable::get(getServiceContext())->tickClusterTime(1), DBException);
- ASSERT_EQ(getClock()->getClusterTime(), buildLogicalTime(1, 1));
+ ASSERT_EQ(getClusterTime(), buildLogicalTime(1, 1));
}
// Verify the clock rejects cluster times greater than the max allowed time.
-TEST_F(LogicalClockTest, RejectsLogicalTimesGreaterThanMaxTime) {
+TEST_F(VectorClockTest, RejectsLogicalTimesGreaterThanMaxTime) {
// A cluster time can be greater than the maximum value allowed because the signed integer
// maximum is used for legacy compatibility, but these fields are stored as unsigned integers.
auto beyondMaxTime = buildLogicalTime(maxVal + 1, maxVal + 1);
@@ -321,7 +320,7 @@ TEST_F(LogicalClockTest, RejectsLogicalTimesGreaterThanMaxTime) {
resetClock();
ASSERT_THROWS(VectorClockMutable::get(getServiceContext())->tickClusterTimeTo(beyondMaxTime),
DBException);
- ASSERT_TRUE(getClock()->getClusterTime() == LogicalTime());
+ ASSERT_TRUE(getClusterTime() == LogicalTime());
// The time can't be advanced through metadata to a time greater than the max possible.
// Advance the wall clock close enough to the new value so the rate check is passed.
@@ -329,7 +328,7 @@ TEST_F(LogicalClockTest, RejectsLogicalTimesGreaterThanMaxTime) {
Seconds(maxVal) - Seconds(kMaxAcceptableLogicalClockDriftSecsDefault) + Seconds(10);
setMockClockSourceTime(Date_t::fromDurationSinceEpoch(almostMaxSecs));
ASSERT_THROWS(advanceClusterTime(beyondMaxTime), DBException);
- ASSERT_TRUE(getClock()->getClusterTime() == LogicalTime());
+ ASSERT_TRUE(getClusterTime() == LogicalTime());
}
} // unnamed namespace
diff --git a/src/mongo/db/logical_clock_test_fixture.cpp b/src/mongo/db/vector_clock_test_fixture.cpp
index 99d3ee0e7b9..b8c7205512e 100644
--- a/src/mongo/db/logical_clock_test_fixture.cpp
+++ b/src/mongo/db/vector_clock_test_fixture.cpp
@@ -29,12 +29,11 @@
#include "mongo/platform/basic.h"
-#include "mongo/db/logical_clock_test_fixture.h"
+#include "mongo/db/vector_clock_test_fixture.h"
#include <memory>
#include "mongo/db/dbdirectclient.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/repl/replication_coordinator_mock.h"
#include "mongo/db/service_context.h"
@@ -46,18 +45,16 @@
namespace mongo {
-LogicalClockTestFixture::LogicalClockTestFixture() = default;
+VectorClockTestFixture::VectorClockTestFixture() = default;
-LogicalClockTestFixture::~LogicalClockTestFixture() = default;
+VectorClockTestFixture::~VectorClockTestFixture() = default;
-void LogicalClockTestFixture::setUp() {
+void VectorClockTestFixture::setUp() {
ShardingMongodTestFixture::setUp();
auto service = getServiceContext();
- auto logicalClock = std::make_unique<LogicalClock>(service);
- LogicalClock::set(service, std::move(logicalClock));
- _clock = LogicalClock::get(service);
+ _clock = VectorClock::get(service);
service->setFastClockSource(std::make_unique<SharedClockSourceAdapter>(_mockClockSource));
service->setPreciseClockSource(std::make_unique<SharedClockSourceAdapter>(_mockClockSource));
@@ -67,38 +64,43 @@ void LogicalClockTestFixture::setUp() {
ASSERT_OK(replicationCoordinator()->setFollowerMode(repl::MemberState::RS_PRIMARY));
}
-void LogicalClockTestFixture::tearDown() {
+void VectorClockTestFixture::tearDown() {
_dbDirectClient.reset();
ShardingMongodTestFixture::tearDown();
}
-VectorClockMutable* LogicalClockTestFixture::resetClock() {
+VectorClockMutable* VectorClockTestFixture::resetClock() {
auto service = getServiceContext();
VectorClock::get(service)->resetVectorClock_forTest();
return VectorClockMutable::get(service);
}
-void LogicalClockTestFixture::advanceClusterTime(LogicalTime newTime) {
+void VectorClockTestFixture::advanceClusterTime(LogicalTime newTime) {
VectorClock::get(getServiceContext())->advanceClusterTime_forTest(newTime);
}
-LogicalClock* LogicalClockTestFixture::getClock() const {
+VectorClock* VectorClockTestFixture::getClock() const {
return _clock;
}
-ClockSourceMock* LogicalClockTestFixture::getMockClockSource() const {
+LogicalTime VectorClockTestFixture::getClusterTime() const {
+ auto now = getClock()->getTime();
+ return now.clusterTime();
+}
+
+ClockSourceMock* VectorClockTestFixture::getMockClockSource() const {
return _mockClockSource.get();
}
-void LogicalClockTestFixture::setMockClockSourceTime(Date_t time) const {
+void VectorClockTestFixture::setMockClockSourceTime(Date_t time) const {
_mockClockSource->reset(time);
}
-Date_t LogicalClockTestFixture::getMockClockSourceTime() const {
+Date_t VectorClockTestFixture::getMockClockSourceTime() const {
return _mockClockSource->now();
}
-DBDirectClient* LogicalClockTestFixture::getDBClient() const {
+DBDirectClient* VectorClockTestFixture::getDBClient() const {
return _dbDirectClient.get();
}
diff --git a/src/mongo/db/logical_clock_test_fixture.h b/src/mongo/db/vector_clock_test_fixture.h
index 4602ae629cd..96a3a94a577 100644
--- a/src/mongo/db/logical_clock_test_fixture.h
+++ b/src/mongo/db/vector_clock_test_fixture.h
@@ -35,23 +35,23 @@ namespace mongo {
class ClockSourceMock;
class DBDirectClient;
-class LogicalClock;
class LogicalTime;
+class VectorClock;
class VectorClockMutable;
/**
- * A test fixture that installs a LogicalClock instance with a TimeProofService onto a service
+ * A test fixture that installs a VectorClock instance with a TimeProofService onto a service
* context, in addition to the mock storage engine, network, and OpObserver provided by
* ShardingMongodTestFixture.
*/
-class LogicalClockTestFixture : public ShardingMongodTestFixture {
+class VectorClockTestFixture : public ShardingMongodTestFixture {
public:
- LogicalClockTestFixture();
- ~LogicalClockTestFixture();
+ VectorClockTestFixture();
+ ~VectorClockTestFixture();
protected:
/**
- * Sets up this fixture as the primary node in a shard server replica set with a LogicalClock
+ * Sets up this fixture as the primary node in a shard server replica set with a VectorClock
* (with a TimeProofService), storage engine, DBClient, OpObserver, and a mocked clock source.
*/
void setUp() override;
@@ -62,7 +62,9 @@ protected:
void advanceClusterTime(LogicalTime newTime);
- LogicalClock* getClock() const;
+ VectorClock* getClock() const;
+
+ LogicalTime getClusterTime() const;
ClockSourceMock* getMockClockSource() const;
@@ -73,7 +75,7 @@ protected:
DBDirectClient* getDBClient() const;
private:
- LogicalClock* _clock;
+ VectorClock* _clock;
std::shared_ptr<ClockSourceMock> _mockClockSource = std::make_shared<ClockSourceMock>();
std::unique_ptr<DBDirectClient> _dbDirectClient;
};
diff --git a/src/mongo/dbtests/dbtests.cpp b/src/mongo/dbtests/dbtests.cpp
index 0c84bdac851..92e3cccd9c5 100644
--- a/src/mongo/dbtests/dbtests.cpp
+++ b/src/mongo/dbtests/dbtests.cpp
@@ -46,7 +46,6 @@
#include "mongo/db/commands/test_commands_enabled.h"
#include "mongo/db/db_raii.h"
#include "mongo/db/index/index_descriptor.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/repl/drop_pending_collection_reaper.h"
#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/db/repl/replication_coordinator_mock.h"
@@ -194,9 +193,6 @@ int dbtestsMain(int argc, char** argv) {
const auto service = getGlobalServiceContext();
service->setServiceEntryPoint(std::make_unique<ServiceEntryPointMongod>(service));
- auto logicalClock = std::make_unique<LogicalClock>(service);
- LogicalClock::set(service, std::move(logicalClock));
-
auto fastClock = std::make_unique<ClockSourceMock>();
// Timestamps are split into two 32-bit integers, seconds and "increments". Currently (but
// maybe not for eternity), a Timestamp with a value of `0` seconds is always considered
diff --git a/src/mongo/dbtests/querytests.cpp b/src/mongo/dbtests/querytests.cpp
index 04bc9867fa0..4ba7d36c94c 100644
--- a/src/mongo/dbtests/querytests.cpp
+++ b/src/mongo/dbtests/querytests.cpp
@@ -45,7 +45,6 @@
#include "mongo/db/index/index_descriptor.h"
#include "mongo/db/json.h"
#include "mongo/db/lasterror.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/query/find.h"
diff --git a/src/mongo/embedded/embedded.cpp b/src/mongo/embedded/embedded.cpp
index 759205529ac..a10e6c975e7 100644
--- a/src/mongo/embedded/embedded.cpp
+++ b/src/mongo/embedded/embedded.cpp
@@ -49,7 +49,6 @@
#include "mongo/db/global_settings.h"
#include "mongo/db/index/index_access_method_factory_impl.h"
#include "mongo/db/kill_sessions_local.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_cache_impl.h"
#include "mongo/db/op_observer_impl.h"
#include "mongo/db/op_observer_registry.h"
@@ -116,9 +115,6 @@ ServiceContext::ConstructorActionRegisterer replicationManagerInitializer(
"CreateReplicationManager", {"SSLManager", "default"}, [](ServiceContext* serviceContext) {
repl::StorageInterface::set(serviceContext, std::make_unique<repl::StorageInterfaceImpl>());
- auto logicalClock = std::make_unique<LogicalClock>(serviceContext);
- LogicalClock::set(serviceContext, std::move(logicalClock));
-
auto replCoord = std::make_unique<ReplicationCoordinatorEmbedded>(serviceContext);
repl::ReplicationCoordinator::set(serviceContext, std::move(replCoord));
repl::setOplogCollectionName(serviceContext);
diff --git a/src/mongo/embedded/stitch_support/stitch_support.cpp b/src/mongo/embedded/stitch_support/stitch_support.cpp
index 090bf4b6958..f6979228d14 100644
--- a/src/mongo/embedded/stitch_support/stitch_support.cpp
+++ b/src/mongo/embedded/stitch_support/stitch_support.cpp
@@ -36,7 +36,6 @@
#include "mongo/bson/bsonobj.h"
#include "mongo/db/exec/projection_executor.h"
#include "mongo/db/exec/projection_executor_builder.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/matcher/matcher.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/ops/parsed_update_array_filters.h"
@@ -125,8 +124,6 @@ ServiceContext* initialize() {
uassertStatusOKWithContext(status, "Global initialization failed");
setGlobalServiceContext(ServiceContext::make());
auto serviceContext = getGlobalServiceContext();
- auto logicalClock = std::make_unique<LogicalClock>(serviceContext);
- LogicalClock::set(serviceContext, std::move(logicalClock));
return serviceContext;
}
diff --git a/src/mongo/rpc/metadata.cpp b/src/mongo/rpc/metadata.cpp
index 493d7ddac44..a9747811af1 100644
--- a/src/mongo/rpc/metadata.cpp
+++ b/src/mongo/rpc/metadata.cpp
@@ -35,7 +35,6 @@
#include "mongo/db/auth/authorization_session.h"
#include "mongo/db/dbmessage.h"
#include "mongo/db/jsobj.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/vector_clock.h"
#include "mongo/rpc/metadata/client_metadata_ismaster.h"
diff --git a/src/mongo/s/catalog_cache.cpp b/src/mongo/s/catalog_cache.cpp
index 06e9c878c1b..a470a57bee5 100644
--- a/src/mongo/s/catalog_cache.cpp
+++ b/src/mongo/s/catalog_cache.cpp
@@ -38,7 +38,6 @@
#include "mongo/s/catalog_cache.h"
#include "mongo/bson/bsonobjbuilder.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/query/collation/collator_factory_interface.h"
#include "mongo/db/repl/optime_with.h"
#include "mongo/logv2/log.h"
diff --git a/src/mongo/s/cluster_commands_helpers.cpp b/src/mongo/s/cluster_commands_helpers.cpp
index ac9c9900281..14c008bbaa3 100644
--- a/src/mongo/s/cluster_commands_helpers.cpp
+++ b/src/mongo/s/cluster_commands_helpers.cpp
@@ -39,7 +39,6 @@
#include "mongo/db/commands.h"
#include "mongo/db/curop.h"
#include "mongo/db/error_labels.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/pipeline/expression_context.h"
#include "mongo/db/pipeline/process_interface/mongo_process_interface.h"
diff --git a/src/mongo/s/commands/cluster_command_test_fixture.cpp b/src/mongo/s/commands/cluster_command_test_fixture.cpp
index 31bee683dbf..316fc78782f 100644
--- a/src/mongo/s/commands/cluster_command_test_fixture.cpp
+++ b/src/mongo/s/commands/cluster_command_test_fixture.cpp
@@ -37,7 +37,6 @@
#include "mongo/db/commands/txn_cmds_gen.h"
#include "mongo/db/keys_collection_client_sharded.h"
#include "mongo/db/keys_collection_manager.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_cache_noop.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/vector_clock.h"
@@ -52,9 +51,7 @@ void ClusterCommandTestFixture::setUp() {
CatalogCacheTestFixture::setUp();
CatalogCacheTestFixture::setupNShards(numShards);
- // Set up a logical clock with an initial time.
- auto logicalClock = std::make_unique<LogicalClock>(getServiceContext());
- LogicalClock::set(getServiceContext(), std::move(logicalClock));
+ // Set the initial clusterTime.
VectorClock::get(getServiceContext())->advanceClusterTime_forTest(kInMemoryLogicalTime);
auto keysCollectionClient = std::make_unique<KeysCollectionClientSharded>(
diff --git a/src/mongo/s/commands/cluster_write_cmd.cpp b/src/mongo/s/commands/cluster_write_cmd.cpp
index fbaced5e4b7..1340e023275 100644
--- a/src/mongo/s/commands/cluster_write_cmd.cpp
+++ b/src/mongo/s/commands/cluster_write_cmd.cpp
@@ -40,7 +40,6 @@
#include "mongo/db/commands/write_commands/write_commands_common.h"
#include "mongo/db/curop.h"
#include "mongo/db/lasterror.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/lite_parsed_pipeline.h"
#include "mongo/db/stats/counters.h"
#include "mongo/db/storage/duplicate_key_error_info.h"
diff --git a/src/mongo/s/commands/strategy.cpp b/src/mongo/s/commands/strategy.cpp
index f83b490d0ef..558524ee17b 100644
--- a/src/mongo/s/commands/strategy.cpp
+++ b/src/mongo/s/commands/strategy.cpp
@@ -49,7 +49,6 @@
#include "mongo/db/initialize_api_parameters.h"
#include "mongo/db/initialize_operation_session_info.h"
#include "mongo/db/lasterror.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_id_helpers.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/matcher/extensions_callback_noop.h"
@@ -648,13 +647,13 @@ void runCommand(OperationContext* opCtx,
(!readConcernArgs.getArgsAtClusterTime() ||
readConcernArgs.wasAtClusterTimeSelected())) {
auto atClusterTime = [&] {
- auto latestKnownClusterTime = LogicalClock::get(opCtx)->getClusterTime();
+ const auto latestKnownTime = VectorClock::get(opCtx)->getTime();
// Choose a time after the user-supplied afterClusterTime.
auto afterClusterTime = readConcernArgs.getArgsAfterClusterTime();
- if (afterClusterTime && *afterClusterTime > latestKnownClusterTime) {
+ if (afterClusterTime && *afterClusterTime > latestKnownTime.clusterTime()) {
return afterClusterTime->asTimestamp();
}
- return latestKnownClusterTime.asTimestamp();
+ return latestKnownTime.clusterTime().asTimestamp();
}();
readConcernArgs.setArgsAtClusterTimeForSnapshot(atClusterTime);
}
diff --git a/src/mongo/s/grid.cpp b/src/mongo/s/grid.cpp
index ea28033590e..0fb2cf8d2ee 100644
--- a/src/mongo/s/grid.cpp
+++ b/src/mongo/s/grid.cpp
@@ -124,8 +124,8 @@ void Grid::setAllowLocalHost(bool allow) {
repl::ReadConcernArgs Grid::readConcernWithConfigTime(
repl::ReadConcernLevel readConcernLevel) const {
if (fcvGreaterThanOrEqualTo47()) {
- auto now = VectorClock::get(grid.owner(this))->getTime();
- if (auto configTime = now.configTime(); !configTime.asTimestamp().isNull()) {
+ const auto currentTime = VectorClock::get(grid.owner(this))->getTime();
+ if (auto configTime = currentTime.configTime(); !configTime.asTimestamp().isNull()) {
// TODO SERVER-44097: investigate why not using a term (e.g. with a LogicalTime)
// can lead - upon CSRS stepdowns - to a last applied opTime lower than the
// previous primary's committed opTime
@@ -140,8 +140,8 @@ repl::ReadConcernArgs Grid::readConcernWithConfigTime(
ReadPreferenceSetting Grid::readPreferenceWithConfigTime(
const ReadPreferenceSetting& readPreference) const {
if (fcvGreaterThanOrEqualTo47()) {
- auto now = VectorClock::get(grid.owner(this))->getTime();
- if (auto configTime = now.configTime(); !configTime.asTimestamp().isNull()) {
+ const auto currentTime = VectorClock::get(grid.owner(this))->getTime();
+ if (auto configTime = currentTime.configTime(); !configTime.asTimestamp().isNull()) {
ReadPreferenceSetting readPrefToReturn(readPreference);
readPrefToReturn.minClusterTime = configTime.asTimestamp();
return readPrefToReturn;
diff --git a/src/mongo/s/mongos_main.cpp b/src/mongo/s/mongos_main.cpp
index e55cdb0d7d7..e3440eb151e 100644
--- a/src/mongo/s/mongos_main.cpp
+++ b/src/mongo/s/mongos_main.cpp
@@ -59,7 +59,6 @@
#include "mongo/db/kill_sessions.h"
#include "mongo/db/lasterror.h"
#include "mongo/db/log_process_details.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_cache_impl.h"
#include "mongo/db/logical_time_metadata_hook.h"
#include "mongo/db/logical_time_validator.h"
@@ -724,8 +723,6 @@ ExitCode runMongosServer(ServiceContext* serviceContext) {
quickExit(EXIT_BADOPTIONS);
}
- LogicalClock::set(serviceContext, std::make_unique<LogicalClock>(serviceContext));
-
ReadWriteConcernDefaults::create(serviceContext, readWriteConcernDefaultsCacheLookupMongoS);
auto opCtxHolder = tc->makeOperationContext();
diff --git a/src/mongo/s/query/cluster_aggregate.cpp b/src/mongo/s/query/cluster_aggregate.cpp
index 279c425ec68..4b2da5f2b34 100644
--- a/src/mongo/s/query/cluster_aggregate.cpp
+++ b/src/mongo/s/query/cluster_aggregate.cpp
@@ -39,7 +39,6 @@
#include "mongo/db/client.h"
#include "mongo/db/commands.h"
#include "mongo/db/curop.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/pipeline/document_source_change_stream.h"
#include "mongo/db/pipeline/document_source_out.h"
diff --git a/src/mongo/s/query/cluster_find.cpp b/src/mongo/s/query/cluster_find.cpp
index 57925b873ed..395f8080acd 100644
--- a/src/mongo/s/query/cluster_find.cpp
+++ b/src/mongo/s/query/cluster_find.cpp
@@ -45,7 +45,6 @@
#include "mongo/db/commands.h"
#include "mongo/db/curop.h"
#include "mongo/db/curop_failpoint_helpers.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/query/canonical_query.h"
#include "mongo/db/query/find_common.h"
#include "mongo/db/query/getmore_request.h"
diff --git a/src/mongo/s/query/sharded_agg_test_fixture.h b/src/mongo/s/query/sharded_agg_test_fixture.h
index 0bfedd9f5db..c03354f9e5d 100644
--- a/src/mongo/s/query/sharded_agg_test_fixture.h
+++ b/src/mongo/s/query/sharded_agg_test_fixture.h
@@ -29,7 +29,6 @@
#pragma once
-#include "mongo/db/logical_clock.h"
#include "mongo/db/pipeline/document_source.h"
#include "mongo/db/pipeline/expression_context_for_test.h"
#include "mongo/db/pipeline/process_interface/stub_mongo_process_interface.h"
@@ -58,8 +57,6 @@ public:
void setUp() {
CatalogCacheTestFixture::setUp();
- auto serviceCtx = operationContext()->getServiceContext();
- LogicalClock::set(serviceCtx, std::make_unique<LogicalClock>(serviceCtx));
_expCtx = make_intrusive<ExpressionContextForTest>(operationContext(), kTestAggregateNss);
_expCtx->mongoProcessInterface = std::make_shared<FakeMongoProcessInterface>(executor());
_expCtx->inMongos = true;
diff --git a/src/mongo/s/sessions_collection_sharded_test.cpp b/src/mongo/s/sessions_collection_sharded_test.cpp
index 89081e468c6..aab98efcbde 100644
--- a/src/mongo/s/sessions_collection_sharded_test.cpp
+++ b/src/mongo/s/sessions_collection_sharded_test.cpp
@@ -33,7 +33,6 @@
#include "mongo/client/remote_command_targeter_factory_mock.h"
#include "mongo/client/remote_command_targeter_mock.h"
#include "mongo/db/commands.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_id.h"
#include "mongo/s/catalog/type_shard.h"
#include "mongo/s/catalog_cache_test_fixture.h"
@@ -203,4 +202,4 @@ TEST_F(SessionsCollectionShardedTest, RemoveOneSessionWriteErrTest) {
}
} // namespace
-} // namespace mongo \ No newline at end of file
+} // namespace mongo
diff --git a/src/mongo/s/sharding_initialization.cpp b/src/mongo/s/sharding_initialization.cpp
index 2b73154e767..af0cb15f5ea 100644
--- a/src/mongo/s/sharding_initialization.cpp
+++ b/src/mongo/s/sharding_initialization.cpp
@@ -40,7 +40,6 @@
#include "mongo/db/audit.h"
#include "mongo/db/keys_collection_client_sharded.h"
#include "mongo/db/keys_collection_manager.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_time_validator.h"
#include "mongo/db/server_options.h"
#include "mongo/db/service_context.h"
diff --git a/src/mongo/s/transaction_router.cpp b/src/mongo/s/transaction_router.cpp
index c269d734365..43a6f6ad32c 100644
--- a/src/mongo/s/transaction_router.cpp
+++ b/src/mongo/s/transaction_router.cpp
@@ -39,10 +39,10 @@
#include "mongo/db/commands/txn_cmds_gen.h"
#include "mongo/db/commands/txn_two_phase_commit_cmds_gen.h"
#include "mongo/db/jsobj.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_id.h"
#include "mongo/db/repl/read_concern_args.h"
#include "mongo/db/transaction_validation.h"
+#include "mongo/db/vector_clock.h"
#include "mongo/executor/task_executor_pool.h"
#include "mongo/logv2/log.h"
#include "mongo/rpc/get_status_from_command_result.h"
@@ -860,9 +860,10 @@ void TransactionRouter::Router::setDefaultAtClusterTime(OperationContext* opCtx)
return;
}
- auto defaultTime = LogicalClock::get(opCtx)->getClusterTime();
- _setAtClusterTime(
- opCtx, repl::ReadConcernArgs::get(opCtx).getArgsAfterClusterTime(), defaultTime);
+ const auto defaultTime = VectorClock::get(opCtx)->getTime();
+ _setAtClusterTime(opCtx,
+ repl::ReadConcernArgs::get(opCtx).getArgsAfterClusterTime(),
+ defaultTime.clusterTime());
}
void TransactionRouter::Router::_setAtClusterTime(
diff --git a/src/mongo/s/transaction_router_test.cpp b/src/mongo/s/transaction_router_test.cpp
index a507d3e4f3f..bd6e503c0e1 100644
--- a/src/mongo/s/transaction_router_test.cpp
+++ b/src/mongo/s/transaction_router_test.cpp
@@ -36,7 +36,6 @@
#include "mongo/client/remote_command_targeter_mock.h"
#include "mongo/db/commands.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/repl/read_concern_args.h"
#include "mongo/db/vector_clock.h"
@@ -123,9 +122,7 @@ protected:
repl::ReadConcernArgs::get(operationContext()) =
repl::ReadConcernArgs(repl::ReadConcernLevel::kSnapshotReadConcern);
- // Set up a logical clock with an initial time.
- auto logicalClock = std::make_unique<LogicalClock>(getServiceContext());
- LogicalClock::set(getServiceContext(), std::move(logicalClock));
+ // Set the initial clusterTime.
VectorClock::get(getServiceContext())->advanceClusterTime_forTest(kInMemoryLogicalTime);
// Set up a tick source for transaction metrics.
diff --git a/src/mongo/s/write_ops/batch_write_exec_test.cpp b/src/mongo/s/write_ops/batch_write_exec_test.cpp
index bdadf82b80d..25e5385ec90 100644
--- a/src/mongo/s/write_ops/batch_write_exec_test.cpp
+++ b/src/mongo/s/write_ops/batch_write_exec_test.cpp
@@ -33,7 +33,6 @@
#include "mongo/client/remote_command_targeter_factory_mock.h"
#include "mongo/client/remote_command_targeter_mock.h"
#include "mongo/db/commands.h"
-#include "mongo/db/logical_clock.h"
#include "mongo/db/logical_session_id.h"
#include "mongo/db/vector_clock.h"
#include "mongo/s/catalog/type_shard.h"
@@ -1609,8 +1608,6 @@ public:
repl::ReadConcernArgs::get(operationContext()) =
repl::ReadConcernArgs(repl::ReadConcernLevel::kSnapshotReadConcern);
- auto logicalClock = std::make_unique<LogicalClock>(getServiceContext());
- LogicalClock::set(getServiceContext(), std::move(logicalClock));
VectorClock::get(getServiceContext())->advanceClusterTime_forTest(kInMemoryLogicalTime);
_scopedSession.emplace(operationContext());