summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorAllison Easton <allison.easton@mongodb.com>2021-08-16 09:33:00 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-08-16 10:14:51 +0000
commitf38a3ad9917367784698a115b4a541bebfb4e65d (patch)
tree8138fa93d844190cd0c360e559b83804ca484b17 /src/mongo
parent6044b442c75a730e0d85cd3952ec51088b64c616 (diff)
downloadmongo-f38a3ad9917367784698a115b4a541bebfb4e65d.tar.gz
SERVER-58989 Make timestamp required in DatabaseVersionBase IDL
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/s/balancer/balance_stats_test.cpp2
-rw-r--r--src/mongo/db/s/balancer/migration_test_fixture.cpp2
-rw-r--r--src/mongo/db/s/collection_metadata_filtering_test.cpp2
-rw-r--r--src/mongo/db/s/collection_metadata_test.cpp5
-rw-r--r--src/mongo/db/s/collection_sharding_runtime_test.cpp14
-rw-r--r--src/mongo/db/s/config/config_server_test_fixture.cpp2
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager_add_shard_test.cpp18
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager_database_operations.cpp11
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp8
-rw-r--r--src/mongo/db/s/database_sharding_state_test.cpp72
-rw-r--r--src/mongo/db/s/metadata_manager_test.cpp2
-rw-r--r--src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp4
-rw-r--r--src/mongo/db/s/migration_util_test.cpp5
-rw-r--r--src/mongo/db/s/op_observer_sharding_test.cpp2
-rw-r--r--src/mongo/db/s/operation_sharding_state.cpp4
-rw-r--r--src/mongo/db/s/range_deletion_util_test.cpp2
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp2
-rw-r--r--src/mongo/db/s/resharding/resharding_data_replication_test.cpp2
-rw-r--r--src/mongo/db/s/resharding/resharding_donor_recipient_common_test.h7
-rw-r--r--src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp2
-rw-r--r--src/mongo/db/s/resharding/resharding_oplog_batch_applier_test.cpp2
-rw-r--r--src/mongo/db/s/resharding/resharding_oplog_crud_application_test.cpp2
-rw-r--r--src/mongo/db/s/resharding/resharding_recipient_service_external_state_test.cpp8
-rw-r--r--src/mongo/db/s/resharding/resharding_recipient_service_test.cpp2
-rw-r--r--src/mongo/db/s/resharding_destined_recipient_test.cpp3
-rw-r--r--src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp2
-rw-r--r--src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.cpp15
-rw-r--r--src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.h9
-rw-r--r--src/mongo/s/build_versioned_requests_for_targeted_shards_test.cpp3
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client_test.cpp22
-rw-r--r--src/mongo/s/catalog/type_database_test.cpp4
-rw-r--r--src/mongo/s/catalog_cache_refresh_test.cpp3
-rw-r--r--src/mongo/s/catalog_cache_test.cpp28
-rw-r--r--src/mongo/s/catalog_cache_test_fixture.cpp6
-rw-r--r--src/mongo/s/chunk_manager_query_test.cpp2
-rw-r--r--src/mongo/s/chunk_manager_refresh_bm.cpp6
-rw-r--r--src/mongo/s/comparable_database_version_test.cpp73
-rw-r--r--src/mongo/s/database_version.cpp23
-rw-r--r--src/mongo/s/database_version.h13
-rw-r--r--src/mongo/s/database_version.idl5
-rw-r--r--src/mongo/s/write_ops/batch_write_exec_test.cpp2
41 files changed, 135 insertions, 266 deletions
diff --git a/src/mongo/db/s/balancer/balance_stats_test.cpp b/src/mongo/db/s/balancer/balance_stats_test.cpp
index 0bae93f1693..21d1f7c13f8 100644
--- a/src/mongo/db/s/balancer/balance_stats_test.cpp
+++ b/src/mongo/db/s/balancer/balance_stats_test.cpp
@@ -75,7 +75,7 @@ private:
const NamespaceString _nss{"foo.bar"};
const OID _epoch{OID::gen()};
const ShardId _shardPrimary{"dummyShardPrimary"};
- const DatabaseVersion _dbVersion{UUID::gen()};
+ const DatabaseVersion _dbVersion{UUID::gen(), Timestamp()};
ChunkVersion _nextVersion{1, 0, _epoch, boost::none};
};
diff --git a/src/mongo/db/s/balancer/migration_test_fixture.cpp b/src/mongo/db/s/balancer/migration_test_fixture.cpp
index 3320a43142d..7744c36d0a7 100644
--- a/src/mongo/db/s/balancer/migration_test_fixture.cpp
+++ b/src/mongo/db/s/balancer/migration_test_fixture.cpp
@@ -48,7 +48,7 @@ std::shared_ptr<RemoteCommandTargeterMock> MigrationTestFixture::shardTargeterMo
}
void MigrationTestFixture::setUpDatabase(const std::string& dbName, const ShardId primaryShard) {
- DatabaseType db(dbName, primaryShard, true, DatabaseVersion(UUID::gen()));
+ DatabaseType db(dbName, primaryShard, true, DatabaseVersion(UUID::gen(), Timestamp()));
ASSERT_OK(catalogClient()->insertConfigDocument(
operationContext(), DatabaseType::ConfigNS, db.toBSON(), kMajorityWriteConcern));
}
diff --git a/src/mongo/db/s/collection_metadata_filtering_test.cpp b/src/mongo/db/s/collection_metadata_filtering_test.cpp
index 0d10ba6de96..3bd22a6cded 100644
--- a/src/mongo/db/s/collection_metadata_filtering_test.cpp
+++ b/src/mongo/db/s/collection_metadata_filtering_test.cpp
@@ -110,7 +110,7 @@ protected:
}());
ChunkManager cm(ShardId("0"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none);
ASSERT_EQ(4, cm.numChunks());
diff --git a/src/mongo/db/s/collection_metadata_test.cpp b/src/mongo/db/s/collection_metadata_test.cpp
index b4e8e1231b5..1b7c31a3e8d 100644
--- a/src/mongo/db/s/collection_metadata_test.cpp
+++ b/src/mongo/db/s/collection_metadata_test.cpp
@@ -52,6 +52,7 @@ CollectionMetadata makeCollectionMetadataImpl(
const std::vector<std::pair<BSONObj, BSONObj>>& thisShardsChunks,
bool staleChunkManager,
UUID uuid = UUID::gen(),
+ Timestamp timestamp = Timestamp(),
boost::optional<TypeCollectionReshardingFields> reshardingFields = boost::none) {
const OID epoch = OID::gen();
@@ -85,7 +86,7 @@ CollectionMetadata makeCollectionMetadataImpl(
return CollectionMetadata(
ChunkManager(kThisShard,
- DatabaseVersion(uuid),
+ DatabaseVersion(uuid, timestamp),
ShardingTestFixtureCommon::makeStandaloneRoutingTableHistory(
RoutingTableHistory::makeNew(kNss,
uuid,
@@ -134,7 +135,7 @@ protected:
(state >= CoordinatorStateEnum::kCommitting) ? reshardingUuid : existingUuid;
return makeCollectionMetadataImpl(
- KeyPattern(BSON("a" << 1)), {}, false, metadataUuid, reshardingFields);
+ KeyPattern(BSON("a" << 1)), {}, false, metadataUuid, Timestamp(), reshardingFields);
}
};
diff --git a/src/mongo/db/s/collection_sharding_runtime_test.cpp b/src/mongo/db/s/collection_sharding_runtime_test.cpp
index 52022ffd6a9..bf7de89a625 100644
--- a/src/mongo/db/s/collection_sharding_runtime_test.cpp
+++ b/src/mongo/db/s/collection_sharding_runtime_test.cpp
@@ -62,7 +62,7 @@ protected:
ChunkVersion(1, 0, epoch, boost::none /* timestamp */),
ShardId("other"));
ChunkManager cm(ShardId("0"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(
RoutingTableHistory::makeNew(kTestNss,
uuid,
@@ -293,8 +293,10 @@ protected:
TEST_F(CollectionShardingRuntimeTestWithMockedLoader,
ForceShardFilteringMetadataRefreshWithUpdateMetadataFormat) {
- const DatabaseType dbType(
- kNss.db().toString(), kShardList[0].getName(), true, DatabaseVersion(UUID::gen()));
+ const DatabaseType dbType(kNss.db().toString(),
+ kShardList[0].getName(),
+ true,
+ DatabaseVersion(UUID::gen(), Timestamp()));
const auto epoch = OID::gen();
const Timestamp timestamp(42);
@@ -329,8 +331,10 @@ TEST_F(CollectionShardingRuntimeTestWithMockedLoader,
TEST_F(CollectionShardingRuntimeTestWithMockedLoader,
OnShardVersionMismatchWithUpdateMetadataFormat) {
- const DatabaseType dbType(
- kNss.db().toString(), kShardList[0].getName(), true, DatabaseVersion(UUID::gen()));
+ const DatabaseType dbType(kNss.db().toString(),
+ kShardList[0].getName(),
+ true,
+ DatabaseVersion(UUID::gen(), Timestamp()));
const auto epoch = OID::gen();
const Timestamp timestamp(42);
diff --git a/src/mongo/db/s/config/config_server_test_fixture.cpp b/src/mongo/db/s/config/config_server_test_fixture.cpp
index b97f1274455..ffd9c9b4baf 100644
--- a/src/mongo/db/s/config/config_server_test_fixture.cpp
+++ b/src/mongo/db/s/config/config_server_test_fixture.cpp
@@ -409,7 +409,7 @@ StatusWith<ChunkVersion> ConfigServerTestFixture::getCollectionVersion(Operation
void ConfigServerTestFixture::setupDatabase(const std::string& dbName,
const ShardId primaryShard,
const bool sharded) {
- DatabaseType db(dbName, primaryShard, sharded, DatabaseVersion(UUID::gen()));
+ DatabaseType db(dbName, primaryShard, sharded, DatabaseVersion(UUID::gen(), Timestamp()));
ASSERT_OK(catalogClient()->insertConfigDocument(operationContext(),
DatabaseType::ConfigNS,
db.toBSON(),
diff --git a/src/mongo/db/s/config/sharding_catalog_manager_add_shard_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_add_shard_test.cpp
index c9e7a0c81bd..e47bebc388c 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager_add_shard_test.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager_add_shard_test.cpp
@@ -380,9 +380,9 @@ TEST_F(AddShardTest, StandaloneBasicSuccess) {
expectedShard.setState(ShardType::ShardState::kShardAware);
DatabaseType discoveredDB1(
- "TestDB1", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen()));
+ "TestDB1", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen(), Timestamp()));
DatabaseType discoveredDB2(
- "TestDB2", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen()));
+ "TestDB2", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen(), Timestamp()));
auto expectWriteConcern = ShardingCatalogClient::kMajorityWriteConcern;
@@ -466,9 +466,9 @@ TEST_F(AddShardTest, StandaloneGenerateName) {
expectedShard.setState(ShardType::ShardState::kShardAware);
DatabaseType discoveredDB1(
- "TestDB1", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen()));
+ "TestDB1", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen(), Timestamp()));
DatabaseType discoveredDB2(
- "TestDB2", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen()));
+ "TestDB2", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen(), Timestamp()));
auto future = launchAsync([this, &expectedShardName, &shardTarget] {
ThreadClient tc(getServiceContext());
@@ -810,7 +810,7 @@ TEST_F(AddShardTest, ShardContainsExistingDatabase) {
std::string expectedShardName = "mySet";
DatabaseType existingDB(
- "existing", ShardId("existingShard"), false, DatabaseVersion(UUID::gen()));
+ "existing", ShardId("existingShard"), false, DatabaseVersion(UUID::gen(), Timestamp()));
// Add a pre-existing database.
ASSERT_OK(catalogClient()->insertConfigDocument(operationContext(),
@@ -865,7 +865,7 @@ TEST_F(AddShardTest, SuccessfullyAddReplicaSet) {
expectedShard.setState(ShardType::ShardState::kShardAware);
DatabaseType discoveredDB(
- "shardDB", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen()));
+ "shardDB", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen(), Timestamp()));
auto future = launchAsync([this, &expectedShardName, &connString] {
ThreadClient tc(getServiceContext());
@@ -930,7 +930,7 @@ TEST_F(AddShardTest, ReplicaSetExtraHostsDiscovered) {
expectedShard.setState(ShardType::ShardState::kShardAware);
DatabaseType discoveredDB(
- "shardDB", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen()));
+ "shardDB", ShardId(expectedShardName), false, DatabaseVersion(UUID::gen(), Timestamp()));
auto future = launchAsync([this, &expectedShardName, &seedString] {
ThreadClient tc(getServiceContext());
@@ -996,9 +996,9 @@ TEST_F(AddShardTest, AddShardSucceedsEvenIfAddingDBsFromNewShardFails) {
expectedShard.setState(ShardType::ShardState::kShardAware);
DatabaseType discoveredDB1(
- "TestDB1", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen()));
+ "TestDB1", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen(), Timestamp()));
DatabaseType discoveredDB2(
- "TestDB2", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen()));
+ "TestDB2", ShardId("StandaloneShard"), false, DatabaseVersion(UUID::gen(), Timestamp()));
// Enable fail point to cause all updates to fail. Since we add the databases detected from
// the shard being added with upserts, but we add the shard document itself via insert, this
diff --git a/src/mongo/db/s/config/sharding_catalog_manager_database_operations.cpp b/src/mongo/db/s/config/sharding_catalog_manager_database_operations.cpp
index 0a0d1157987..8434c02eeaa 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager_database_operations.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager_database_operations.cpp
@@ -34,13 +34,11 @@
#include <pcrecpp.h>
#include "mongo/bson/util/bson_extract.h"
-#include "mongo/db/commands/feature_compatibility_version.h"
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/ops/write_ops.h"
#include "mongo/db/repl/repl_client_info.h"
#include "mongo/db/s/dist_lock_manager.h"
-#include "mongo/db/s/sharding_ddl_50_upgrade_downgrade.h"
#include "mongo/db/server_options.h"
#include "mongo/db/vector_clock.h"
#include "mongo/db/write_concern.h"
@@ -199,13 +197,8 @@ DatabaseType ShardingCatalogManager::createDatabase(OperationContext* opCtx,
optPrimaryShard ? *optPrimaryShard
: selectShardForNewDatabase(opCtx, shardRegistry)));
- FixedFCVRegion fcvRegion(opCtx);
-
- boost::optional<Timestamp> clusterTime;
- if (DatabaseEntryFormat::get(fcvRegion) == DatabaseEntryFormat::kUUIDandTimestamp) {
- const auto now = VectorClock::get(opCtx)->getTime();
- clusterTime = now.clusterTime().asTimestamp();
- }
+ const auto now = VectorClock::get(opCtx)->getTime();
+ const auto clusterTime = now.clusterTime().asTimestamp();
// Pick a primary shard for the new database.
DatabaseType db(dbName.toString(),
diff --git a/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp b/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp
index 669ff694087..5be30965ad4 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager_shard_operations.cpp
@@ -59,7 +59,6 @@
#include "mongo/db/repl/repl_set_config.h"
#include "mongo/db/s/add_shard_cmd_gen.h"
#include "mongo/db/s/add_shard_util.h"
-#include "mongo/db/s/sharding_ddl_50_upgrade_downgrade.h"
#include "mongo/db/s/sharding_logging.h"
#include "mongo/db/s/type_shard_identity.h"
#include "mongo/db/vector_clock_mutable.h"
@@ -745,11 +744,8 @@ StatusWith<std::string> ShardingCatalogManager::addShard(
// Add all databases which were discovered on the new shard
for (const auto& dbName : dbNamesStatus.getValue()) {
- boost::optional<Timestamp> clusterTime;
- if (DatabaseEntryFormat::get(fcvRegion) == DatabaseEntryFormat::kUUIDandTimestamp) {
- const auto now = VectorClock::get(opCtx)->getTime();
- clusterTime = now.clusterTime().asTimestamp();
- }
+ const auto now = VectorClock::get(opCtx)->getTime();
+ const auto clusterTime = now.clusterTime().asTimestamp();
DatabaseType dbt(
dbName, shardType.getName(), false, DatabaseVersion(UUID::gen(), clusterTime));
diff --git a/src/mongo/db/s/database_sharding_state_test.cpp b/src/mongo/db/s/database_sharding_state_test.cpp
index 4522c060433..007da2b6568 100644
--- a/src/mongo/db/s/database_sharding_state_test.cpp
+++ b/src/mongo/db/s/database_sharding_state_test.cpp
@@ -118,8 +118,7 @@ public:
return std::make_unique<StaticCatalogClient>(kShardList);
}
- DatabaseType createDatabase(const UUID& uuid,
- boost::optional<Timestamp> timestamp = boost::none) {
+ DatabaseType createDatabase(const UUID& uuid, const Timestamp& timestamp) {
return DatabaseType(
kDbName.toString(), kShardList[0].getName(), true, DatabaseVersion(uuid, timestamp));
}
@@ -129,10 +128,10 @@ protected:
};
TEST_F(DatabaseShardingStateTestWithMockedLoader, OnDbVersionMismatch) {
- const auto oldDb = createDatabase(UUID::gen());
- const auto newDb = createDatabase(UUID::gen());
+ const auto oldDb = createDatabase(UUID::gen(), Timestamp(1));
+ const auto newDb = createDatabase(UUID::gen(), Timestamp(2));
- auto checkOnDbVersionMismatch = [&](const auto& newDb) {
+ auto checkOnDbVersionMismatch = [&](const auto& newDb, bool expectRefresh) {
const auto newDbVersion = newDb.getVersion();
auto opCtx = operationContext();
@@ -150,56 +149,23 @@ TEST_F(DatabaseShardingStateTestWithMockedLoader, OnDbVersionMismatch) {
activeDbVersion = getActiveDbVersion();
ASSERT_TRUE(activeDbVersion);
- ASSERT_EQ(newDbVersion.getTimestamp(), activeDbVersion->getTimestamp());
- };
-
- checkOnDbVersionMismatch(oldDb);
- checkOnDbVersionMismatch(newDb);
- checkOnDbVersionMismatch(oldDb);
-}
-
-TEST_F(DatabaseShardingStateTestWithMockedLoader, OnDbVersionMismatchWithUpdateMetadataFormat) {
- const auto uuid = UUID::gen();
- const Timestamp timestamp(42);
-
- const auto db = createDatabase(uuid);
- const auto timestampedDb = createDatabase(uuid, timestamp);
-
- auto checkOnDbVersionMismatch = [&](const auto& newDb) {
- auto opCtx = operationContext();
-
- _mockCatalogCacheLoader->setDatabaseRefreshReturnValue(newDb);
-
- auto getActiveDbVersion = [&] {
- AutoGetDb autoDb(opCtx, kDbName, MODE_IS);
- const auto dss = DatabaseShardingState::get(opCtx, kDbName);
- auto dssLock = DatabaseShardingState::DSSLock::lockShared(opCtx, dss);
- return dss->getDbVersion(opCtx, dssLock);
- };
-
- boost::optional<DatabaseVersion> activeDbVersion = getActiveDbVersion();
-
- const auto& newDbVersion = newDb.getVersion();
- ASSERT_OK(onDbVersionMismatchNoExcept(opCtx, kDbName, newDbVersion, activeDbVersion));
-
- activeDbVersion = getActiveDbVersion();
- ASSERT_TRUE(activeDbVersion);
- ASSERT_EQ(newDbVersion.getTimestamp(), activeDbVersion->getTimestamp());
+ if (expectRefresh) {
+ ASSERT_EQUALS(newDbVersion.getTimestamp(), activeDbVersion->getTimestamp());
+ }
};
- checkOnDbVersionMismatch(db);
- checkOnDbVersionMismatch(timestampedDb);
- checkOnDbVersionMismatch(db);
+ checkOnDbVersionMismatch(oldDb, true);
+ checkOnDbVersionMismatch(newDb, true);
+ checkOnDbVersionMismatch(oldDb, false);
}
-TEST_F(DatabaseShardingStateTestWithMockedLoader, ForceDatabaseRefreshWithUpdateMetadataFormat) {
+TEST_F(DatabaseShardingStateTestWithMockedLoader, ForceDatabaseRefresh) {
const auto uuid = UUID::gen();
- const Timestamp timestamp(42);
- const auto db = createDatabase(uuid);
- const auto timestampedDb = createDatabase(uuid, timestamp);
+ const auto oldDb = createDatabase(uuid, Timestamp(1));
+ const auto newDb = createDatabase(uuid, Timestamp(2));
- auto checkForceDatabaseRefresh = [&](const auto& newDb) {
+ auto checkForceDatabaseRefresh = [&](const auto& newDb, bool expectRefresh) {
const auto newDbVersion = newDb.getVersion();
auto opCtx = operationContext();
@@ -213,12 +179,14 @@ TEST_F(DatabaseShardingStateTestWithMockedLoader, ForceDatabaseRefreshWithUpdate
return dss->getDbVersion(opCtx, dssLock);
}();
ASSERT_TRUE(activeDbVersion);
- ASSERT_EQ(newDbVersion.getTimestamp(), activeDbVersion->getTimestamp());
+ if (expectRefresh) {
+ ASSERT_EQ(newDbVersion.getTimestamp(), activeDbVersion->getTimestamp());
+ }
};
- checkForceDatabaseRefresh(db);
- checkForceDatabaseRefresh(timestampedDb);
- checkForceDatabaseRefresh(db);
+ checkForceDatabaseRefresh(oldDb, true);
+ checkForceDatabaseRefresh(newDb, true);
+ checkForceDatabaseRefresh(oldDb, false);
}
} // namespace
diff --git a/src/mongo/db/s/metadata_manager_test.cpp b/src/mongo/db/s/metadata_manager_test.cpp
index dc59cd318e4..3002cafe317 100644
--- a/src/mongo/db/s/metadata_manager_test.cpp
+++ b/src/mongo/db/s/metadata_manager_test.cpp
@@ -94,7 +94,7 @@ protected:
kNss, range, ChunkVersion(1, 0, epoch, boost::none /* timestamp */), kOtherShard}});
return CollectionMetadata(ChunkManager(kThisShard,
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none),
kThisShard);
diff --git a/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp b/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp
index 8331d16be84..ffdf12f08c8 100644
--- a/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp
+++ b/src/mongo/db/s/migration_chunk_cloner_source_legacy_test.cpp
@@ -144,7 +144,7 @@ protected:
}
/**
- * Creates a collection, which contains an index corresponding to kShardKeyPattern and insers
+ * Creates a collection, which contains an index corresponding to kShardKeyPattern and inserts
* the specified initial documents.
*/
void createShardedCollection(const std::vector<BSONObj>& initialDocs) {
@@ -187,7 +187,7 @@ protected:
operationContext(),
CollectionMetadata(
ChunkManager(ShardId("dummyShardId"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none),
ShardId("dummyShardId")));
diff --git a/src/mongo/db/s/migration_util_test.cpp b/src/mongo/db/s/migration_util_test.cpp
index 48ca52613fc..3c50b5eab20 100644
--- a/src/mongo/db/s/migration_util_test.cpp
+++ b/src/mongo/db/s/migration_util_test.cpp
@@ -350,8 +350,9 @@ public:
const ShardKeyPattern kShardKeyPattern = ShardKeyPattern(BSON("_id" << 1));
const UUID kDefaultUUID = UUID::gen();
const OID kEpoch = OID::gen();
- const DatabaseType kDefaultDatabaseType =
- DatabaseType(kNss.db().toString(), ShardId("0"), true, DatabaseVersion(kDefaultUUID));
+ const Timestamp kDefaultTimestamp = Timestamp();
+ const DatabaseType kDefaultDatabaseType = DatabaseType(
+ kNss.db().toString(), ShardId("0"), true, DatabaseVersion(kDefaultUUID, kDefaultTimestamp));
const std::vector<ShardType> kShardList = {ShardType("0", "Host0:12345"),
ShardType("1", "Host1:12345")};
diff --git a/src/mongo/db/s/op_observer_sharding_test.cpp b/src/mongo/db/s/op_observer_sharding_test.cpp
index 9f67cb2c930..076f4d8ee82 100644
--- a/src/mongo/db/s/op_observer_sharding_test.cpp
+++ b/src/mongo/db/s/op_observer_sharding_test.cpp
@@ -82,7 +82,7 @@ protected:
{std::move(chunk)});
return CollectionMetadata(ChunkManager(ShardId("this"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
Timestamp(100, 0)),
ShardId("this"));
diff --git a/src/mongo/db/s/operation_sharding_state.cpp b/src/mongo/db/s/operation_sharding_state.cpp
index 1280a50e9a6..66a91cdb2b1 100644
--- a/src/mongo/db/s/operation_sharding_state.cpp
+++ b/src/mongo/db/s/operation_sharding_state.cpp
@@ -102,8 +102,8 @@ void OperationShardingState::initializeClientRoutingVersions(
}
}
if (dbVersion) {
- invariant(_databaseVersions.find(nss.db()) == _databaseVersions.end());
- _databaseVersions[nss.db()] = *dbVersion;
+ const auto [_, inserted] = _databaseVersions.emplace(nss.db(), *dbVersion);
+ invariant(inserted);
}
}
diff --git a/src/mongo/db/s/range_deletion_util_test.cpp b/src/mongo/db/s/range_deletion_util_test.cpp
index f4300ae3a2c..1b0e75d6327 100644
--- a/src/mongo/db/s/range_deletion_util_test.cpp
+++ b/src/mongo/db/s/range_deletion_util_test.cpp
@@ -121,7 +121,7 @@ public:
->setFilteringMetadata(
operationContext(),
CollectionMetadata(ChunkManager(ShardId("dummyShardId"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none),
ShardId("dummyShardId")));
diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp b/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp
index 638075c34f3..234d148641d 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp
@@ -387,7 +387,7 @@ public:
DatabaseType dbDoc(coordinatorDoc.getSourceNss().db().toString(),
coordinatorDoc.getDonorShards().front().getId(),
true,
- DatabaseVersion{UUID::gen()});
+ DatabaseVersion{UUID::gen(), Timestamp()});
client.insert(DatabaseType::ConfigNS.ns(), dbDoc.toBSON());
return coordinatorDoc;
diff --git a/src/mongo/db/s/resharding/resharding_data_replication_test.cpp b/src/mongo/db/s/resharding/resharding_data_replication_test.cpp
index a911af349f7..9e8b4d1c3e1 100644
--- a/src/mongo/db/s/resharding/resharding_data_replication_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_data_replication_test.cpp
@@ -92,7 +92,7 @@ public:
chunks);
return ChunkManager(_myDonorId,
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none /* clusterTime */);
}
diff --git a/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.h b/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.h
index 499ff3a5301..858cdc4643c 100644
--- a/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.h
+++ b/src/mongo/db/s/resharding/resharding_donor_recipient_common_test.h
@@ -51,6 +51,7 @@ using namespace fmt::literals;
class ReshardingDonorRecipientCommonInternalsTest : public ShardServerTestFixture {
public:
const UUID kExistingUUID = UUID::gen();
+ const Timestamp kExistingTimestamp = Timestamp();
const NamespaceString kOriginalNss = NamespaceString("db", "foo");
const NamespaceString kTemporaryReshardingNss =
@@ -62,6 +63,7 @@ public:
const OID kOriginalEpoch = OID::gen();
const OID kReshardingEpoch = OID::gen();
const UUID kReshardingUUID = UUID::gen();
+ const Timestamp kReshardingTimestamp = Timestamp(kExistingTimestamp.getSecs() + 1, 0);
const DonorShardFetchTimestamp kThisShard =
makeDonorShardFetchTimestamp(ShardId("shardOne"), Timestamp(10, 0));
@@ -80,6 +82,7 @@ protected:
kOriginalShardKey,
kOriginalShardKeyPattern,
kExistingUUID,
+ kExistingTimestamp,
kOriginalEpoch,
shardThatChunkExistsOn);
}
@@ -91,6 +94,7 @@ protected:
kReshardingKey,
kReshardingKeyPattern,
kReshardingUUID,
+ kReshardingTimestamp,
kReshardingEpoch,
shardThatChunkExistsOn);
}
@@ -100,13 +104,14 @@ protected:
const std::string& shardKey,
const BSONObj& shardKeyPattern,
const UUID& uuid,
+ const Timestamp& timestamp,
const OID& epoch,
const ShardId& shardThatChunkExistsOn) {
auto range = ChunkRange(BSON(shardKey << MINKEY), BSON(shardKey << MAXKEY));
auto chunk = ChunkType(
nss, std::move(range), ChunkVersion(1, 0, epoch, boost::none), shardThatChunkExistsOn);
ChunkManager cm(kThisShard.getShardId(),
- DatabaseVersion(uuid),
+ DatabaseVersion(uuid, timestamp),
makeStandaloneRoutingTableHistory(
RoutingTableHistory::makeNew(nss,
uuid,
diff --git a/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp b/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp
index ef205fbd7fe..b503567685b 100644
--- a/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_oplog_applier_test.cpp
@@ -197,7 +197,7 @@ public:
chunks);
return ChunkManager(_sourceId.getShardId(),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none);
}
diff --git a/src/mongo/db/s/resharding/resharding_oplog_batch_applier_test.cpp b/src/mongo/db/s/resharding/resharding_oplog_batch_applier_test.cpp
index 88160624032..c97b47ffce8 100644
--- a/src/mongo/db/s/resharding/resharding_oplog_batch_applier_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_oplog_batch_applier_test.cpp
@@ -306,7 +306,7 @@ private:
chunks);
return ChunkManager(_myDonorId,
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none /* clusterTime */);
}
diff --git a/src/mongo/db/s/resharding/resharding_oplog_crud_application_test.cpp b/src/mongo/db/s/resharding/resharding_oplog_crud_application_test.cpp
index b155330628d..b933e609fc1 100644
--- a/src/mongo/db/s/resharding/resharding_oplog_crud_application_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_oplog_crud_application_test.cpp
@@ -268,7 +268,7 @@ private:
chunks);
return ChunkManager(_myDonorId,
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none /* clusterTime */);
}
diff --git a/src/mongo/db/s/resharding/resharding_recipient_service_external_state_test.cpp b/src/mongo/db/s/resharding/resharding_recipient_service_external_state_test.cpp
index ba38767c4be..074a5f74aaa 100644
--- a/src/mongo/db/s/resharding/resharding_recipient_service_external_state_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_recipient_service_external_state_test.cpp
@@ -203,10 +203,10 @@ public:
void expectStaleDbVersionError(const NamespaceString& nss, StringData expectedCmdName) {
onCommand([&](const executor::RemoteCommandRequest& request) {
ASSERT_EQ(request.cmdObj.firstElementFieldNameStringData(), expectedCmdName);
- return createErrorCursorResponse(
- Status(StaleDbRoutingVersion(
- nss.db().toString(), DatabaseVersion(UUID::gen()), boost::none),
- "dummy stale db version error"));
+ return createErrorCursorResponse(Status(
+ StaleDbRoutingVersion(
+ nss.db().toString(), DatabaseVersion(UUID::gen(), Timestamp()), boost::none),
+ "dummy stale db version error"));
});
}
diff --git a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp
index 5dbe89aab0b..481d04a3556 100644
--- a/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_recipient_service_test.cpp
@@ -97,7 +97,7 @@ public:
chunks);
return ChunkManager(_someDonorId,
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
_makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none /* clusterTime */);
}
diff --git a/src/mongo/db/s/resharding_destined_recipient_test.cpp b/src/mongo/db/s/resharding_destined_recipient_test.cpp
index 26eb6ca32d0..362a88e9c30 100644
--- a/src/mongo/db/s/resharding_destined_recipient_test.cpp
+++ b/src/mongo/db/s/resharding_destined_recipient_test.cpp
@@ -178,7 +178,7 @@ protected:
UUID sourceUuid;
ShardId destShard;
ChunkVersion version;
- DatabaseVersion dbVersion;
+ DatabaseVersion dbVersion{UUID::gen(), Timestamp()};
};
ReshardingEnv setupReshardingEnv(OperationContext* opCtx, bool refreshTempNss) {
@@ -196,7 +196,6 @@ protected:
ReshardingEnv env(CollectionCatalog::get(opCtx)->lookupUUIDByNSS(opCtx, kNss).value());
env.destShard = kShardList[1].getName();
env.version = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */);
- env.dbVersion = DatabaseVersion(UUID::gen());
env.tempNss =
NamespaceString(kNss.db(),
fmt::format("{}{}",
diff --git a/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp b/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp
index 9f4443d8069..09ed06890cf 100644
--- a/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp
+++ b/src/mongo/db/s/shard_server_catalog_cache_loader_test.cpp
@@ -440,7 +440,7 @@ TEST_F(ShardServerCatalogCacheLoaderTest, PrimaryLoadFromShardedAndFindMixedChun
TEST_F(ShardServerCatalogCacheLoaderTest, PrimaryLoadFromShardedAndFindDbMetadataFormatChanged) {
const std::string dbName("dbName");
- DatabaseVersion version(UUID::gen());
+ DatabaseVersion version(UUID::gen(), Timestamp());
DatabaseType dbType(dbName, kShardId, true /* sharded */, version);
_remoteLoaderMock->setDatabaseRefreshReturnValue(dbType);
diff --git a/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.cpp b/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.cpp
index d372eb4d47a..254ed55ad68 100644
--- a/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.cpp
+++ b/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.cpp
@@ -36,21 +36,6 @@ namespace mongo {
using FeatureCompatibility = ServerGlobalParams::FeatureCompatibility;
using FCVersion = FeatureCompatibility::Version;
-DatabaseEntryFormat::Format DatabaseEntryFormat::get(const FixedFCVRegion& fcvRegion) {
- switch (fcvRegion->getVersion()) {
- case FCVersion::kUpgradingFrom44To50:
- case FCVersion::kUpgradingFrom49To50:
- case FCVersion::kUpgradingFrom50To51:
- case FCVersion::kDowngradingFrom51To50:
- case FCVersion::kFullyDowngradedTo50:
- case FCVersion::kVersion51:
- return Format::kUUIDandTimestamp;
-
- default:
- return Format::kUUIDOnly;
- }
-}
-
ChunkEntryFormat::Format ChunkEntryFormat::get(const FixedFCVRegion& fcvRegion) {
return getForVersionCallerGuaranteesFCVStability(fcvRegion->getVersion());
}
diff --git a/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.h b/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.h
index 9383d0a6c8a..cb0c23ee63b 100644
--- a/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.h
+++ b/src/mongo/db/s/sharding_ddl_50_upgrade_downgrade.h
@@ -33,15 +33,6 @@
namespace mongo {
-struct DatabaseEntryFormat {
- enum Format {
- kUUIDOnly,
- kUUIDandTimestamp,
- };
-
- static Format get(const FixedFCVRegion& fcvRegion);
-};
-
struct ChunkEntryFormat {
enum Format {
kNamespaceOnlyNoTimestamps, // Chunks have ns, no timestamps in the version
diff --git a/src/mongo/s/build_versioned_requests_for_targeted_shards_test.cpp b/src/mongo/s/build_versioned_requests_for_targeted_shards_test.cpp
index accbd515922..f82794e31f3 100644
--- a/src/mongo/s/build_versioned_requests_for_targeted_shards_test.cpp
+++ b/src/mongo/s/build_versioned_requests_for_targeted_shards_test.cpp
@@ -73,7 +73,8 @@ protected:
void expectGetDatabaseUnsharded() {
expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
- DatabaseType db(kNss.db().toString(), {"0"}, false, DatabaseVersion(UUID::gen()));
+ DatabaseType db(
+ kNss.db().toString(), {"0"}, false, DatabaseVersion(UUID::gen(), Timestamp()));
return std::vector<BSONObj>{db.toBSON()};
}());
}
diff --git a/src/mongo/s/catalog/sharding_catalog_client_test.cpp b/src/mongo/s/catalog/sharding_catalog_client_test.cpp
index 54528489f36..cd23a564d32 100644
--- a/src/mongo/s/catalog/sharding_catalog_client_test.cpp
+++ b/src/mongo/s/catalog/sharding_catalog_client_test.cpp
@@ -158,7 +158,8 @@ TEST_F(ShardingCatalogClientTest, GetDatabaseInvalidName) {
TEST_F(ShardingCatalogClientTest, GetDatabaseExisting) {
configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1"));
- DatabaseType expectedDb("bigdata", ShardId("shard0000"), true, DatabaseVersion(UUID::gen()));
+ DatabaseType expectedDb(
+ "bigdata", ShardId("shard0000"), true, DatabaseVersion(UUID::gen(), Timestamp()));
const OpTime newOpTime(Timestamp(7, 6), 5);
@@ -205,7 +206,8 @@ TEST_F(ShardingCatalogClientTest, GetDatabaseStaleSecondaryRetrySuccess) {
HostAndPort secondHost{"TestHost2"};
configTargeter()->setFindHostReturnValue(firstHost);
- DatabaseType expectedDb("bigdata", ShardId("shard0000"), true, DatabaseVersion(UUID::gen()));
+ DatabaseType expectedDb(
+ "bigdata", ShardId("shard0000"), true, DatabaseVersion(UUID::gen(), Timestamp()));
auto future = launchAsync([this, &expectedDb] {
return catalogClient()->getDatabase(
@@ -891,8 +893,10 @@ TEST_F(ShardingCatalogClientTest, GetCollectionsInvalidCollectionType) {
TEST_F(ShardingCatalogClientTest, GetDatabasesForShardValid) {
configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1"));
- DatabaseType dbt1("db1", ShardId("shard0000"), false, DatabaseVersion(UUID::gen()));
- DatabaseType dbt2("db2", ShardId("shard0000"), false, DatabaseVersion(UUID::gen()));
+ DatabaseType dbt1(
+ "db1", ShardId("shard0000"), false, DatabaseVersion(UUID::gen(), Timestamp()));
+ DatabaseType dbt2(
+ "db2", ShardId("shard0000"), false, DatabaseVersion(UUID::gen(), Timestamp()));
auto future = launchAsync([this] {
return assertGet(
@@ -934,7 +938,7 @@ TEST_F(ShardingCatalogClientTest, GetDatabasesForShardInvalidDoc) {
});
onFindCommand([](const RemoteCommandRequest& request) {
- DatabaseType dbt1("db1", {"shard0000"}, false, DatabaseVersion(UUID::gen()));
+ DatabaseType dbt1("db1", {"shard0000"}, false, DatabaseVersion(UUID::gen(), Timestamp()));
return vector<BSONObj>{
dbt1.toBSON(),
BSON(DatabaseType::name() << 0) // DatabaseType::name() should be a string
@@ -1039,7 +1043,7 @@ TEST_F(ShardingCatalogClientTest, GetTagsForCollectionInvalidTag) {
TEST_F(ShardingCatalogClientTest, UpdateDatabase) {
configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1"));
- DatabaseType dbt("test", ShardId("shard0000"), true, DatabaseVersion(UUID::gen()));
+ DatabaseType dbt("test", ShardId("shard0000"), true, DatabaseVersion(UUID::gen(), Timestamp()));
auto future = launchAsync([this, dbt] {
auto status =
@@ -1086,7 +1090,8 @@ TEST_F(ShardingCatalogClientTest, UpdateConfigDocumentNonRetryableError) {
HostAndPort host1("TestHost1");
configTargeter()->setFindHostReturnValue(host1);
- DatabaseType dbt("test", ShardId("shard0001"), false, DatabaseVersion(UUID::gen()));
+ DatabaseType dbt(
+ "test", ShardId("shard0001"), false, DatabaseVersion(UUID::gen(), Timestamp()));
auto future = launchAsync([this, dbt] {
auto status =
@@ -1287,7 +1292,8 @@ TEST_F(ShardingCatalogClientTest, RetryOnFindCommandNetworkErrorSucceedsAtMaxRet
}
onFindCommand([](const RemoteCommandRequest& request) {
- DatabaseType dbType("TestDB", ShardId("TestShard"), true, DatabaseVersion(UUID::gen()));
+ DatabaseType dbType(
+ "TestDB", ShardId("TestShard"), true, DatabaseVersion(UUID::gen(), Timestamp()));
return vector<BSONObj>{dbType.toBSON()};
});
diff --git a/src/mongo/s/catalog/type_database_test.cpp b/src/mongo/s/catalog/type_database_test.cpp
index 8a9eb73dcda..fe126d6b390 100644
--- a/src/mongo/s/catalog/type_database_test.cpp
+++ b/src/mongo/s/catalog/type_database_test.cpp
@@ -47,10 +47,12 @@ TEST(DatabaseType, Empty) {
TEST(DatabaseType, Basic) {
UUID uuid = UUID::gen();
+ Timestamp timestamp = Timestamp();
StatusWith<DatabaseType> status = DatabaseType::fromBSON(
BSON(DatabaseType::name("mydb")
<< DatabaseType::primary("shard") << DatabaseType::sharded(true)
- << DatabaseType::version(BSON("uuid" << uuid << "lastMod" << 0))));
+ << DatabaseType::version(
+ BSON("uuid" << uuid << "lastMod" << 0 << "timestamp" << timestamp))));
ASSERT_TRUE(status.isOK());
DatabaseType db = status.getValue();
diff --git a/src/mongo/s/catalog_cache_refresh_test.cpp b/src/mongo/s/catalog_cache_refresh_test.cpp
index 6a527696088..9560317bc54 100644
--- a/src/mongo/s/catalog_cache_refresh_test.cpp
+++ b/src/mongo/s/catalog_cache_refresh_test.cpp
@@ -59,7 +59,8 @@ protected:
void expectGetDatabase() {
expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
- DatabaseType db(kNss.db().toString(), {"0"}, true, DatabaseVersion(UUID::gen()));
+ DatabaseType db(
+ kNss.db().toString(), {"0"}, true, DatabaseVersion(UUID::gen(), Timestamp()));
return std::vector<BSONObj>{db.toBSON()};
}());
}
diff --git a/src/mongo/s/catalog_cache_test.cpp b/src/mongo/s/catalog_cache_test.cpp
index 0d6827577ff..5e5d41c7df8 100644
--- a/src/mongo/s/catalog_cache_test.cpp
+++ b/src/mongo/s/catalog_cache_test.cpp
@@ -181,7 +181,7 @@ protected:
TEST_F(CatalogCacheTest, GetDatabase) {
const auto dbName = "testDB";
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
_catalogCacheLoader->setDatabaseRefreshReturnValue(
DatabaseType(dbName, kShards[0], true, dbVersion));
@@ -197,7 +197,7 @@ TEST_F(CatalogCacheTest, GetDatabase) {
TEST_F(CatalogCacheTest, GetCachedDatabase) {
const auto dbName = "testDB";
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
loadDatabases({DatabaseType(dbName, kShards[0], true, dbVersion)});
const auto swDatabase = _catalogCache->getDatabase(operationContext(), dbName);
@@ -212,7 +212,7 @@ TEST_F(CatalogCacheTest, GetCachedDatabase) {
TEST_F(CatalogCacheTest, InvalidateSingleDbOnShardRemoval) {
const auto dbName = "testDB";
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
loadDatabases({DatabaseType(dbName, kShards[0], true, dbVersion)});
_catalogCache->invalidateEntriesThatReferenceShard(kShards[0]);
@@ -227,7 +227,7 @@ TEST_F(CatalogCacheTest, InvalidateSingleDbOnShardRemoval) {
TEST_F(CatalogCacheTest, OnStaleDatabaseVersionNoVersion) {
// onStaleDatabaseVesrsion must invalidate the database entry if invoked with no version
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)});
_catalogCache->onStaleDatabaseVersion(kNss.db(), boost::none);
@@ -237,7 +237,7 @@ TEST_F(CatalogCacheTest, OnStaleDatabaseVersionNoVersion) {
}
TEST_F(CatalogCacheTest, OnStaleShardVersionWithSameVersion) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto cachedCollVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */);
loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)});
@@ -248,7 +248,7 @@ TEST_F(CatalogCacheTest, OnStaleShardVersionWithSameVersion) {
}
TEST_F(CatalogCacheTest, OnStaleShardVersionWithNoVersion) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto cachedCollVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */);
loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)});
@@ -261,7 +261,7 @@ TEST_F(CatalogCacheTest, OnStaleShardVersionWithNoVersion) {
}
TEST_F(CatalogCacheTest, OnStaleShardVersionWithGraterVersion) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto cachedCollVersion = ChunkVersion(1, 0, OID::gen(), boost::none /* timestamp */);
const auto wantedCollVersion =
ChunkVersion(2, 0, cachedCollVersion.epoch(), cachedCollVersion.getTimestamp());
@@ -278,7 +278,7 @@ TEST_F(CatalogCacheTest, OnStaleShardVersionWithGraterVersion) {
TEST_F(CatalogCacheTest, GetDatabaseWithMetadataFormatChange) {
const auto dbName = "testDB";
const auto uuid = UUID::gen();
- const DatabaseVersion versionWithoutTimestamp(uuid);
+ const DatabaseVersion versionWithoutTimestamp(uuid, Timestamp());
const DatabaseVersion versionWithTimestamp(uuid, Timestamp(42));
auto getDatabaseWithRefreshAndCheckResults = [&](const DatabaseVersion& version) {
@@ -303,7 +303,7 @@ TEST_F(CatalogCacheTest, GetDatabaseWithMetadataFormatChange) {
}
TEST_F(CatalogCacheTest, GetCollectionWithMetadataFormatChange) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto epoch = OID::gen();
const auto collVersionWithoutTimestamp = ChunkVersion(1, 0, epoch, boost::none /* timestamp */);
const auto collVersionWithTimestamp = ChunkVersion(1, 0, epoch, Timestamp(42));
@@ -342,7 +342,7 @@ TEST_F(CatalogCacheTest, GetCollectionWithMetadataFormatChange) {
TEST_F(CatalogCacheTest,
GetCollectionWithRefreshDuringUpgradeWithMetadataFormatChangeChunksDontMatchCollection) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto epoch = OID::gen();
const auto timestamp = Timestamp(42);
@@ -372,7 +372,7 @@ TEST_F(CatalogCacheTest,
TEST_F(CatalogCacheTest,
GetCollectionWithRefreshDuringUpgradeWithMetadataFormatChangeSomeChunksMatchCollection) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto epoch = OID::gen();
const auto timestamp = Timestamp(42);
@@ -409,7 +409,7 @@ TEST_F(CatalogCacheTest,
}
TEST_F(CatalogCacheTest, GetCollectionWithRefreshDuringDowngradeWithMetadataFormatChange) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto epoch = OID::gen();
const auto timestamp = Timestamp(42);
@@ -438,7 +438,7 @@ TEST_F(CatalogCacheTest, GetCollectionWithRefreshDuringDowngradeWithMetadataForm
}
TEST_F(CatalogCacheTest, TimeseriesFieldsAreProperlyPropagatedOnCC) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto epoch = OID::gen();
const auto version = ChunkVersion(1, 0, epoch, Timestamp(42));
@@ -461,7 +461,7 @@ TEST_F(CatalogCacheTest, TimeseriesFieldsAreProperlyPropagatedOnCC) {
}
TEST_F(CatalogCacheTest, LookupCollectionWithInvalidOptions) {
- const auto dbVersion = DatabaseVersion(UUID::gen());
+ const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
const auto epoch = OID::gen();
const auto version = ChunkVersion(1, 0, epoch, Timestamp(42));
diff --git a/src/mongo/s/catalog_cache_test_fixture.cpp b/src/mongo/s/catalog_cache_test_fixture.cpp
index 30ac640025c..975c8804914 100644
--- a/src/mongo/s/catalog_cache_test_fixture.cpp
+++ b/src/mongo/s/catalog_cache_test_fixture.cpp
@@ -133,7 +133,8 @@ ChunkManager CatalogCacheTestFixture::makeChunkManager(
ChunkVersion version(1, 0, OID::gen(), boost::none /* timestamp */);
const BSONObj databaseBSON = [&]() {
- DatabaseType db(nss.db().toString(), {"0"}, true, DatabaseVersion(UUID::gen()));
+ DatabaseType db(
+ nss.db().toString(), {"0"}, true, DatabaseVersion(UUID::gen(), Timestamp()));
return db.toBSON();
}();
@@ -194,7 +195,8 @@ ChunkManager CatalogCacheTestFixture::makeChunkManager(
void CatalogCacheTestFixture::expectGetDatabase(NamespaceString nss, std::string shardId) {
expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
- DatabaseType db(nss.db().toString(), {shardId}, true, DatabaseVersion(UUID::gen()));
+ DatabaseType db(
+ nss.db().toString(), {shardId}, true, DatabaseVersion(UUID::gen(), Timestamp()));
return std::vector<BSONObj>{db.toBSON()};
}());
}
diff --git a/src/mongo/s/chunk_manager_query_test.cpp b/src/mongo/s/chunk_manager_query_test.cpp
index 47b325d5414..5d9832ae690 100644
--- a/src/mongo/s/chunk_manager_query_test.cpp
+++ b/src/mongo/s/chunk_manager_query_test.cpp
@@ -533,7 +533,7 @@ TEST_F(ChunkManagerQueryTest, SnapshotQueryWithMoreShardsThanLatestMetadata) {
ChunkHistory(Timestamp(1, 0), ShardId("1"))});
ChunkManager chunkManager(ShardId("0"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(oldRoutingTable.makeUpdated(
boost::none, boost::none, true, {chunk1})),
Timestamp(5, 0));
diff --git a/src/mongo/s/chunk_manager_refresh_bm.cpp b/src/mongo/s/chunk_manager_refresh_bm.cpp
index dd1012548dc..a8c7b626331 100644
--- a/src/mongo/s/chunk_manager_refresh_bm.cpp
+++ b/src/mongo/s/chunk_manager_refresh_bm.cpp
@@ -92,7 +92,7 @@ CollectionMetadata makeChunkManagerWithShardSelector(int nShards,
true,
chunks);
return CollectionMetadata(ChunkManager(ShardId("Shard0"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none),
ShardId("shard0"));
@@ -123,7 +123,7 @@ MONGO_COMPILER_NOINLINE auto runIncrementalUpdate(const CollectionMetadata& cm,
auto rt = cm.getChunkManager()->getRoutingTableHistory_ForTest().makeUpdated(
boost::none, boost::none, true, newChunks);
return CollectionMetadata(ChunkManager(ShardId("shard0"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none),
ShardId("shard0"));
@@ -184,7 +184,7 @@ auto BM_FullBuildOfChunkManager(benchmark::State& state, ShardSelectorFn selectS
chunks);
benchmark::DoNotOptimize(
CollectionMetadata(ChunkManager(ShardId("shard0"),
- DatabaseVersion(UUID::gen()),
+ DatabaseVersion(UUID::gen(), Timestamp()),
makeStandaloneRoutingTableHistory(std::move(rt)),
boost::none),
ShardId("shard0")));
diff --git a/src/mongo/s/comparable_database_version_test.cpp b/src/mongo/s/comparable_database_version_test.cpp
index cbf2d9b6869..2e2ce305ed9 100644
--- a/src/mongo/s/comparable_database_version_test.cpp
+++ b/src/mongo/s/comparable_database_version_test.cpp
@@ -42,7 +42,6 @@ TEST(ComparableDatabaseVersionTest, VersionsEqual) {
ASSERT(version == version);
};
- versionsEqual(DatabaseVersion(UUID::gen()));
versionsEqual(DatabaseVersion(UUID::gen(), Timestamp(1)));
}
@@ -53,20 +52,9 @@ TEST(ComparableDatabaseVersionTest, VersionsEqualAfterCopy) {
ASSERT(version1 == version2);
};
- versionsEqualAfterCopy(DatabaseVersion(UUID::gen()));
versionsEqualAfterCopy(DatabaseVersion(UUID::gen(), Timestamp(1)));
}
-TEST(ComparableDatabaseVersionTest, CompareVersionDifferentUuids) {
- const auto version1 =
- ComparableDatabaseVersion::makeComparableDatabaseVersion(DatabaseVersion(UUID::gen()));
- const auto version2 =
- ComparableDatabaseVersion::makeComparableDatabaseVersion(DatabaseVersion(UUID::gen()));
- ASSERT(version2 != version1);
- ASSERT(version2 > version1);
- ASSERT_FALSE(version2 < version1);
-}
-
TEST(ComparableDatabaseVersionTest, CompareVersionDifferentTimestamps) {
const auto version1 = ComparableDatabaseVersion::makeComparableDatabaseVersion(
DatabaseVersion(UUID::gen(), Timestamp(3)));
@@ -77,57 +65,6 @@ TEST(ComparableDatabaseVersionTest, CompareVersionDifferentTimestamps) {
ASSERT_FALSE(version2 > version1);
}
-TEST(ComparableDatabaseVersionTest, CompareEpochBasedVersionAgainstEpochAndTimestampBasedVersion) {
- {
- auto equalVersions = [](const DatabaseVersion& v1, const DatabaseVersion& v2) {
- const auto version1 = ComparableDatabaseVersion::makeComparableDatabaseVersion(v1);
- const auto version2 = ComparableDatabaseVersion::makeComparableDatabaseVersion(v2);
- ASSERT(version1 == version2);
- ASSERT_FALSE(version1 < version2);
- ASSERT_FALSE(version1 > version2);
- };
-
- const auto epoch = UUID::gen();
- const DatabaseVersion v1(epoch);
- const DatabaseVersion v2(epoch, Timestamp(1));
- equalVersions(v1, v2);
- equalVersions(v2, v1);
- }
-
- {
- auto diffVersionsMoreRecentByLastMod = [](const DatabaseVersion& v1,
- const DatabaseVersion& v2) {
- const auto version1 = ComparableDatabaseVersion::makeComparableDatabaseVersion(v1);
- const auto version2 = ComparableDatabaseVersion::makeComparableDatabaseVersion(v2);
- ASSERT(version1 != version2);
- ASSERT(version1 > version2);
- ASSERT_FALSE(version1 < version2);
- };
-
- const auto epoch = UUID::gen();
- const DatabaseVersion v1(epoch);
- const DatabaseVersion v2(epoch, Timestamp(1));
- diffVersionsMoreRecentByLastMod(v1.makeUpdated(), v2);
- diffVersionsMoreRecentByLastMod(v2.makeUpdated(), v1);
- }
-
- {
- auto diffVersionsMoreRecentByDisambigSeqNum = [](const DatabaseVersion& v1,
- const DatabaseVersion& v2) {
- const auto version1 = ComparableDatabaseVersion::makeComparableDatabaseVersion(v1);
- const auto version2 = ComparableDatabaseVersion::makeComparableDatabaseVersion(v2);
- ASSERT(version1 != version2);
- ASSERT(version1 < version2);
- ASSERT_FALSE(version1 > version2);
- };
-
- const DatabaseVersion v1(UUID::gen());
- const DatabaseVersion v2(UUID::gen(), Timestamp(1));
- diffVersionsMoreRecentByDisambigSeqNum(v1, v2);
- diffVersionsMoreRecentByDisambigSeqNum(v2, v1);
- }
-}
-
TEST(ComparableDatabaseVersionTest, VersionGreaterSameUuidOrTimestamp) {
auto versionGreaterSameUuidOrTimestamp = [](const DatabaseVersion& v1) {
const DatabaseVersion v2 = v1.makeUpdated();
@@ -138,8 +75,7 @@ TEST(ComparableDatabaseVersionTest, VersionGreaterSameUuidOrTimestamp) {
ASSERT_FALSE(version2 < version1);
};
- versionGreaterSameUuidOrTimestamp(DatabaseVersion(UUID::gen()));
- versionGreaterSameUuidOrTimestamp(DatabaseVersion(UUID::gen(), Timestamp(1)));
+ versionGreaterSameUuidOrTimestamp(DatabaseVersion(UUID::gen(), Timestamp(0)));
}
TEST(ComparableDatabaseVersionTest, VersionLessSameUuidOrTimestamp) {
@@ -152,7 +88,6 @@ TEST(ComparableDatabaseVersionTest, VersionLessSameUuidOrTimestamp) {
ASSERT_FALSE(version1 > version2);
};
- versionLessSameUuidOrTimestamp(DatabaseVersion(UUID::gen()));
versionLessSameUuidOrTimestamp(DatabaseVersion(UUID::gen(), Timestamp(1)));
}
@@ -173,8 +108,7 @@ TEST(ComparableDatabaseVersionTest, DefaultConstructedVersionIsAlwaysLess) {
ASSERT_FALSE(defaultVersion > version1);
};
- defaultConstructedVersionIsAlwaysLess(DatabaseVersion(UUID::gen()));
- defaultConstructedVersionIsAlwaysLess(DatabaseVersion(UUID::gen(), Timestamp(1)));
+ defaultConstructedVersionIsAlwaysLess(DatabaseVersion(UUID::gen(), Timestamp()));
}
TEST(ComparableDatabaseVersionTest, CompareForcedRefreshVersionVersusValidDatabaseVersion) {
@@ -199,9 +133,8 @@ TEST(ComparableDatabaseVersionTest, CompareForcedRefreshVersionVersusValidDataba
ASSERT(defaultVersionAfterForce < forcedRefreshVersion);
};
- compareForcedRefreshVersionVersusValidDatabaseVersion(DatabaseVersion(UUID::gen()));
compareForcedRefreshVersionVersusValidDatabaseVersion(
- DatabaseVersion(UUID::gen(), Timestamp(1)));
+ DatabaseVersion(UUID::gen(), Timestamp()));
}
TEST(ComparableDatabaseVersionTest, CompareTwoForcedRefreshVersions) {
diff --git a/src/mongo/s/database_version.cpp b/src/mongo/s/database_version.cpp
index 7ca5de2f01b..3a0af40956a 100644
--- a/src/mongo/s/database_version.cpp
+++ b/src/mongo/s/database_version.cpp
@@ -37,9 +37,8 @@ AtomicWord<uint64_t> ComparableDatabaseVersion::_uuidDisambiguatingSequenceNumSo
AtomicWord<uint64_t> ComparableDatabaseVersion::_forcedRefreshSequenceNumSource{1ULL};
DatabaseVersion DatabaseVersion::makeFixed() {
- DatabaseVersion dbVersion;
+ DatabaseVersion dbVersion(UUID::gen(), Timestamp());
dbVersion.setLastMod(0);
- dbVersion.setUuid(UUID::gen());
return dbVersion;
}
DatabaseVersion DatabaseVersion::makeUpdated() const {
@@ -104,23 +103,17 @@ bool ComparableDatabaseVersion::operator<(const ComparableDatabaseVersion& other
return false; // Only default constructed values have _forcedRefreshSequenceNum == 0 and
// they are always equal
- // 1. If both versions are valid and have timestamps
- // 1.1. if their timestamps are the same -> rely on lastMod to define the order
- // 1.2. Otherwise -> rely on the timestamps values to define order
- // 2. If both versions are valid and have the same uuid -> rely on lastMod to define the order
- // 3. Any other scenario -> rely on disambiguating sequence number
+ // 1. If both versions are valid
+ // 1.1. If both timestamps are the same -> rely on lastMod to define the order
+ // 1.2. Otherwise -> rely on the timestamps' values to define order
+ // 2. Any other scenario -> rely on disambiguating sequence number
if (_dbVersion && other._dbVersion) {
const auto timestamp = _dbVersion->getTimestamp();
const auto otherTimestamp = other._dbVersion->getTimestamp();
- if (timestamp && otherTimestamp) {
- if (*timestamp == *otherTimestamp)
- return _dbVersion->getLastMod() < other._dbVersion->getLastMod();
- else
- return *timestamp < *otherTimestamp;
-
- } else if (_dbVersion->getUuid() == other._dbVersion->getUuid()) {
+ if (timestamp == otherTimestamp)
return _dbVersion->getLastMod() < other._dbVersion->getLastMod();
- }
+ else
+ return timestamp < otherTimestamp;
}
return _uuidDisambiguatingSequenceNum < other._uuidDisambiguatingSequenceNum;
diff --git a/src/mongo/s/database_version.h b/src/mongo/s/database_version.h
index 2bfad7d883d..87ecdb6b371 100644
--- a/src/mongo/s/database_version.h
+++ b/src/mongo/s/database_version.h
@@ -47,8 +47,6 @@ class DatabaseVersion : public DatabaseVersionBase {
public:
using DatabaseVersionBase::getTimestamp;
- DatabaseVersion() = default;
-
explicit DatabaseVersion(const BSONObj& obj) {
DatabaseVersionBase::parseProtected(IDLParserErrorContext("DatabaseVersion"), obj);
}
@@ -56,18 +54,11 @@ public:
explicit DatabaseVersion(const DatabaseVersionBase& dbv) : DatabaseVersionBase(dbv) {}
/**
- * Constructor of a DatabaseVersion based on epochs
- */
- explicit DatabaseVersion(mongo::UUID uuid)
- : DatabaseVersion(uuid, boost::none /* timestamp */) {}
-
- /**
* Constructor of a DatabaseVersion based on epochs and timestamps
*/
- DatabaseVersion(mongo::UUID uuid, boost::optional<mongo::Timestamp> timestamp)
- : DatabaseVersionBase(1 /* lastMod */) {
+ DatabaseVersion(mongo::UUID uuid, mongo::Timestamp timestamp)
+ : DatabaseVersionBase(timestamp, 1 /* lastMod */) {
setUuid(uuid);
- setTimestamp(timestamp);
}
// Returns a new hardcoded DatabaseVersion value, which is used to distinguish databases that do
diff --git a/src/mongo/s/database_version.idl b/src/mongo/s/database_version.idl
index 557c1d1d6b9..9b073f5a34e 100644
--- a/src/mongo/s/database_version.idl
+++ b/src/mongo/s/database_version.idl
@@ -48,10 +48,7 @@ structs:
optional: true
timestamp:
type: timestamp
- description: "Uniquely identifies to distinguish different incarnations of this database
- It is optional for parsing purposes, because in versions of MongoDB
- prior to 5.0, this value wasn't being written."
- optional: true
+ description: "Uniquely identifies to distinguish different incarnations of this database."
lastMod:
type: int
description: "an integer which is bumped whenever the database's primary shard changes"
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 ca3bf151737..6f8f077859d 100644
--- a/src/mongo/s/write_ops/batch_write_exec_test.cpp
+++ b/src/mongo/s/write_ops/batch_write_exec_test.cpp
@@ -140,7 +140,7 @@ BSONObj expectInsertsReturnStaleDbVersionErrorsBase(const NamespaceString& nss,
errorBuilder.append("index", i);
errorBuilder.append("code", int(ErrorCodes::StaleDbVersion));
- auto dbVersion = DatabaseVersion(UUID::gen());
+ auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp());
errorBuilder.append("db", nss.db());
errorBuilder.append("vReceived", dbVersion.toBSON());
errorBuilder.append("vWanted", dbVersion.makeUpdated().toBSON());