diff options
Diffstat (limited to 'src/mongo/s/catalog')
6 files changed, 55 insertions, 15 deletions
diff --git a/src/mongo/s/catalog/sharding_catalog_append_db_stats_test.cpp b/src/mongo/s/catalog/sharding_catalog_append_db_stats_test.cpp index d3f46f56f63..5e2259b56fb 100644 --- a/src/mongo/s/catalog/sharding_catalog_append_db_stats_test.cpp +++ b/src/mongo/s/catalog/sharding_catalog_append_db_stats_test.cpp @@ -63,8 +63,8 @@ TEST_F(ShardingCatalogClientAppendDbStatsTest, BasicAppendDBStats) { BSONArrayBuilder builder; auto future = launchAsync([this, &builder] { - ASSERT_OK( - catalogClient()->appendInfoForConfigServerDatabases(operationContext(), &builder)); + ASSERT_OK(catalogClient()->appendInfoForConfigServerDatabases( + operationContext(), BSON("listDatabases" << 1), &builder)); }); onCommand([](const RemoteCommandRequest& request) { @@ -118,13 +118,49 @@ TEST_F(ShardingCatalogClientAppendDbStatsTest, BasicAppendDBStats) { ASSERT_TRUE(localIter == dbMap.end()); } +TEST_F(ShardingCatalogClientAppendDbStatsTest, AppendDBStatsWithFilter) { + configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1")); + + BSONArrayBuilder builder; + auto future = launchAsync([this, &builder] { + ASSERT_OK(catalogClient()->appendInfoForConfigServerDatabases( + operationContext(), + BSON("listDatabases" << 1 << "filter" << BSON("name" + << "config")), + &builder)); + }); + + onCommand([](const RemoteCommandRequest& request) { + ASSERT_BSONOBJ_EQ(kReplSecondaryOkMetadata, + rpc::TrackingMetadata::removeTrackingData(request.metadata)); + + ASSERT_EQ("admin", request.dbname); + ASSERT_BSONOBJ_EQ(BSON("listDatabases" << 1 << "filter" << BSON("name" + << "config")), + request.cmdObj); + + return fromjson(R"({ + databases: [ + { + name: 'config', + empty: false, + sizeOnDisk: 40000 + } + ], + ok: 1 + })"); + }); + + future.timed_get(kFutureTimeout); +} + TEST_F(ShardingCatalogClientAppendDbStatsTest, ErrorRunningListDatabases) { configTargeter()->setFindHostReturnValue(HostAndPort("TestHost1")); BSONArrayBuilder builder; auto future = launchAsync([this, &builder] { - auto status = - catalogClient()->appendInfoForConfigServerDatabases(operationContext(), &builder); + auto status = catalogClient()->appendInfoForConfigServerDatabases( + operationContext(), BSON("listDatabases" << 1), &builder); ASSERT_NOT_OK(status); ASSERT_EQ(ErrorCodes::AuthenticationFailed, status.code()); ASSERT_FALSE(status.reason().empty()); @@ -142,8 +178,8 @@ TEST_F(ShardingCatalogClientAppendDbStatsTest, MalformedListDatabasesResponse) { BSONArrayBuilder builder; auto future = launchAsync([this, &builder] { - auto status = - catalogClient()->appendInfoForConfigServerDatabases(operationContext(), &builder); + auto status = catalogClient()->appendInfoForConfigServerDatabases( + operationContext(), BSON("listDatabases" << 1), &builder); ASSERT_NOT_OK(status); ASSERT_EQ(ErrorCodes::NoSuchKey, status.code()); ASSERT_FALSE(status.reason().empty()); @@ -159,8 +195,8 @@ TEST_F(ShardingCatalogClientAppendDbStatsTest, MalformedListDatabasesEntryInResp BSONArrayBuilder builder; auto future = launchAsync([this, &builder] { - auto status = - catalogClient()->appendInfoForConfigServerDatabases(operationContext(), &builder); + auto status = catalogClient()->appendInfoForConfigServerDatabases( + operationContext(), BSON("listDatabases" << 1), &builder); ASSERT_NOT_OK(status); ASSERT_EQ(ErrorCodes::NoSuchKey, status.code()); ASSERT_FALSE(status.reason().empty()); diff --git a/src/mongo/s/catalog/sharding_catalog_client.h b/src/mongo/s/catalog/sharding_catalog_client.h index 1d736fb222d..f334c05a477 100644 --- a/src/mongo/s/catalog/sharding_catalog_client.h +++ b/src/mongo/s/catalog/sharding_catalog_client.h @@ -429,10 +429,12 @@ public: const WriteConcernOptions& writeConcern) = 0; /** - * Appends the information about the config and admin databases in the config server - * with the format for listDatabase. + * Appends the information about the config and admin databases in the config server with the + * format for listDatabases, based on the listDatabases command parameters in + * 'listDatabasesCmd'. */ virtual Status appendInfoForConfigServerDatabases(OperationContext* txn, + const BSONObj& listDatabasesCmd, BSONArrayBuilder* builder) = 0; /** diff --git a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp index 0f364b61e84..01bb420f49a 100644 --- a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp +++ b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp @@ -1683,14 +1683,14 @@ void ShardingCatalogClientImpl::_appendReadConcern(BSONObjBuilder* builder) { readConcern.appendInfo(builder); } -Status ShardingCatalogClientImpl::appendInfoForConfigServerDatabases(OperationContext* txn, - BSONArrayBuilder* builder) { +Status ShardingCatalogClientImpl::appendInfoForConfigServerDatabases( + OperationContext* txn, const BSONObj& listDatabasesCmd, BSONArrayBuilder* builder) { auto configShard = Grid::get(txn)->shardRegistry()->getConfigShard(); auto resultStatus = configShard->runCommandWithFixedRetryAttempts(txn, kConfigPrimaryPreferredSelector, "admin", - BSON("listDatabases" << 1), + listDatabasesCmd, Shard::RetryPolicy::kIdempotent); if (!resultStatus.isOK()) { diff --git a/src/mongo/s/catalog/sharding_catalog_client_impl.h b/src/mongo/s/catalog/sharding_catalog_client_impl.h index c49b1bd6432..898b3774456 100644 --- a/src/mongo/s/catalog/sharding_catalog_client_impl.h +++ b/src/mongo/s/catalog/sharding_catalog_client_impl.h @@ -174,6 +174,7 @@ public: DistLockManager* getDistLockManager() override; Status appendInfoForConfigServerDatabases(OperationContext* txn, + const BSONObj& listDatabasesCmd, BSONArrayBuilder* builder) override; /** diff --git a/src/mongo/s/catalog/sharding_catalog_client_mock.cpp b/src/mongo/s/catalog/sharding_catalog_client_mock.cpp index 7058bff8c2b..11e03fb4c70 100644 --- a/src/mongo/s/catalog/sharding_catalog_client_mock.cpp +++ b/src/mongo/s/catalog/sharding_catalog_client_mock.cpp @@ -227,8 +227,8 @@ DistLockManager* ShardingCatalogClientMock::getDistLockManager() { return _distLockManager.get(); } -Status ShardingCatalogClientMock::appendInfoForConfigServerDatabases(OperationContext* txn, - BSONArrayBuilder* builder) { +Status ShardingCatalogClientMock::appendInfoForConfigServerDatabases( + OperationContext* txn, const BSONObj& listDatabasesCmd, BSONArrayBuilder* builder) { return Status::OK(); } diff --git a/src/mongo/s/catalog/sharding_catalog_client_mock.h b/src/mongo/s/catalog/sharding_catalog_client_mock.h index fd913a267c3..658681fd37a 100644 --- a/src/mongo/s/catalog/sharding_catalog_client_mock.h +++ b/src/mongo/s/catalog/sharding_catalog_client_mock.h @@ -159,6 +159,7 @@ public: DistLockManager* getDistLockManager() override; Status appendInfoForConfigServerDatabases(OperationContext* txn, + const BSONObj& listDatabasesCmd, BSONArrayBuilder* builder) override; private: |