summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPol Pinol Castuera <pol.pinol@mongodb.com>2022-11-29 07:56:52 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-11-29 08:28:01 +0000
commit923b5fd65ad075c7da30af55022df936f4339128 (patch)
tree9087851bfd03cb46641c18709c929403910acd04
parentb6ff8ad7ad404430b05353fb6a2f8b1c01005ea3 (diff)
downloadmongo-923b5fd65ad075c7da30af55022df936f4339128.tar.gz
SERVER-68576 Added number of sharded collections to serverStatus command.
-rw-r--r--jstests/sharding/global_index_feature_flagging.js2
-rw-r--r--jstests/sharding/resharding_feature_flagging.js2
-rw-r--r--jstests/sharding/resharding_metrics.js4
-rw-r--r--jstests/sharding/sharding_statistics_server_status.js18
-rw-r--r--src/mongo/db/s/sharding_server_status.cpp11
5 files changed, 31 insertions, 6 deletions
diff --git a/jstests/sharding/global_index_feature_flagging.js b/jstests/sharding/global_index_feature_flagging.js
index de3e6556878..314e1dfbb4b 100644
--- a/jstests/sharding/global_index_feature_flagging.js
+++ b/jstests/sharding/global_index_feature_flagging.js
@@ -24,7 +24,7 @@ const st = new ShardingTest({
const configPrimary = st.configRS.getPrimary();
const serverStatusCmd = ({serverStatus: 1, shardingStatistics: 1});
let res = assert.commandWorked(configPrimary.adminCommand(serverStatusCmd));
-assert(!res.hasOwnProperty("shardingStatistics"), res.shardingStatistics);
+assert(!res.shardingStatistics.hasOwnProperty("globalIndex"), res.shardingStatistics);
const shardPrimary = st.shard0.rs.getPrimary();
res = assert.commandWorked(shardPrimary.adminCommand(serverStatusCmd));
diff --git a/jstests/sharding/resharding_feature_flagging.js b/jstests/sharding/resharding_feature_flagging.js
index 6e964a2237c..8b023168865 100644
--- a/jstests/sharding/resharding_feature_flagging.js
+++ b/jstests/sharding/resharding_feature_flagging.js
@@ -46,7 +46,7 @@ assert.commandFailedWithCode(
const serverStatusCmd = ({serverStatus: 1, shardingStatistics: 1});
let res = assert.commandWorked(configPrimary.adminCommand(serverStatusCmd));
-assert(!res.hasOwnProperty("shardingStatistics"), res.shardingStatistics);
+assert(!res.shardingStatistics.hasOwnProperty("resharding"), res.shardingStatistics);
const shardPrimary = st.shard0.rs.getPrimary();
res = assert.commandWorked(shardPrimary.adminCommand(serverStatusCmd));
diff --git a/jstests/sharding/resharding_metrics.js b/jstests/sharding/resharding_metrics.js
index 02c15cb1615..1686829ccb8 100644
--- a/jstests/sharding/resharding_metrics.js
+++ b/jstests/sharding/resharding_metrics.js
@@ -54,10 +54,6 @@ for (let [_, shardReplSet] of Object.entries(topology.shards)) {
allNodes.push(topology.configsvr.primary);
allNodes.forEach((hostName) => {
const status = new Mongo(hostName).getDB('admin').serverStatus({});
- if (hostName == topology.configsvr.primary) {
- assert(!status.hasOwnProperty('shardingStatistics'));
- return;
- }
const shardingStats = status.shardingStatistics;
assert(!shardingStats.hasOwnProperty('resharding'));
});
diff --git a/jstests/sharding/sharding_statistics_server_status.js b/jstests/sharding/sharding_statistics_server_status.js
index 67e22039403..2aad0b3cb07 100644
--- a/jstests/sharding/sharding_statistics_server_status.js
+++ b/jstests/sharding/sharding_statistics_server_status.js
@@ -64,6 +64,13 @@ function checkServerStatusAbortedMigrationCount(shardConn, count) {
assert.eq(count, shardStats.countDonorMoveChunkAbortConflictingIndexOperation);
}
+function checkServerStatusNumShardedCollections(conn, count) {
+ const shardStats =
+ assert.commandWorked(conn.adminCommand({serverStatus: 1})).shardingStatistics;
+ assert(shardStats.hasOwnProperty("numShardedCollections"));
+ assert.eq(count, shardStats.numShardedCollections);
+}
+
function runConcurrentMoveChunk(host, ns, toShard) {
const mongos = new Mongo(host);
// Helper function to run moveChunk, retrying on ConflictingOperationInProgress. We need to
@@ -132,6 +139,17 @@ st.ensurePrimaryShard(coll.getDB() + "", st.shard0.shardName);
assert.commandWorked(admin.runCommand({shardCollection: coll + "", key: {_id: 1}}));
assert.commandWorked(admin.runCommand({split: coll + "", middle: {_id: 0}}));
+// Check the number of sharded collections.
+const testDB = st.rs0.getPrimary().getDB(dbName);
+const fcvDoc = testDB.adminCommand({getParameter: 1, featureCompatibilityVersion: 1});
+if (MongoRunner.compareBinVersions(fcvDoc.featureCompatibilityVersion.version, '6.2') >= 0) {
+ st.shardColl(dbName + ".coll2", {_id: 1}, false);
+ st.shardColl(dbName + ".coll3", {_id: 1}, false);
+ const configCollections = mongos.getCollection("config.collections");
+ checkServerStatusNumShardedCollections(st.configRS.getPrimary(),
+ configCollections.countDocuments({}));
+}
+
// Move chunk from shard0 to shard1 without docs.
assert.commandWorked(
mongos.adminCommand({moveChunk: coll + '', find: {_id: 1}, to: st.shard1.shardName}));
diff --git a/src/mongo/db/s/sharding_server_status.cpp b/src/mongo/db/s/sharding_server_status.cpp
index c47bfd6388e..8369f3cbc5f 100644
--- a/src/mongo/db/s/sharding_server_status.cpp
+++ b/src/mongo/db/s/sharding_server_status.cpp
@@ -31,6 +31,7 @@
#include "mongo/bson/bsonobjbuilder.h"
#include "mongo/db/commands/server_status.h"
+#include "mongo/db/db_raii.h"
#include "mongo/db/s/active_migrations_registry.h"
#include "mongo/db/s/collection_sharding_state.h"
#include "mongo/db/s/range_deleter_service.h"
@@ -134,6 +135,16 @@ public:
CollectionShardingState::appendInfoForServerStatus(opCtx, &result);
}
+ // To calculate the number of sharded collection we simply get the number of records from
+ // `config.collections` collection. This count must only be appended when serverStatus is
+ // invoked on the config server.
+ if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer) {
+ AutoGetCollectionForRead autoColl(opCtx, CollectionType::ConfigNS);
+ const auto& collection = autoColl.getCollection();
+ const auto numShardedCollections = collection ? collection->numRecords(opCtx) : 0;
+ result.append("numShardedCollections", numShardedCollections);
+ }
+
reportDataTransformMetrics(opCtx, &result);
return result.obj();