diff options
24 files changed, 86 insertions, 117 deletions
diff --git a/src/mongo/db/s/balancer/migration_test_fixture.cpp b/src/mongo/db/s/balancer/migration_test_fixture.cpp index 1ff3dc71ccb..206e0d7737d 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(), Timestamp())); + DatabaseType db(dbName, primaryShard, DatabaseVersion(UUID::gen(), Timestamp())); ASSERT_OK(catalogClient()->insertConfigDocument(operationContext(), NamespaceString::kConfigDatabasesNamespace, db.toBSON(), 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 774739ec29d..85f64c4a95f 100644 --- a/src/mongo/db/s/config/config_server_test_fixture.cpp +++ b/src/mongo/db/s/config/config_server_test_fixture.cpp @@ -328,7 +328,7 @@ void ConfigServerTestFixture::setupCollection(const NamespaceString& nss, invariant(swShardDoc.isOK(), "At least one shard should be setup when initializing a collection"); auto shard = uassertStatusOK(ShardType::fromBSON(swShardDoc.getValue())); - setupDatabase(nss.db().toString(), ShardId(shard.getName()), true /* sharded */); + setupDatabase(nss.db().toString(), ShardId(shard.getName())); } CollectionType coll(nss, @@ -400,9 +400,8 @@ 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(), Timestamp())); + const ShardId& primaryShard) { + DatabaseType db(dbName, primaryShard, DatabaseVersion(UUID::gen(), Timestamp())); ASSERT_OK(catalogClient()->insertConfigDocument(operationContext(), NamespaceString::kConfigDatabasesNamespace, db.toBSON(), diff --git a/src/mongo/db/s/config/config_server_test_fixture.h b/src/mongo/db/s/config/config_server_test_fixture.h index 821b8987406..f2d2d0a1ef0 100644 --- a/src/mongo/db/s/config/config_server_test_fixture.h +++ b/src/mongo/db/s/config/config_server_test_fixture.h @@ -136,7 +136,7 @@ protected: /** * Inserts a document for the database into the config.databases collection. */ - void setupDatabase(const std::string& dbName, ShardId primaryShard, bool sharded); + void setupDatabase(const std::string& dbName, const ShardId& primaryShard); /** * Returns the indexes definitions defined on a given collection. diff --git a/src/mongo/db/s/config/sharding_catalog_manager.h b/src/mongo/db/s/config/sharding_catalog_manager.h index b21b98f3265..9653a0ce6d3 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager.h +++ b/src/mongo/db/s/config/sharding_catalog_manager.h @@ -394,10 +394,12 @@ public: * exists, and if not, creates a new one that matches these prerequisites. If a database already * exists and matches all the prerequisites returns success, otherwise throws NamespaceNotFound. */ - DatabaseType createDatabase(OperationContext* opCtx, - StringData dbName, - const boost::optional<ShardId>& optPrimaryShard, - bool enableSharding); + DatabaseType createDatabase( + OperationContext* opCtx, + StringData dbName, + const boost::optional<ShardId>& optPrimaryShard, + // # TODO SERVER-63983: remove enableSharding paramter when 6.0 becomes lastLTS + bool enableSharding = false); // // Collection Operations 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 2dfa0e75278..2cbec96bc9a 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,14 +380,10 @@ TEST_F(AddShardTest, StandaloneBasicSuccess) { expectedShard.setMaxSizeMB(100); expectedShard.setState(ShardType::ShardState::kShardAware); - DatabaseType discoveredDB1("TestDB1", - ShardId("StandaloneShard"), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); - DatabaseType discoveredDB2("TestDB2", - ShardId("StandaloneShard"), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB1( + "TestDB1", ShardId("StandaloneShard"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB2( + "TestDB2", ShardId("StandaloneShard"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto expectWriteConcern = ShardingCatalogClient::kMajorityWriteConcern; @@ -470,14 +466,10 @@ TEST_F(AddShardTest, StandaloneGenerateName) { expectedShard.setMaxSizeMB(100); expectedShard.setState(ShardType::ShardState::kShardAware); - DatabaseType discoveredDB1("TestDB1", - ShardId(expectedShardName), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); - DatabaseType discoveredDB2("TestDB2", - ShardId(expectedShardName), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB1( + "TestDB1", ShardId(expectedShardName), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB2( + "TestDB2", ShardId(expectedShardName), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto future = launchAsync([this, &expectedShardName, &shardTarget] { ThreadClient tc(getServiceContext()); @@ -819,7 +811,7 @@ TEST_F(AddShardTest, ShardContainsExistingDatabase) { std::string expectedShardName = "mySet"; DatabaseType existingDB( - "existing", ShardId("existingShard"), false, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + "existing", ShardId("existingShard"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); // Add a pre-existing database. ASSERT_OK(catalogClient()->insertConfigDocument(operationContext(), @@ -873,10 +865,8 @@ TEST_F(AddShardTest, SuccessfullyAddReplicaSet) { expectedShard.setMaxSizeMB(100); expectedShard.setState(ShardType::ShardState::kShardAware); - DatabaseType discoveredDB("shardDB", - ShardId(expectedShardName), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB( + "shardDB", ShardId(expectedShardName), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto future = launchAsync([this, &expectedShardName, &connString] { ThreadClient tc(getServiceContext()); @@ -940,10 +930,8 @@ TEST_F(AddShardTest, ReplicaSetExtraHostsDiscovered) { expectedShard.setMaxSizeMB(100); expectedShard.setState(ShardType::ShardState::kShardAware); - DatabaseType discoveredDB("shardDB", - ShardId(expectedShardName), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB( + "shardDB", ShardId(expectedShardName), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto future = launchAsync([this, &expectedShardName, &seedString] { ThreadClient tc(getServiceContext()); @@ -1008,14 +996,10 @@ TEST_F(AddShardTest, AddShardSucceedsEvenIfAddingDBsFromNewShardFails) { expectedShard.setMaxSizeMB(100); expectedShard.setState(ShardType::ShardState::kShardAware); - DatabaseType discoveredDB1("TestDB1", - ShardId("StandaloneShard"), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); - DatabaseType discoveredDB2("TestDB2", - ShardId("StandaloneShard"), - false, - DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB1( + "TestDB1", ShardId("StandaloneShard"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType discoveredDB2( + "TestDB2", ShardId("StandaloneShard"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); // 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 212e598bb67..934eca19e8e 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 @@ -90,7 +90,7 @@ DatabaseType ShardingCatalogManager::createDatabase(OperationContext* opCtx, bool enableSharding) { if (dbName == NamespaceString::kConfigDb) { return DatabaseType( - dbName.toString(), ShardId::kConfigServerId, true, DatabaseVersion::makeFixed()); + dbName.toString(), ShardId::kConfigServerId, DatabaseVersion::makeFixed()); } uassert(ErrorCodes::InvalidOptions, @@ -214,10 +214,12 @@ DatabaseType ShardingCatalogManager::createDatabase(OperationContext* opCtx, const auto clusterTime = now.clusterTime().asTimestamp(); // Pick a primary shard for the new database. - DatabaseType db(dbName.toString(), - shardPtr->getId(), - enableShardingOptional ? false : enableSharding, - DatabaseVersion(UUID::gen(), clusterTime)); + DatabaseType db( + dbName.toString(), shardPtr->getId(), DatabaseVersion(UUID::gen(), clusterTime)); + + if (!enableShardingOptional) { + db.setSharded(enableSharding); + } LOGV2(21938, "Registering new database {db} in sharding catalog", diff --git a/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp index aba7972018d..d760e1ce3d5 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp +++ b/src/mongo/db/s/config/sharding_catalog_manager_remove_shard_test.cpp @@ -216,7 +216,7 @@ TEST_F(RemoveShardTest, RemoveShardStillDrainingChunksRemaining) { chunk3.setJumbo(true); setupShards(std::vector<ShardType>{shard1, shard2}); - setupDatabase("testDB", shard1.getName(), true); + setupDatabase("testDB", shard1.getName()); setupCollection(NamespaceString("testDB.testColl"), kKeyPattern, std::vector<ChunkType>{chunk1, chunk2, chunk3}); @@ -252,7 +252,7 @@ TEST_F(RemoveShardTest, RemoveShardStillDrainingDatabasesRemaining) { shard2.setState(ShardType::ShardState::kShardAware); setupShards(std::vector<ShardType>{shard1, shard2}); - setupDatabase("testDB", shard1.getName(), false); + setupDatabase("testDB", shard1.getName()); auto startedResult = ShardingCatalogManager::get(operationContext()) ->removeShard(operationContext(), shard1.getName()); @@ -303,7 +303,7 @@ TEST_F(RemoveShardTest, RemoveShardCompletion) { std::vector<ChunkType> chunks{chunk1, chunk2, chunk3}; setupShards(std::vector<ShardType>{shard1, shard2}); - setupDatabase("testDB", shard2.getName(), false); + setupDatabase("testDB", shard2.getName()); setupCollection(NamespaceString("testDB.testColl"), kKeyPattern, std::vector<ChunkType>{chunk1, chunk2, chunk3}); 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 fc000d17f14..cd97c57f44c 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 @@ -743,7 +743,7 @@ StatusWith<std::string> ShardingCatalogManager::addShard( const auto clusterTime = now.clusterTime().asTimestamp(); DatabaseType dbt( - dbName, shardType.getName(), false, DatabaseVersion(UUID::gen(), clusterTime)); + dbName, shardType.getName(), DatabaseVersion(UUID::gen(), clusterTime)); { const auto status = Grid::get(opCtx)->catalogClient()->updateConfigDocument( diff --git a/src/mongo/db/s/database_sharding_state_test.cpp b/src/mongo/db/s/database_sharding_state_test.cpp index 007da2b6568..f4516bb8d13 100644 --- a/src/mongo/db/s/database_sharding_state_test.cpp +++ b/src/mongo/db/s/database_sharding_state_test.cpp @@ -120,7 +120,7 @@ public: DatabaseType createDatabase(const UUID& uuid, const Timestamp& timestamp) { return DatabaseType( - kDbName.toString(), kShardList[0].getName(), true, DatabaseVersion(uuid, timestamp)); + kDbName.toString(), kShardList[0].getName(), DatabaseVersion(uuid, timestamp)); } protected: diff --git a/src/mongo/db/s/migration_util_test.cpp b/src/mongo/db/s/migration_util_test.cpp index 61d78b8359b..ac3f0cc4254 100644 --- a/src/mongo/db/s/migration_util_test.cpp +++ b/src/mongo/db/s/migration_util_test.cpp @@ -368,11 +368,8 @@ public: const UUID kDefaultUUID = UUID::gen(); const OID kEpoch = OID::gen(); const Timestamp kDefaultTimestamp = Timestamp(2, 0); - const DatabaseType kDefaultDatabaseType = - DatabaseType(kTestNss.db().toString(), - ShardId("0"), - true, - DatabaseVersion(kDefaultUUID, kDefaultTimestamp)); + const DatabaseType kDefaultDatabaseType = DatabaseType( + kTestNss.db().toString(), ShardId("0"), DatabaseVersion(kDefaultUUID, kDefaultTimestamp)); const std::vector<ShardType> kShardList = {ShardType("0", "Host0:12345"), ShardType("1", "Host1:12345")}; 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 d402cbbfa26..2587b71dbfb 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp +++ b/src/mongo/db/s/resharding/resharding_coordinator_service_test.cpp @@ -382,7 +382,6 @@ public: DatabaseType dbDoc(coordinatorDoc.getSourceNss().db().toString(), coordinatorDoc.getDonorShards().front().getId(), - true, DatabaseVersion{UUID::gen(), Timestamp(1, 1)}); client.insert(NamespaceString::kConfigDatabasesNamespace.ns(), dbDoc.toBSON()); diff --git a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp index bb7d48471dd..5e54ee87606 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp +++ b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp @@ -536,7 +536,7 @@ protected: // Create original collection's catalog entry as well as both config.chunks and config.tags // collections. { - setupDatabase("db", ShardId("shard0000"), true); + setupDatabase("db", ShardId("shard0000")); auto opCtx = operationContext(); DBDirectClient client(opCtx); diff --git a/src/mongo/db/s/resharding/resharding_txn_cloner_test.cpp b/src/mongo/db/s/resharding/resharding_txn_cloner_test.cpp index d8c0b8f8335..c41f4ce7db3 100644 --- a/src/mongo/db/s/resharding/resharding_txn_cloner_test.cpp +++ b/src/mongo/db/s/resharding/resharding_txn_cloner_test.cpp @@ -82,7 +82,6 @@ class ReshardingTxnClonerTest : public ShardServerTestFixture { mockLoader->setDatabaseRefreshReturnValue( DatabaseType{NamespaceString::kConfigDb.toString(), ShardId::kConfigServerId, - true, DatabaseVersion::makeFixed()}); // The config.transactions collection is always unsharded. diff --git a/src/mongo/db/s/resharding_destined_recipient_test.cpp b/src/mongo/db/s/resharding_destined_recipient_test.cpp index 34d56bbb70f..946dab13106 100644 --- a/src/mongo/db/s/resharding_destined_recipient_test.cpp +++ b/src/mongo/db/s/resharding_destined_recipient_test.cpp @@ -220,7 +220,7 @@ protected: coll.setAllowMigrations(false); _mockCatalogCacheLoader->setDatabaseRefreshReturnValue( - DatabaseType(kNss.db().toString(), kShardList[0].getName(), true, env.dbVersion)); + DatabaseType(kNss.db().toString(), kShardList[0].getName(), env.dbVersion)); _mockCatalogCacheLoader->setCollectionRefreshValues( kNss, coll, diff --git a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp index e05b3b4a9d0..bf98a08c7aa 100644 --- a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp +++ b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp @@ -331,14 +331,22 @@ DatabaseType ShardingCatalogClientImpl::getDatabase(OperationContext* opCtx, NamespaceString::validDBName(dbName, NamespaceString::DollarInDbNameBehavior::Allow)); // The admin database is always hosted on the config server. - if (dbName == NamespaceString::kAdminDb) - return DatabaseType( - dbName.toString(), ShardId::kConfigServerId, false, DatabaseVersion::makeFixed()); + if (dbName == NamespaceString::kAdminDb) { + DatabaseType adminDb{ + dbName.toString(), ShardId::kConfigServerId, DatabaseVersion::makeFixed()}; + // TODO SERVER-63983: do not set sharded flag once 6.0 becomes lastLTS + adminDb.setSharded(true); + return adminDb; + } // The config database's primary shard is always config, and it is always sharded. - if (dbName == NamespaceString::kConfigDb) - return DatabaseType( - dbName.toString(), ShardId::kConfigServerId, true, DatabaseVersion::makeFixed()); + if (dbName == NamespaceString::kConfigDb) { + DatabaseType configDb{ + dbName.toString(), ShardId::kConfigServerId, DatabaseVersion::makeFixed()}; + // TODO SERVER-63983: do not set sharded flag once 6.0 becomes lastLTS + configDb.setSharded(true); + return configDb; + } auto result = _fetchDatabaseMetadata(opCtx, dbName.toString(), kConfigReadSelector, readConcernLevel); diff --git a/src/mongo/s/catalog/sharding_catalog_client_test.cpp b/src/mongo/s/catalog/sharding_catalog_client_test.cpp index d2f9ec29cbe..b9ea396e5e9 100644 --- a/src/mongo/s/catalog/sharding_catalog_client_test.cpp +++ b/src/mongo/s/catalog/sharding_catalog_client_test.cpp @@ -162,7 +162,7 @@ TEST_F(ShardingCatalogClientTest, GetDatabaseExisting) { configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1")); DatabaseType expectedDb( - "bigdata", ShardId("shard0000"), true, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + "bigdata", ShardId("shard0000"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); const OpTime newOpTime(Timestamp(7, 6), 5); @@ -213,7 +213,7 @@ TEST_F(ShardingCatalogClientTest, GetDatabaseStaleSecondaryRetrySuccess) { configTargeter()->setFindHostReturnValue(firstHost); DatabaseType expectedDb( - "bigdata", ShardId("shard0000"), true, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + "bigdata", ShardId("shard0000"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto future = launchAsync([this, &expectedDb] { return catalogClient()->getDatabase( @@ -920,10 +920,8 @@ TEST_F(ShardingCatalogClientTest, GetCollectionsInvalidCollectionType) { TEST_F(ShardingCatalogClientTest, GetDatabasesForShardValid) { configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1")); - DatabaseType dbt1( - "db1", ShardId("shard0000"), false, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); - DatabaseType dbt2( - "db2", ShardId("shard0000"), false, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType dbt1("db1", ShardId("shard0000"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType dbt2("db2", ShardId("shard0000"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto future = launchAsync([this] { return assertGet( @@ -967,8 +965,7 @@ TEST_F(ShardingCatalogClientTest, GetDatabasesForShardInvalidDoc) { }); onFindCommand([](const RemoteCommandRequest& request) { - DatabaseType dbt1( - "db1", {"shard0000"}, false, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType dbt1("db1", {"shard0000"}, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); return vector<BSONObj>{ dbt1.toBSON(), BSON(DatabaseType::kNameFieldName << 0) // Database name should be a string @@ -1075,8 +1072,7 @@ TEST_F(ShardingCatalogClientTest, GetTagsForCollectionInvalidTag) { TEST_F(ShardingCatalogClientTest, UpdateDatabase) { configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1")); - DatabaseType dbt( - "test", ShardId("shard0000"), true, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType dbt("test", ShardId("shard0000"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto future = launchAsync([this, dbt] { auto status = catalogClient()->updateConfigDocument( @@ -1123,8 +1119,7 @@ TEST_F(ShardingCatalogClientTest, UpdateConfigDocumentNonRetryableError) { HostAndPort host1("TestHost1"); configTargeter()->setFindHostReturnValue(host1); - DatabaseType dbt( - "test", ShardId("shard0001"), false, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + DatabaseType dbt("test", ShardId("shard0001"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); auto future = launchAsync([this, dbt] { auto status = catalogClient()->updateConfigDocument( @@ -1329,7 +1324,7 @@ TEST_F(ShardingCatalogClientTest, RetryOnFindCommandNetworkErrorSucceedsAtMaxRet onFindCommand([](const RemoteCommandRequest& request) { DatabaseType dbType( - "TestDB", ShardId("TestShard"), true, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + "TestDB", ShardId("TestShard"), DatabaseVersion(UUID::gen(), Timestamp(1, 1))); return vector<BSONObj>{dbType.toBSON()}; }); diff --git a/src/mongo/s/catalog/type_database.idl b/src/mongo/s/catalog/type_database.idl index 0da8feb6b62..6298aadf66e 100644 --- a/src/mongo/s/catalog/type_database.idl +++ b/src/mongo/s/catalog/type_database.idl @@ -58,6 +58,7 @@ structs: description: "Specify if it is allowed to create sharded collection on this database." cpp_name: sharded type: bool + default: false optional: false version: description: "Version of the database." diff --git a/src/mongo/s/catalog_cache_loader_mock.cpp b/src/mongo/s/catalog_cache_loader_mock.cpp index 059a7e8d132..09b3b60e3f4 100644 --- a/src/mongo/s/catalog_cache_loader_mock.cpp +++ b/src/mongo/s/catalog_cache_loader_mock.cpp @@ -121,14 +121,7 @@ SemiFuture<CollectionAndChangedChunks> CatalogCacheLoaderMock::getChunksSince( } SemiFuture<DatabaseType> CatalogCacheLoaderMock::getDatabase(StringData dbName) { - return makeReadyFutureWith([this] { - uassertStatusOK(_swDatabaseReturnValue); - return DatabaseType(_swDatabaseReturnValue.getValue().getName().toString(), - _swDatabaseReturnValue.getValue().getPrimary(), - _swDatabaseReturnValue.getValue().getSharded(), - _swDatabaseReturnValue.getValue().getVersion()); - }) - .semi(); + return makeReadyFutureWith([this] { return _swDatabaseReturnValue; }).semi(); } void CatalogCacheLoaderMock::setCollectionRefreshReturnValue( diff --git a/src/mongo/s/catalog_cache_refresh_test.cpp b/src/mongo/s/catalog_cache_refresh_test.cpp index 0167943d7c8..31a9cbe0d7a 100644 --- a/src/mongo/s/catalog_cache_refresh_test.cpp +++ b/src/mongo/s/catalog_cache_refresh_test.cpp @@ -60,7 +60,7 @@ protected: void expectGetDatabase() { expectFindSendBSONObjVector(kConfigHostAndPort, [&]() { DatabaseType db( - kNss.db().toString(), {"0"}, true, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); + kNss.db().toString(), {"0"}, DatabaseVersion(UUID::gen(), Timestamp(1, 1))); 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 959cd7bf1fb..42cd460b08a 100644 --- a/src/mongo/s/catalog_cache_test.cpp +++ b/src/mongo/s/catalog_cache_test.cpp @@ -183,14 +183,12 @@ protected: TEST_F(CatalogCacheTest, GetDatabase) { const auto dbName = "testDB"; const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp(1, 1)); - _catalogCacheLoader->setDatabaseRefreshReturnValue( - DatabaseType(dbName, kShards[0], true, dbVersion)); + _catalogCacheLoader->setDatabaseRefreshReturnValue(DatabaseType(dbName, kShards[0], dbVersion)); const auto swDatabase = _catalogCache->getDatabase(operationContext(), dbName); ASSERT_OK(swDatabase.getStatus()); const auto cachedDb = swDatabase.getValue(); - ASSERT_TRUE(cachedDb.shardingEnabled()); ASSERT_EQ(cachedDb.primaryId(), kShards[0]); ASSERT_EQ(cachedDb.databaseVersion().getUuid(), dbVersion.getUuid()); ASSERT_EQ(cachedDb.databaseVersion().getLastMod(), dbVersion.getLastMod()); @@ -199,13 +197,12 @@ TEST_F(CatalogCacheTest, GetDatabase) { TEST_F(CatalogCacheTest, GetCachedDatabase) { const auto dbName = "testDB"; const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp(1, 1)); - loadDatabases({DatabaseType(dbName, kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(dbName, kShards[0], dbVersion)}); const auto swDatabase = _catalogCache->getDatabase(operationContext(), dbName); ASSERT_OK(swDatabase.getStatus()); const auto cachedDb = swDatabase.getValue(); - ASSERT_TRUE(cachedDb.shardingEnabled()); ASSERT_EQ(cachedDb.primaryId(), kShards[0]); ASSERT_EQ(cachedDb.databaseVersion().getUuid(), dbVersion.getUuid()); ASSERT_EQ(cachedDb.databaseVersion().getLastMod(), dbVersion.getLastMod()); @@ -215,14 +212,12 @@ TEST_F(CatalogCacheTest, GetDatabaseDrop) { const auto dbName = "testDB"; const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp(1, 1)); - _catalogCacheLoader->setDatabaseRefreshReturnValue( - DatabaseType(dbName, kShards[0], true, dbVersion)); + _catalogCacheLoader->setDatabaseRefreshReturnValue(DatabaseType(dbName, kShards[0], dbVersion)); // The CatalogCache doesn't have any valid info about this DB and finds a new DatabaseType auto swDatabase = _catalogCache->getDatabase(operationContext(), dbName); ASSERT_OK(swDatabase.getStatus()); const auto cachedDb = swDatabase.getValue(); - ASSERT_TRUE(cachedDb.shardingEnabled()); ASSERT_EQ(cachedDb.databaseVersion().getUuid(), dbVersion.getUuid()); ASSERT_EQ(cachedDb.databaseVersion().getLastMod(), dbVersion.getLastMod()); @@ -242,11 +237,10 @@ TEST_F(CatalogCacheTest, GetDatabaseDrop) { TEST_F(CatalogCacheTest, InvalidateSingleDbOnShardRemoval) { const auto dbName = "testDB"; const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp(1, 1)); - loadDatabases({DatabaseType(dbName, kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(dbName, kShards[0], dbVersion)}); _catalogCache->invalidateEntriesThatReferenceShard(kShards[0]); - _catalogCacheLoader->setDatabaseRefreshReturnValue( - DatabaseType(dbName, kShards[1], true, dbVersion)); + _catalogCacheLoader->setDatabaseRefreshReturnValue(DatabaseType(dbName, kShards[1], dbVersion)); const auto swDatabase = _catalogCache->getDatabase(operationContext(), dbName); ASSERT_OK(swDatabase.getStatus()); @@ -257,7 +251,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(), Timestamp(1, 1)); - loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], dbVersion)}); _catalogCache->onStaleDatabaseVersion(kNss.db(), boost::none); @@ -269,7 +263,7 @@ TEST_F(CatalogCacheTest, OnStaleShardVersionWithSameVersion) { const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp(1, 1)); const auto cachedCollVersion = ChunkVersion(1, 0, OID::gen(), Timestamp(1, 1)); - loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], dbVersion)}); loadCollection(cachedCollVersion); _catalogCache->invalidateShardOrEntireCollectionEntryForShardedCollection( kNss, cachedCollVersion, kShards[0]); @@ -280,7 +274,7 @@ TEST_F(CatalogCacheTest, OnStaleShardVersionWithNoVersion) { const auto dbVersion = DatabaseVersion(UUID::gen(), Timestamp(1, 1)); const auto cachedCollVersion = ChunkVersion(1, 0, OID::gen(), Timestamp(1, 1)); - loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], dbVersion)}); loadCollection(cachedCollVersion); _catalogCache->invalidateShardOrEntireCollectionEntryForShardedCollection( kNss, boost::none, kShards[0]); @@ -295,7 +289,7 @@ TEST_F(CatalogCacheTest, OnStaleShardVersionWithGraterVersion) { const auto wantedCollVersion = ChunkVersion(2, 0, cachedCollVersion.epoch(), cachedCollVersion.getTimestamp()); - loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], dbVersion)}); loadCollection(cachedCollVersion); _catalogCache->invalidateShardOrEntireCollectionEntryForShardedCollection( kNss, wantedCollVersion, kShards[0]); @@ -309,7 +303,7 @@ TEST_F(CatalogCacheTest, TimeseriesFieldsAreProperlyPropagatedOnCC) { const auto epoch = OID::gen(); const auto version = ChunkVersion(1, 0, epoch, Timestamp(42)); - loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], dbVersion)}); auto coll = makeCollectionType(version); auto chunks = makeChunks(version); @@ -365,7 +359,7 @@ TEST_F(CatalogCacheTest, LookupCollectionWithInvalidOptions) { const auto epoch = OID::gen(); const auto version = ChunkVersion(1, 0, epoch, Timestamp(42)); - loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)}); + loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], dbVersion)}); auto coll = makeCollectionType(version); diff --git a/src/mongo/s/catalog_cache_test_fixture.cpp b/src/mongo/s/catalog_cache_test_fixture.cpp index f3e3431e832..323fcd7d7c2 100644 --- a/src/mongo/s/catalog_cache_test_fixture.cpp +++ b/src/mongo/s/catalog_cache_test_fixture.cpp @@ -132,11 +132,7 @@ ChunkManager CatalogCacheTestFixture::makeChunkManager( boost::optional<ReshardingFields> reshardingFields) { ChunkVersion version(1, 0, OID::gen(), Timestamp(42) /* timestamp */); - const BSONObj databaseBSON = [&]() { - DatabaseType db( - nss.db().toString(), {"0"}, true, DatabaseVersion(UUID::gen(), Timestamp())); - return db.toBSON(); - }(); + DatabaseType db(nss.db().toString(), {"0"}, DatabaseVersion(UUID::gen(), Timestamp())); const auto uuid = UUID::gen(); const BSONObj collectionBSON = [&]() { @@ -181,7 +177,7 @@ ChunkManager CatalogCacheTestFixture::makeChunkManager( auto future = scheduleRoutingInfoUnforcedRefresh(nss); - expectFindSendBSONObjVector(kConfigHostAndPort, {databaseBSON}); + expectFindSendBSONObjVector(kConfigHostAndPort, {db.toBSON()}); expectFindSendBSONObjVector(kConfigHostAndPort, [&]() { std::vector<BSONObj> aggResult{collectionBSON}; std::transform(initialChunks.begin(), @@ -196,8 +192,7 @@ ChunkManager CatalogCacheTestFixture::makeChunkManager( void CatalogCacheTestFixture::expectGetDatabase(NamespaceString nss, std::string shardId) { expectFindSendBSONObjVector(kConfigHostAndPort, [&]() { - DatabaseType db( - nss.db().toString(), {shardId}, true, DatabaseVersion(UUID::gen(), Timestamp())); + DatabaseType db(nss.db().toString(), {shardId}, DatabaseVersion(UUID::gen(), Timestamp())); return std::vector<BSONObj>{db.toBSON()}; }()); } diff --git a/src/mongo/s/cluster_ddl.cpp b/src/mongo/s/cluster_ddl.cpp index 58fa97a9192..70bef5bbcba 100644 --- a/src/mongo/s/cluster_ddl.cpp +++ b/src/mongo/s/cluster_ddl.cpp @@ -83,7 +83,7 @@ AsyncRequestsSender::Response executeCommandAgainstDatabasePrimaryOrFirstShard( CachedDatabaseInfo createDatabase(OperationContext* opCtx, StringData dbName, - boost::optional<ShardId> suggestedPrimaryId) { + const boost::optional<ShardId>& suggestedPrimaryId) { auto catalogCache = Grid::get(opCtx)->catalogCache(); auto dbStatus = catalogCache->getDatabase(opCtx, dbName); diff --git a/src/mongo/s/cluster_ddl.h b/src/mongo/s/cluster_ddl.h index 0aa3cc24503..6f15aa4e73f 100644 --- a/src/mongo/s/cluster_ddl.h +++ b/src/mongo/s/cluster_ddl.h @@ -41,7 +41,7 @@ namespace cluster { */ CachedDatabaseInfo createDatabase(OperationContext* opCtx, StringData dbName, - boost::optional<ShardId> suggestedPrimaryId = boost::none); + const boost::optional<ShardId>& suggestedPrimaryId = boost::none); /** * Creates the specified sharded collection. diff --git a/src/mongo/s/request_types/sharded_ddl_commands.idl b/src/mongo/s/request_types/sharded_ddl_commands.idl index 15a4fc2b353..a5f39b2515f 100644 --- a/src/mongo/s/request_types/sharded_ddl_commands.idl +++ b/src/mongo/s/request_types/sharded_ddl_commands.idl @@ -353,6 +353,7 @@ commands: primary for the database (if not already created). Otherwise, the system will use the balancer in order to select a primary." optional: true + # TODO SERVER-63983: remove the following field when 6.0 becomes lastLTS enableSharding: type: bool description: "May only be set to 'true'. If set, indicates to the config server that |