summaryrefslogtreecommitdiff
path: root/src/mongo/s/catalog
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/catalog')
-rw-r--r--src/mongo/s/catalog/sharding_catalog_append_db_stats_test.cpp52
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client.h6
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client_impl.cpp6
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client_impl.h1
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client_mock.cpp4
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client_mock.h1
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: