diff --git a/jstests/sharding/fcbis-sharding.js b/jstests/sharding/fcbis-sharding.js new file mode 100644 index 00000000000..2b018f8ad3d --- /dev/null +++ b/jstests/sharding/fcbis-sharding.js @@ -0,0 +1,53 @@ +(function() { +'use strict'; + +load("jstests/replsets/rslib.js"); // For reconfig and isConfigCommitted. + +let addNodeConfig = function(rst, nodeId, conn) { + var config = rst.getReplSetConfigFromNode(); + config.version += 1; + config.members.push({_id: nodeId, host: conn.host}); + reconfig(rst, config); + assert.soon(() => isConfigCommitted(rst.getPrimary())); + rst.waitForConfigReplication(rst.getPrimary()); + rst.awaitReplication(); + return config; +}; + +var st = new ShardingTest({ + config: 1, + shards: {rs0: {nodes: 1}} +}); +var mongos = st.s; +var rs = st.rs0; + +// fcync the two current members before FCBIS +assert.commandWorked(rs.getPrimary().adminCommand({fsync: 1})); +// assert.commandWorked(rs.getSecondary().adminCommand({fsync: 1})); + +// Add a new member that will undergo initial sync +let newNode = rs.add({'shardsvr': '', rsConfig: {priority: 10}, setParameter: {'initialSyncMethod': 'fileCopyBased'}}); +addNodeConfig(rs, 2, newNode); +rs.waitForState(newNode, ReplSetTest.State.SECONDARY); +rs.waitForAllNewlyAddedRemovals(); + +jsTest.log("--XXXX-- Added new member"); + +// See that because of the bug, sharding has not been initialized. Don't fail the test yet though. +jsTest.log("--XXXX-- newNode serverStatus.sharding: " + tojson(newNode.adminCommand({'serverStatus': 1, sharding: 1}).sharding)); + +// Make the new member become primary +assert.commandWorked(newNode.adminCommand({replSetStepUp: 1})); +jsTest.log("--XXXX-- After replSetStepUp"); + +rs.awaitNodesAgreeOnPrimary(undefined, undefined, newNode); +jsTest.log("--XXXX-- All nodes agree on newNode being primary"); + +// BUG: This insert will fail because 'newNode' has not initialized its +// ShardingInitializationMongoD. This only happens when using FCBIS. +assert.commandWorked(st.s.getDB('test').getCollection('foo').insert({x: 1})); // <= This will fail! +jsTest.log("--XXXX-- After insert on new member"); + +st.stop(); +})(); +