diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2023-04-04 01:37:34 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-07 03:50:00 +0000 |
commit | 47629b53036f03296bca205304fcd586d9173db0 (patch) | |
tree | 64705ae7467e92728fdd9a6d2f65d9c75710cbcb | |
parent | d7e04f8258e2e798602368958974e78bfc1ab288 (diff) | |
download | mongo-47629b53036f03296bca205304fcd586d9173db0.tar.gz |
SERVER-74498 Remove temporary_catalog_shard_incompatible tags (part 1)
40 files changed, 182 insertions, 107 deletions
diff --git a/jstests/sharding/allow_partial_results.js b/jstests/sharding/allow_partial_results.js index e96331904a5..f3d79b4f92e 100644 --- a/jstests/sharding/allow_partial_results.js +++ b/jstests/sharding/allow_partial_results.js @@ -1,8 +1,6 @@ /** * Tests that the 'allowPartialResults' option to find is respected, and that aggregation does not * accept the 'allowPartialResults' option. - * - * @tags: [temporary_catalog_shard_incompatible] */ // This test shuts down a shard. @@ -28,11 +26,11 @@ for (let i = -50; i < 50; i++) { assert.commandWorked(bulk.execute()); jsTest.log("Create a sharded collection with one chunk on each of the two shards."); -st.ensurePrimaryShard(dbName, st.shard0.shardName); +st.ensurePrimaryShard(dbName, st.shard1.shardName); assert.commandWorked(st.s.adminCommand({enableSharding: dbName})); assert.commandWorked(st.s.adminCommand({shardCollection: ns, key: {_id: 1}})); assert.commandWorked(st.s.adminCommand({split: ns, middle: {_id: 0}})); -assert.commandWorked(st.s.adminCommand({moveChunk: ns, find: {_id: 0}, to: st.shard1.shardName})); +assert.commandWorked(st.s.adminCommand({moveChunk: ns, find: {_id: 0}, to: st.shard0.shardName})); let findRes; @@ -59,8 +57,8 @@ assert.eq(batchSize, findRes.cursor.firstBatch.length); assert.eq(undefined, findRes.cursor.partialResultsReturned); nRemainingDocs -= batchSize; -jsTest.log("Stopping " + st.shard0.shardName); -st.rs0.stopSet(); +jsTest.log("Stopping " + st.shard1.shardName); +st.rs1.stopSet(); nRemainingDocs -= nDocs / 2 - batchSize; // Do getMore with the returned cursor. diff --git a/jstests/sharding/allow_partial_results_nshards.js b/jstests/sharding/allow_partial_results_nshards.js index ebad306982e..83ea89eba9a 100644 --- a/jstests/sharding/allow_partial_results_nshards.js +++ b/jstests/sharding/allow_partial_results_nshards.js @@ -4,7 +4,6 @@ * @tags: [ * requires_replication, * requires_sharding, - * temporary_catalog_shard_incompatible, * ] */ @@ -34,7 +33,7 @@ const testColl = mongosDB.test; // Enable sharding on the the test database and ensure that the primary is on shard0. assert.commandWorked(mongosDB.adminCommand({enableSharding: mongosDB.getName()})); -st.ensurePrimaryShard(mongosDB.getName(), st.rs0.getURL()); +st.ensurePrimaryShard(mongosDB.getName(), st.rs1.getURL()); // Shard the collection on _id, split at {_id:0}, and move the upper chunk to the second shard. st.shardColl(testColl, {_id: 1}, {_id: 0}, {_id: 1}, mongosDB.getName(), true); @@ -107,7 +106,7 @@ assertMatchingLogLineExists(Object.assign({nShards: 2}, getMoreCmd)); assert.eq(getMoreRes.cursor.partialResultsReturned, undefined); // Now stop shard0. -st.rs0.stopSet(); +st.rs1.stopSet(); // Issue another getMore with a higher batchSize. getMoreCmd.comment = "allow_partial_results_getmore_nshards_2_again"; diff --git a/jstests/sharding/analyze_shard_key/analyze_shard_key_basic.js b/jstests/sharding/analyze_shard_key/analyze_shard_key_basic.js index 4ff79e6c7cc..3a034cc2142 100644 --- a/jstests/sharding/analyze_shard_key/analyze_shard_key_basic.js +++ b/jstests/sharding/analyze_shard_key/analyze_shard_key_basic.js @@ -1,7 +1,7 @@ /** * Tests support for the analyzeShardKey command. * - * @tags: [requires_fcv_70, temporary_catalog_shard_incompatible] + * @tags: [requires_fcv_70] */ (function() { "use strict"; @@ -225,9 +225,15 @@ function testNotSupportReadWriteConcern(writeConn, testCases) { // The analyzeShardKey command is not supported on dedicated configsvr mongods. const isCatalogShardEnabled = CatalogShardUtil.isEnabledIgnoringFCV(st); st.configRS.nodes.forEach(node => { - // Don't expect a sharded collection since the config server isn't enabled as a shard and - // won't have chunks. - testCases.push({conn: node, isSupported: isCatalogShardEnabled, doNotExpectColl: true}); + // If catalog shard mode isn't enabled, don't expect a sharded collection since the config + // server isn't enabled as a shard and won't have chunks. + testCases.push({ + conn: node, + isSupported: isCatalogShardEnabled, + // The config server is shard0 in catalog shard mode. + isPrimaryShardMongod: TestData.catalogShard, + doNotExpectColl: !TestData.catalogShard + }); }); testNonExistingCollection(testCases); diff --git a/jstests/sharding/analyze_shard_key/analyze_shard_key_read_preference.js b/jstests/sharding/analyze_shard_key/analyze_shard_key_read_preference.js index 7bd52d61a9b..60e1313a3f7 100644 --- a/jstests/sharding/analyze_shard_key/analyze_shard_key_read_preference.js +++ b/jstests/sharding/analyze_shard_key/analyze_shard_key_read_preference.js @@ -3,8 +3,7 @@ * * TODO (SERVER-74568): SdamServerSelector sometimes doesn't fully respect client readPreference for * config shard. - * - * @tags: [requires_fcv_70, temporary_catalog_shard_incompatible] + * @tags: [requires_fcv_70, catalog_shard_incompatible] */ (function() { "use strict"; diff --git a/jstests/sharding/analyze_shard_key/refresh_sample_rates.js b/jstests/sharding/analyze_shard_key/refresh_sample_rates.js index 3e6b0c8ff66..2dab18df68d 100644 --- a/jstests/sharding/analyze_shard_key/refresh_sample_rates.js +++ b/jstests/sharding/analyze_shard_key/refresh_sample_rates.js @@ -3,7 +3,7 @@ * primary mongod in a sharded cluster and the primary mongod in standalone replica set, and that * it returns correct sample rates. * - * @tags: [requires_fcv_70, requires_persistence, temporary_catalog_shard_incompatible] + * @tags: [requires_fcv_70, requires_persistence] */ (function() { "use strict"; @@ -284,6 +284,7 @@ function runTest(createConnFn, rst, samplerNames) { s2: {setParameter: setParameterOpts} }, shards: 1, + config: 3, rs: {nodes: 1, setParameter: setParameterOpts}, other: { configOptions: {setParameter: setParameterOpts}, @@ -300,9 +301,12 @@ function runTest(createConnFn, rst, samplerNames) { numQueriesExecutedPerSecond: 1 }; assert.commandFailedWithCode(st.s.adminCommand(cmdObj), ErrorCodes.CommandNotFound); - st.rs0.nodes.forEach(node => { - assert.commandFailedWithCode(node.adminCommand(cmdObj), ErrorCodes.IllegalOperation); - }); + if (!TestData.catalogShard) { + // Shard0 is the config server in catalog shard mode. + st.rs0.nodes.forEach(node => { + assert.commandFailedWithCode(node.adminCommand(cmdObj), ErrorCodes.IllegalOperation); + }); + } st.configRS.getSecondaries(node => { assert.commandFailedWithCode(node.adminCommand(cmdObj), ErrorCodes.NotWritablePrimary); }); diff --git a/jstests/sharding/basic_sharding_params.js b/jstests/sharding/basic_sharding_params.js index 8ab7c585147..0790e39c45d 100644 --- a/jstests/sharding/basic_sharding_params.js +++ b/jstests/sharding/basic_sharding_params.js @@ -1,6 +1,5 @@ /** * Test of complex sharding initialization - * @tags: [temporary_catalog_shard_incompatible] */ (function() { @@ -46,7 +45,12 @@ function shardingTestUsingObjects() { assert(s0.commandLine.hasOwnProperty("vvvvvv")); assert(s1.commandLine.hasOwnProperty("vvvvv")); - assert(c0.commandLine.hasOwnProperty("vvvv")); + if (!TestData.catalogShard) { + assert(c0.commandLine.hasOwnProperty("vvvv")); + } else { + // Same as shard 1. + assert(c0.commandLine.hasOwnProperty("vvv")); + } assert(rs0_d0.commandLine.hasOwnProperty("vvv")); assert(rs1_d0.commandLine.hasOwnProperty("vv")); assert(rs1_a1.commandLine.hasOwnProperty("v")); @@ -82,7 +86,12 @@ function shardingTestUsingArrays() { assert(s0.commandLine.hasOwnProperty("vvvvv")); assert(s1.commandLine.hasOwnProperty("vvvv")); - assert(c0.commandLine.hasOwnProperty("vvv")); + if (!TestData.catalogShard) { + assert(c0.commandLine.hasOwnProperty("vvv")); + } else { + // Same as shard 1. + assert(c0.commandLine.hasOwnProperty("vv")); + } assert(rs0_d0.commandLine.hasOwnProperty("vv")); assert(rs1_d0.commandLine.hasOwnProperty("v")); diff --git a/jstests/sharding/change_stream_error_label.js b/jstests/sharding/change_stream_error_label.js index d2dad6a061f..2e4476a46df 100644 --- a/jstests/sharding/change_stream_error_label.js +++ b/jstests/sharding/change_stream_error_label.js @@ -4,7 +4,6 @@ * @tags: [ * requires_sharding, * uses_change_streams, - * temporary_catalog_shard_incompatible, * ] */ (function() { @@ -106,7 +105,12 @@ assert.eq(findCursor.objsLeftInBatch(), 0); const aggCursor = coll.aggregate([{$match: {}}, {$sort: {_id: 1}}], {cursor: {batchSize: 0}}); // Now stop shard0... -st.rs0.stopSet(); +if (!TestData.catalogShard) { + st.rs0.stopSet(); +} else { + // The config server is shard0 in catalog shard mode and we'll restart it later. + st.rs0.stopSet(undefined, true /* forRestart */); +} // ... and confirm that getMore on the $changeStream throws one of the expected exceptions. let err = assert.throws(() => assert.soon(() => csCursor.hasNext())); @@ -152,5 +156,9 @@ assert.commandFailedWithCode(err, ErrorCodes.FailedToSatisfyReadPreference); // ... but does NOT include the "ResumableChangeStreamError" error label. assert(!("errorLabels" in err), err); +if (TestData.catalogShard) { + // shard0 is the config server and it needs to be up for ShardingTest shutdown. + st.rs0.startSet(undefined, true /* forRestart */); +} st.stop(); }()); diff --git a/jstests/sharding/check_metadata_consistency.js b/jstests/sharding/check_metadata_consistency.js index 8b2ea83ee3b..994b16dc494 100644 --- a/jstests/sharding/check_metadata_consistency.js +++ b/jstests/sharding/check_metadata_consistency.js @@ -1,12 +1,11 @@ /* * Tests to validate the correct behaviour of checkMetadataConsistency command. * - * + * TODO SERVER-74445: Fix cluster level checkMetadataConsistency command with a catalog shard. * @tags: [ * featureFlagCheckMetadataConsistency, * requires_fcv_70, - * # TODO SERVER-74445: Remove tag once the command will be compatible with catalog shard - * temporary_catalog_shard_incompatible, + * catalog_shard_incompatible, * ] */ diff --git a/jstests/sharding/cluster_cardinality_parameter.js b/jstests/sharding/cluster_cardinality_parameter.js index bf3f2d43d9b..9bec9f40167 100644 --- a/jstests/sharding/cluster_cardinality_parameter.js +++ b/jstests/sharding/cluster_cardinality_parameter.js @@ -2,8 +2,9 @@ * Tests that the cluster parameter "shardedClusterCardinalityForDirectConns" has the correct value * after upgrade, downgrade, and addShard. * + * TODO SERVER-75391: Enable when catalog shards can downgrade FCV * @tags: [multiversion_incompatible, featureFlagClusterCardinalityParameter, - * temporary_catalog_shard_incompatible] + * catalog_shard_incompatible] */ (function() { diff --git a/jstests/sharding/commands_that_write_accept_wc_configRS.js b/jstests/sharding/commands_that_write_accept_wc_configRS.js index 992b2a6748a..b722d96472a 100644 --- a/jstests/sharding/commands_that_write_accept_wc_configRS.js +++ b/jstests/sharding/commands_that_write_accept_wc_configRS.js @@ -10,7 +10,9 @@ * This test is labeled resource intensive because its total io_write is 70MB compared to a median * of 5MB across all sharding tests in wiredTiger. * - * @tags: [resource_intensive, temporary_catalog_shard_incompatible] + * Incompatible with catalog shard because it disables replication on shards but expects the + * config server to still satisfy majority write concern, which can't be true for a catalog shard. + * @tags: [resource_intensive, catalog_shard_incompatible] */ load('jstests/libs/write_concern_util.js'); load('jstests/multiVersion/libs/auth_helpers.js'); diff --git a/jstests/sharding/compact_structured_encryption_data_coordinator.js b/jstests/sharding/compact_structured_encryption_data_coordinator.js index 8e4f6aa763d..b909dbd10c5 100644 --- a/jstests/sharding/compact_structured_encryption_data_coordinator.js +++ b/jstests/sharding/compact_structured_encryption_data_coordinator.js @@ -2,7 +2,6 @@ // @tags: [ // requires_sharding, // requires_fcv_70, -// temporary_catalog_shard_incompatible // ] (function() { @@ -12,11 +11,16 @@ load('jstests/fle2/libs/encrypted_client_util.js'); const options = { mongos: 1, - config: 1, shards: 1, rs: {nodes: [{}]}, }; +if (!TestData.catalogShard) { + // Setting config options will override shard options in catalog shard mode, which doesn't set + // the right audit node options on the catalog shard. + options.config = 1; +} + const kHaveAuditing = buildInfo().modules.includes("enterprise"); if (kHaveAuditing) { jsTest.log('Including test for audit events since this is an enterprise build'); diff --git a/jstests/sharding/compound_hashed_shard_key_presplitting.js b/jstests/sharding/compound_hashed_shard_key_presplitting.js index 45530ce3e32..9f5cf111c6a 100644 --- a/jstests/sharding/compound_hashed_shard_key_presplitting.js +++ b/jstests/sharding/compound_hashed_shard_key_presplitting.js @@ -4,7 +4,6 @@ * * @tags: [ * multiversion_incompatible, - * temporary_catalog_shard_incompatible, * ] */ (function() { diff --git a/jstests/sharding/config_settings_schema_upgrade_downgrade.js b/jstests/sharding/config_settings_schema_upgrade_downgrade.js index 865ff3214cc..83a033d482e 100644 --- a/jstests/sharding/config_settings_schema_upgrade_downgrade.js +++ b/jstests/sharding/config_settings_schema_upgrade_downgrade.js @@ -4,11 +4,13 @@ * Tests that a schema is added to the config.settings collection on upgrade and removed on * downgrade. * + * Incompatible with a catalog shard because catalog shards can't downgrade FCV below 7.0, and this + * test is only for that particular transition. * @tags: [ * multiversion_incompatible, * featureFlagConfigSettingsSchema, * does_not_support_stepdowns, - * temporary_catalog_shard_incompatible, + * catalog_shard_incompatible, * ] */ (function() { diff --git a/jstests/sharding/configsvr_retries_createindex_on_stale_config.js b/jstests/sharding/configsvr_retries_createindex_on_stale_config.js index 60a20c63197..934636f45d5 100644 --- a/jstests/sharding/configsvr_retries_createindex_on_stale_config.js +++ b/jstests/sharding/configsvr_retries_createindex_on_stale_config.js @@ -1,8 +1,5 @@ /** * Verifies creating the logical sessions collection TTL index retries on stale version errors. - * @tags: [ - * temporary_catalog_shard_incompatible, - * ] */ (function() { @@ -17,7 +14,7 @@ let st = new ShardingTest({shards: 2}); // Validate the initial state. validateSessionsCollection(st.shard0, true, true); validateSessionsCollection(st.shard1, false, false); -validateSessionsCollection(st.configRS.getPrimary(), false, false); +validateSessionsCollection(st.configRS.getPrimary(), TestData.catalogShard, TestData.catalogShard); // Drop the TTL index on shard0. assert.commandWorked(st.shard0.getDB("config").system.sessions.dropIndex({lastUse: 1})); diff --git a/jstests/sharding/convert_to_and_from_sharded.js b/jstests/sharding/convert_to_and_from_sharded.js index b26e9e94931..12e5eccfe00 100644 --- a/jstests/sharding/convert_to_and_from_sharded.js +++ b/jstests/sharding/convert_to_and_from_sharded.js @@ -1,7 +1,7 @@ /** * Test that a replica set member can process basic CRUD operations after switching from being * a shardsvr and back to non shardsvr. - * @tags: [requires_persistence, temporary_catalog_shard_incompatible] + * @tags: [requires_persistence] */ (function() { "use strict"; @@ -32,7 +32,8 @@ var checkBasicCRUD = function(coll) { assert.eq('marker', coll.findOne({_id: 'marker'})._id); }; -var st = new ShardingTest({shards: {}}); +const numShards = TestData.catalogShard ? 1 : 0; +var st = new ShardingTest({shards: numShards}); var replShard = new ReplSetTest({nodes: NUM_NODES}); replShard.startSet({verbose: 1}); diff --git a/jstests/sharding/implicit_default_write_concern_add_shard.js b/jstests/sharding/implicit_default_write_concern_add_shard.js index 2797ea2ec10..155cc9f7fa6 100644 --- a/jstests/sharding/implicit_default_write_concern_add_shard.js +++ b/jstests/sharding/implicit_default_write_concern_add_shard.js @@ -1,14 +1,14 @@ /** * Tests adding shard to sharded cluster will fail if the implicitDefaultWriteConcern is * w:1 and CWWC is not set. - * - * For some reason fails in the check shard filtering metadata hook when shutting down the cluster. - * @tags: [temporary_catalog_shard_incompatible] */ (function() { "use strict"; +// TODO SERVER-75820: Investigate why a shard node doesn't have metadata at test shutdown. +TestData.skipCheckShardFilteringMetadata = true; + load("jstests/replsets/rslib.js"); // For reconfig and isConfigCommitted. function addNonArbiterNode(nodeId, rst) { diff --git a/jstests/sharding/index_and_collection_option_propagation.js b/jstests/sharding/index_and_collection_option_propagation.js index 425f4c393ff..00b72b7a45c 100644 --- a/jstests/sharding/index_and_collection_option_propagation.js +++ b/jstests/sharding/index_and_collection_option_propagation.js @@ -6,8 +6,9 @@ * * This test verifies this behavior. * - * Shuts down shard0, which also shuts down the config server. See if the test can be reworked. - * @tags: [temporary_catalog_shard_incompatible] + * Shuts down shard0, which also shuts down the config server. Tests mongos targeting, which won't + * be affected by a catalog shard. + * @tags: [catalog_shard_incompatible] */ // This test shuts down a shard's node and because of this consistency checking diff --git a/jstests/sharding/internal_txns/kill_sessions.js b/jstests/sharding/internal_txns/kill_sessions.js index 3d4ba47addd..1240a573510 100644 --- a/jstests/sharding/internal_txns/kill_sessions.js +++ b/jstests/sharding/internal_txns/kill_sessions.js @@ -1,7 +1,7 @@ /* * Tests running killSessions to kill internal sessions on both mongos and mongod. * - * @tags: [requires_fcv_70, uses_transactions, temporary_catalog_shard_incompatible] + * @tags: [requires_fcv_70, uses_transactions] */ (function() { 'use strict'; @@ -14,7 +14,9 @@ const st = new ShardingTest({ setParameter: {maxSessions: 1, 'failpoint.skipClusterParameterRefresh': "{'mode':'alwaysOn'}"} }, - shardOptions: {setParameter: {maxSessions: 1}} + // The config server uses a session for internal operations, so raise the limit by 1 for a + // catalog shard. + shardOptions: {setParameter: {maxSessions: TestData.catalogShard ? 2 : 1}} }); const shard0Primary = st.rs0.getPrimary(); diff --git a/jstests/sharding/internal_txns/sessions.js b/jstests/sharding/internal_txns/sessions.js index fe4ffbf1e5e..538d9ffa58b 100644 --- a/jstests/sharding/internal_txns/sessions.js +++ b/jstests/sharding/internal_txns/sessions.js @@ -1,7 +1,7 @@ /* * Tests basic support for internal sessions. * - * @tags: [requires_fcv_70, uses_transactions, temporary_catalog_shard_incompatible] + * @tags: [requires_fcv_70, uses_transactions] */ (function() { 'use strict'; @@ -14,7 +14,9 @@ const st = new ShardingTest({ setParameter: {maxSessions: 1, 'failpoint.skipClusterParameterRefresh': "{'mode':'alwaysOn'}"} }, - shardOptions: {setParameter: {maxSessions: 1}} + // The config server uses a session for internal operations, so raise the limit by 1 for a + // catalog shard. + shardOptions: {setParameter: {maxSessions: TestData.catalogShard ? 2 : 1}} }); const shard0Primary = st.rs0.getPrimary(); @@ -95,6 +97,12 @@ const kConfigSessionNs = "config.system.sessions"; // document). const sessionUUID = UUID(); + if (TestData.catalogShard) { + // Create the collection first separately, otherwise the session will be used for the + // transaction that creates the collection, leading to one extra transaction document. + assert.commandWorked(testDB.createCollection(kCollName)); + } + const parentLsid = {id: sessionUUID}; assert.commandWorked(testDB.runCommand( {insert: kCollName, documents: [{x: 0}], lsid: parentLsid, txnNumber: NumberLong(0)})); diff --git a/jstests/sharding/key_rotation.js b/jstests/sharding/key_rotation.js index ee49f7cc7f6..2c3dafebea3 100644 --- a/jstests/sharding/key_rotation.js +++ b/jstests/sharding/key_rotation.js @@ -5,8 +5,7 @@ * - manual key rotation is possible by deleting existing keys and restarting the cluster. * * Manual key rotation requires restarting a shard, so a persistent storage engine is necessary. - * Shuts down shard0, which also shuts down the config server. See if the test can be reworked. - * @tags: [requires_persistence, temporary_catalog_shard_incompatible] + * @tags: [requires_persistence] */ // This test restarts a shard replica set, potentially changing the primary node, while diff --git a/jstests/sharding/lagged_config_secondary.js b/jstests/sharding/lagged_config_secondary.js index 2327769d539..eff7d0a218f 100644 --- a/jstests/sharding/lagged_config_secondary.js +++ b/jstests/sharding/lagged_config_secondary.js @@ -1,8 +1,6 @@ /** * Test that mongos times out when the config server replica set only contains nodes that * are behind the majority opTime. - * - * @tags: [temporary_catalog_shard_incompatible] */ load("jstests/libs/write_concern_util.js"); @@ -30,6 +28,7 @@ const failpointParams = { var st = new ShardingTest({ shards: 1, + config: 3, configReplSetTestOptions: {settings: {chainingAllowed: false}}, other: { configOptions: failpointParams, diff --git a/jstests/sharding/libs/resharding_test_fixture.js b/jstests/sharding/libs/resharding_test_fixture.js index a6f2bf3d836..9657a63db98 100644 --- a/jstests/sharding/libs/resharding_test_fixture.js +++ b/jstests/sharding/libs/resharding_test_fixture.js @@ -106,8 +106,8 @@ var ReshardingTest = class { setup() { const mongosOptions = {setParameter: {}}; - const configOptions = {setParameter: {}}; - const rsOptions = { + let configOptions = {setParameter: {}}; + let rsOptions = { setParameter: { storeFindAndModifyImagesInSideCollection: this._storeFindAndModifyImagesInSideCollection @@ -177,6 +177,15 @@ var ReshardingTest = class { this._maxNumberOfTransactionOperationsInSingleOplogEntry; } + if (this._catalogShard) { + // ShardingTest does not currently support deep merging of options, so merge the set + // parameters for config and replica sets here. + rsOptions.setParameter = + Object.merge(rsOptions.setParameter, configOptions.setParameter); + configOptions.setParameter = + Object.merge(configOptions.setParameter, rsOptions.setParameter); + } + this._st = new ShardingTest({ mongos: 1, mongosOptions, diff --git a/jstests/sharding/listDatabases.js b/jstests/sharding/listDatabases.js index 7a9358c5a23..88ec308ddab 100644 --- a/jstests/sharding/listDatabases.js +++ b/jstests/sharding/listDatabases.js @@ -1,4 +1,3 @@ -// @tags: [temporary_catalog_shard_incompatible] (function() { 'use strict'; var test = new ShardingTest({shards: 1, mongos: 1, other: {chunkSize: 1}}); @@ -39,9 +38,9 @@ var dbEntryCheck = function(dbEntry, onConfig) { res = mongos.adminCommand("listDatabases"); dbArray = res.databases; - dbEntryCheck(getDBSection(dbArray, "blah"), false); - dbEntryCheck(getDBSection(dbArray, "foo"), false); - dbEntryCheck(getDBSection(dbArray, "raw"), false); + dbEntryCheck(getDBSection(dbArray, "blah"), TestData.catalogShard); + dbEntryCheck(getDBSection(dbArray, "foo"), TestData.catalogShard); + dbEntryCheck(getDBSection(dbArray, "raw"), TestData.catalogShard); } // Local db is never returned. @@ -74,7 +73,8 @@ var dbEntryCheck = function(dbEntry, onConfig) { var entry = getDBSection(dbArray, "config"); dbEntryCheck(entry, true); assert(entry["shards"]); - assert.eq(Object.keys(entry["shards"]).length, 2); + // There's only the "config" shard in catalog shard mode. + assert.eq(Object.keys(entry["shards"]).length, TestData.catalogShard ? 1 : 2); } // Admin db is only reported on the config shard, never on other shards. diff --git a/jstests/sharding/merge_all_chunks_on_shard.js b/jstests/sharding/merge_all_chunks_on_shard.js index 805a656a290..3abf22de35d 100644 --- a/jstests/sharding/merge_all_chunks_on_shard.js +++ b/jstests/sharding/merge_all_chunks_on_shard.js @@ -3,7 +3,6 @@ * * @tags: [ * requires_fcv_70, - * temporary_catalog_shard_incompatible, * ] */ (function() { diff --git a/jstests/sharding/merge_with_chunk_migrations.js b/jstests/sharding/merge_with_chunk_migrations.js index 53b87cbafd2..097f469d298 100644 --- a/jstests/sharding/merge_with_chunk_migrations.js +++ b/jstests/sharding/merge_with_chunk_migrations.js @@ -1,9 +1,5 @@ // Tests that the $merge aggregation stage is resilient to chunk migrations in both the source and // output collection during execution. -// -// Fails waiting for a specific aggregation in currentOp, which probably isn't working when we -// change the cluster topology. -// @tags: [temporary_catalog_shard_incompatible] (function() { 'use strict'; @@ -16,10 +12,18 @@ const sourceColl = mongosDB["source"]; const targetColl = mongosDB["target"]; function setAggHang(mode) { - assert.commandWorked(st.shard0.adminCommand( - {configureFailPoint: "hangBeforeDocumentSourceCursorLoadBatch", mode: mode})); - assert.commandWorked(st.shard1.adminCommand( - {configureFailPoint: "hangBeforeDocumentSourceCursorLoadBatch", mode: mode})); + // Match on the output namespace to avoid hanging the sharding metadata refresh aggregation when + // shard0 is a catalog shard. + assert.commandWorked(st.shard0.adminCommand({ + configureFailPoint: "hangBeforeDocumentSourceCursorLoadBatch", + mode: mode, + data: {nss: "merge_with_chunk_migrations.source"} + })); + assert.commandWorked(st.shard1.adminCommand({ + configureFailPoint: "hangBeforeDocumentSourceCursorLoadBatch", + mode: mode, + data: {nss: "merge_with_chunk_migrations.source"} + })); } function runMergeWithMode(whenMatchedMode, whenNotMatchedMode, shardedColl) { diff --git a/jstests/sharding/merge_with_drop_shard.js b/jstests/sharding/merge_with_drop_shard.js index c06f5866b40..ae6c83297f6 100644 --- a/jstests/sharding/merge_with_drop_shard.js +++ b/jstests/sharding/merge_with_drop_shard.js @@ -1,7 +1,5 @@ // Tests that the $merge aggregation stage is resilient to drop shard in both the source and // output collection during execution. -// -// @tags: [temporary_catalog_shard_incompatible] (function() { 'use strict'; @@ -20,13 +18,21 @@ const sourceColl = mongosDB["source"]; const targetColl = mongosDB["target"]; assert.commandWorked(st.s.getDB("admin").runCommand({enableSharding: mongosDB.getName()})); -st.ensurePrimaryShard(mongosDB.getName(), st.shard1.name); +st.ensurePrimaryShard(mongosDB.getName(), st.shard0.name); function setAggHang(mode) { - assert.commandWorked(st.shard0.adminCommand( - {configureFailPoint: "hangWhileBuildingDocumentSourceMergeBatch", mode: mode})); - assert.commandWorked(st.shard1.adminCommand( - {configureFailPoint: "hangWhileBuildingDocumentSourceMergeBatch", mode: mode})); + // Match on the output namespace to avoid hanging the sharding metadata refresh aggregation when + // shard0 is a catalog shard. + assert.commandWorked(st.shard0.adminCommand({ + configureFailPoint: "hangWhileBuildingDocumentSourceMergeBatch", + mode: mode, + data: {nss: targetColl.getFullName()} + })); + assert.commandWorked(st.shard1.adminCommand({ + configureFailPoint: "hangWhileBuildingDocumentSourceMergeBatch", + mode: mode, + data: {nss: targetColl.getFullName()} + })); } function removeShardAndRefreshRouter(shard) { @@ -99,9 +105,9 @@ function runMergeWithMode( }); if (dropShard) { - removeShardAndRefreshRouter(st.shard0); + removeShardAndRefreshRouter(st.shard1); } else { - addShard(st.rs0.getURL()); + addShard(st.rs1.getURL()); } // Unset the failpoint to unblock the $merge and join with the parallel shell. setAggHang("off"); diff --git a/jstests/sharding/nonreplicated_uuids_on_shardservers.js b/jstests/sharding/nonreplicated_uuids_on_shardservers.js index 5e97df80ed7..ac1a875f24a 100644 --- a/jstests/sharding/nonreplicated_uuids_on_shardservers.js +++ b/jstests/sharding/nonreplicated_uuids_on_shardservers.js @@ -1,6 +1,6 @@ // SERVER-32255 This test ensures a node started with --shardsvr and added to a replica set receives // UUIDs upon re-initiation. -// @tags: [multiversion_incompatible, temporary_catalog_shard_incompatible] +// @tags: [multiversion_incompatible] (function() { "use strict"; load("jstests/libs/check_uuids.js"); @@ -12,7 +12,8 @@ let rs = st.rs0; mongos.getDB("test").coll.insert({_id: 1, x: 1}); // Add a node with --shardsvr to the replica set. -let newNode = rs.add({'shardsvr': '', rsConfig: {priority: 0, votes: 0}}); +const clusterRoleOption = TestData.catalogShard ? "configsvr" : "shardsvr"; +let newNode = rs.add({[clusterRoleOption]: '', rsConfig: {priority: 0, votes: 0}}); rs.reInitiate(); rs.awaitSecondaryNodes(); diff --git a/jstests/sharding/query/owning_shard_expression.js b/jstests/sharding/query/owning_shard_expression.js index fd0707ca584..a735654f86d 100644 --- a/jstests/sharding/query/owning_shard_expression.js +++ b/jstests/sharding/query/owning_shard_expression.js @@ -2,7 +2,7 @@ * Tests that $_internalOwningShard expression correctly computes the shard id the document belongs * to, while executing on mongod. * - * @tags: [requires_fcv_63, temporary_catalog_shard_incompatible] + * @tags: [requires_fcv_63] */ (function() { "use strict"; @@ -106,7 +106,7 @@ CreateShardedCollectionUtil.shardCollectionWithChunks(destinationColl, {_id: 1}, {min: {_id: 66}, max: {_id: MaxKey}, shard: st.shard2.shardName}, ]); const expectedResult = [ - {shard: `${dbName}-rs0`, indexData: documentOnShard0}, + {shard: st.shard0.shardName, indexData: documentOnShard0}, {shard: `${dbName}-rs1`, indexData: documentOnShard1}, {shard: `${dbName}-rs2`, indexData: documentOnShard2}, ]; diff --git a/jstests/sharding/query/view_rewrite.js b/jstests/sharding/query/view_rewrite.js index 3c27db5e400..0d2f76af8fd 100644 --- a/jstests/sharding/query/view_rewrite.js +++ b/jstests/sharding/query/view_rewrite.js @@ -1,8 +1,6 @@ /** * Tests that query options are not dropped by mongos when a query against a view is rewritten as an * aggregation against the underlying collection. - * - * @tags: [temporary_catalog_shard_incompatible] */ (function() { "use strict"; @@ -31,7 +29,7 @@ const mongosDB = mongos.getDB("view_rewrite"); const coll = mongosDB.getCollection("coll"); assert.commandWorked(config.adminCommand({enableSharding: mongosDB.getName()})); -st.ensurePrimaryShard(mongosDB.getName(), "view_rewrite-rs0"); +st.ensurePrimaryShard(mongosDB.getName(), st.shard0.shardName); const rs0Secondary = st.rs0.getSecondary(); const rs1Primary = st.rs1.getPrimary(); diff --git a/jstests/sharding/reconfig_fails_no_cwwc_set_sharding.js b/jstests/sharding/reconfig_fails_no_cwwc_set_sharding.js index 15eebaac2c2..55445e5e572 100644 --- a/jstests/sharding/reconfig_fails_no_cwwc_set_sharding.js +++ b/jstests/sharding/reconfig_fails_no_cwwc_set_sharding.js @@ -8,13 +8,15 @@ * requires_majority_read_concern, * requires_persistence, * requires_fcv_51, - * temporary_catalog_shard_incompatible, * ] */ (function() { 'use strict'; +// TODO SERVER-75820: Investigate why a shard node doesn't have metadata at test shutdown. +TestData.skipCheckShardFilteringMetadata = true; + load("jstests/replsets/rslib.js"); // For reconfig, isConfigCommitted and // safeReconfigShouldFail. diff --git a/jstests/sharding/resharding_change_stream_namespace_filtering.js b/jstests/sharding/resharding_change_stream_namespace_filtering.js index 9beaec35ffd..b1b31d4dc8a 100644 --- a/jstests/sharding/resharding_change_stream_namespace_filtering.js +++ b/jstests/sharding/resharding_change_stream_namespace_filtering.js @@ -4,7 +4,6 @@ * @tags: [ * uses_change_streams, * requires_fcv_50, - * temporary_catalog_shard_incompatible, * ] */ @@ -41,7 +40,7 @@ const shardOtherCollCsCursor = // Drop, recreate, and shard the 'coll_reshard' collection. assertDropAndRecreateCollection(mongosDB, reshardCollName); -st.ensurePrimaryShard(dbName, st.rs0.name); +st.ensurePrimaryShard(dbName, st.shard0.shardName); st.shardColl(mongosReshardColl, {a: 1}, {a: 50}); for (let i = 0; i < 100; ++i) { diff --git a/jstests/sharding/resharding_disallow_drop.js b/jstests/sharding/resharding_disallow_drop.js index dca009de969..c9f7b373a0b 100644 --- a/jstests/sharding/resharding_disallow_drop.js +++ b/jstests/sharding/resharding_disallow_drop.js @@ -3,7 +3,6 @@ * @tags: [ * requires_fcv_53, * featureFlagRecoverableShardsvrReshardCollectionCoordinator, - * temporary_catalog_shard_incompatible, * ] */ (function() { @@ -13,7 +12,7 @@ load("jstests/libs/fail_point_util.js"); var st = new ShardingTest({ shards: {rs0: {nodes: 2}}, - config: 1, + config: TestData.catalogShard ? 2 : 1, mongos: 1, other: { configOptions: {setParameter: {reshardingCriticalSectionTimeoutMillis: 24 * 60 * 60 * 1000}} diff --git a/jstests/sharding/resharding_retryable_writes.js b/jstests/sharding/resharding_retryable_writes.js index e2d1d781ea5..5ff2d8fe7af 100644 --- a/jstests/sharding/resharding_retryable_writes.js +++ b/jstests/sharding/resharding_retryable_writes.js @@ -4,9 +4,7 @@ * txnCloners were not started until after waiting for reshardingMinimumOperationDurationMillis to * elapse. * - * The higher minimumOperationDurationMS parameter is not being set on the config server. Correctly - * waits for the default value, but not the expected higher one. - * @tags: [uses_atclustertime, temporary_catalog_shard_incompatible] + * @tags: [uses_atclustertime] */ (function() { diff --git a/jstests/sharding/resharding_size_estimate.js b/jstests/sharding/resharding_size_estimate.js index a6c8e3c799b..e8308f49d47 100644 --- a/jstests/sharding/resharding_size_estimate.js +++ b/jstests/sharding/resharding_size_estimate.js @@ -3,7 +3,6 @@ * * @tags: [ * uses_atclustertime, - * temporary_catalog_shard_incompatible, * ] */ @@ -96,7 +95,7 @@ reshardingTest.withReshardingInBackground( jsTest.log("Check size estimate on resharding coordinator document:\n" + tojson(coordinatorDoc)); - const s0Estimate = getShardEstimate(coordinatorDoc, 'shard0'); + const s0Estimate = getShardEstimate(coordinatorDoc, donorShardNames[0]); const s1Estimate = getShardEstimate(coordinatorDoc, 'shard1'); assert.gt(s0Estimate.bytesToClone, smallData.length); diff --git a/jstests/sharding/retryable_writes.js b/jstests/sharding/retryable_writes.js index e43b440aa05..653526d91b0 100644 --- a/jstests/sharding/retryable_writes.js +++ b/jstests/sharding/retryable_writes.js @@ -1,8 +1,6 @@ /** * Test basic retryable write without errors by checking that the resulting collection after the * retry is as expected and it does not create additional oplog entries. - * - * @tags: [temporary_catalog_shard_incompatible] */ (function() { "use strict"; @@ -38,6 +36,12 @@ function verifyServerStatusChanges( function runTests(mainConn, priConn) { var lsid = UUID(); + if (TestData.catalogShard) { + // Creating a collection updates counters on the config server, so do that before getting + // the initial stats. + assert.commandWorked(mainConn.getDB("test").createCollection("user")); + } + //////////////////////////////////////////////////////////////////////// // Test insert command @@ -325,6 +329,12 @@ function runFailpointTests(mainConn, priConn) { var lsid = UUID(); var testDb = mainConn.getDB('TestDB'); + if (TestData.catalogShard) { + // TODO SERVER-75821: Workaround for crash when executing the fail point while implicitly + // creating a collection in a transaction on the config server. + assert.commandWorked(testDb.createCollection("user")); + } + // Test connection close (default behaviour). The connection will get closed, but the // inserts must succeed assert.commandWorked(priConn.adminCommand( diff --git a/jstests/sharding/set_fcv_logging.js b/jstests/sharding/set_fcv_logging.js index 68b39649406..a3536a46503 100644 --- a/jstests/sharding/set_fcv_logging.js +++ b/jstests/sharding/set_fcv_logging.js @@ -5,10 +5,11 @@ * FCV is upgrading or downgrading (6744301) * FCV upgrade or downgrade success (6744302). * + * TODO SERVER-75391: Enable with catalog shards when catalog shards can downgrade FCV. * @tags: [ * multiversion_incompatible, * does_not_support_stepdowns, - * temporary_catalog_shard_incompatible, + * catalog_shard_incompatible, * ] */ diff --git a/jstests/sharding/unique_index_on_shardservers.js b/jstests/sharding/unique_index_on_shardservers.js index 7443f7aa800..f34894f3c44 100644 --- a/jstests/sharding/unique_index_on_shardservers.js +++ b/jstests/sharding/unique_index_on_shardservers.js @@ -1,6 +1,5 @@ // SERVER-34954 This test ensures a node started with --shardsvr and added to a replica set has // the correct version of unique indexes upon re-initiation. -// @tags: [temporary_catalog_shard_incompatible] (function() { "use strict"; load("jstests/libs/check_unique_indexes.js"); @@ -21,7 +20,12 @@ assert.commandWorked(mongos.getDB("test").coll.createIndex({e: 1})); assert.commandWorked(mongos.getDB("test").coll.createIndex({f: 1}, {"unique": true})); // Add a node with --shardsvr to the replica set. -let newNode = rs.add({'shardsvr': '', rsConfig: {priority: 0, votes: 0}}); +let newNode; +if (TestData.catalogShard) { + newNode = rs.add({'configsvr': '', rsConfig: {priority: 0, votes: 0}}); +} else { + newNode = rs.add({'shardsvr': '', rsConfig: {priority: 0, votes: 0}}); +} rs.reInitiate(); rs.awaitSecondaryNodes(); diff --git a/jstests/sharding/use_rsm_data_for_cs.js b/jstests/sharding/use_rsm_data_for_cs.js index 79df11a3aad..8bff84db6ee 100644 --- a/jstests/sharding/use_rsm_data_for_cs.js +++ b/jstests/sharding/use_rsm_data_for_cs.js @@ -1,4 +1,3 @@ -// @tags: [temporary_catalog_shard_incompatible] (function() { 'use strict'; @@ -22,7 +21,11 @@ rs.nodes.forEach(function(node) { }); // add a node to shard rs -rs.add({'shardsvr': ''}); +if (TestData.catalogShard) { + rs.add({'configsvr': ''}); +} else { + rs.add({'shardsvr': ''}); +} rs.reInitiate(); rs.awaitSecondaryNodes(); diff --git a/src/mongo/db/pipeline/document_source_cursor.cpp b/src/mongo/db/pipeline/document_source_cursor.cpp index f01f2e0d347..ae35d219af5 100644 --- a/src/mongo/db/pipeline/document_source_cursor.cpp +++ b/src/mongo/db/pipeline/document_source_cursor.cpp @@ -33,6 +33,7 @@ #include "mongo/db/pipeline/document_source_cursor.h" #include "mongo/db/catalog/collection.h" +#include "mongo/db/curop_failpoint_helpers.h" #include "mongo/db/db_raii.h" #include "mongo/db/exec/document_value/document.h" #include "mongo/db/exec/working_set_common.h" @@ -131,11 +132,15 @@ void DocumentSourceCursor::loadBatch() { return; } - while (MONGO_unlikely(hangBeforeDocumentSourceCursorLoadBatch.shouldFail())) { - LOGV2(20895, - "Hanging aggregation due to 'hangBeforeDocumentSourceCursorLoadBatch' failpoint"); - sleepmillis(10); - } + CurOpFailpointHelpers::waitWhileFailPointEnabled( + &hangBeforeDocumentSourceCursorLoadBatch, + pExpCtx->opCtx, + "hangBeforeDocumentSourceCursorLoadBatch", + []() { + LOGV2(20895, + "Hanging aggregation due to 'hangBeforeDocumentSourceCursorLoadBatch' failpoint"); + }, + _exec->nss()); PlanExecutor::ExecState state; Document resultObj; diff --git a/src/mongo/db/pipeline/document_source_merge.cpp b/src/mongo/db/pipeline/document_source_merge.cpp index d21c8392324..485ad58300f 100644 --- a/src/mongo/db/pipeline/document_source_merge.cpp +++ b/src/mongo/db/pipeline/document_source_merge.cpp @@ -626,7 +626,8 @@ void DocumentSourceMerge::waitWhileFailPointEnabled() { LOGV2( 20900, "Hanging aggregation due to 'hangWhileBuildingDocumentSourceMergeBatch' failpoint"); - }); + }, + _outputNs); } } // namespace mongo |