summaryrefslogtreecommitdiff
path: root/jstests/sharding/zero_shard_version.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/zero_shard_version.js')
-rw-r--r--jstests/sharding/zero_shard_version.js333
1 files changed, 165 insertions, 168 deletions
diff --git a/jstests/sharding/zero_shard_version.js b/jstests/sharding/zero_shard_version.js
index 20fae7ac522..9f15e247e83 100644
--- a/jstests/sharding/zero_shard_version.js
+++ b/jstests/sharding/zero_shard_version.js
@@ -3,178 +3,175 @@
* against a major version of zero or incompatible epochs.
*/
(function() {
-'use strict';
-
-var st = new ShardingTest({ shards: 2, mongos: 4 });
-
-var testDB_s0 = st.s.getDB('test');
-assert.commandWorked(testDB_s0.adminCommand({ enableSharding: 'test' }));
-st.ensurePrimaryShard('test', 'shard0001');
-assert.commandWorked(testDB_s0.adminCommand({ shardCollection: 'test.user', key: { x: 1 }}));
-
-var checkShardMajorVersion = function(conn, expectedVersion) {
- var shardVersionInfo = conn.adminCommand({ getShardVersion: 'test.user' });
- assert.eq(expectedVersion, shardVersionInfo.global.getTime());
-};
+ 'use strict';
-///////////////////////////////////////////////////////
-// Test shard with empty chunk
+ var st = new ShardingTest({shards: 2, mongos: 4});
+
+ var testDB_s0 = st.s.getDB('test');
+ assert.commandWorked(testDB_s0.adminCommand({enableSharding: 'test'}));
+ st.ensurePrimaryShard('test', 'shard0001');
+ assert.commandWorked(testDB_s0.adminCommand({shardCollection: 'test.user', key: {x: 1}}));
-// shard0: 0|0|a
-// shard1: 1|0|a, [-inf, inf)
-// mongos0: 1|0|a
-
-var testDB_s1 = st.s1.getDB('test');
-assert.writeOK(testDB_s1.user.insert({ x: 1 }));
-assert.commandWorked(testDB_s1.adminCommand({ moveChunk: 'test.user',
- find: { x: 0 },
- to: 'shard0000' }));
-
-// Official config:
-// shard0: 2|0|a, [-inf, inf)
-// shard1: 0|0|a
-//
-// Shard metadata:
-// shard0: 0|0|a
-// shard1: 0|0|a
-// mongos0: 1|0|a
-
-checkShardMajorVersion(st.d0, 0);
-checkShardMajorVersion(st.d1, 0);
-
-// mongos0 still thinks that { x: 1 } belong to shard0001, but should be able to
-// refresh it's metadata correctly.
-assert.neq(null, testDB_s0.user.findOne({ x: 1 }));
+ var checkShardMajorVersion = function(conn, expectedVersion) {
+ var shardVersionInfo = conn.adminCommand({getShardVersion: 'test.user'});
+ assert.eq(expectedVersion, shardVersionInfo.global.getTime());
+ };
-checkShardMajorVersion(st.d0, 2);
-checkShardMajorVersion(st.d1, 0);
-
-// Set mongos2 & mongos3 to version 2|0|a
-var testDB_s2 = st.s2.getDB('test');
-assert.neq(null, testDB_s2.user.findOne({ x: 1 }));
-
-var testDB_s3 = st.s3.getDB('test');
-assert.neq(null, testDB_s3.user.findOne({ x: 1 }));
-
-///////////////////////////////////////////////////////
-// Test unsharded collection
-// mongos versions: s0, s2, s3: 2|0|a
-
-testDB_s1.user.drop();
-assert.writeOK(testDB_s1.user.insert({ x: 10 }));
-
-// shard0: 0|0|0
-// shard1: 0|0|0
-// mongos0: 2|0|a
-
-checkShardMajorVersion(st.d0, 0);
-checkShardMajorVersion(st.d1, 0);
-
-// mongos0 still thinks { x: 10 } belong to shard0000, but since coll is dropped,
-// query should be routed to primary shard.
-assert.neq(null, testDB_s0.user.findOne({ x: 10 }));
-
-checkShardMajorVersion(st.d0, 0);
-checkShardMajorVersion(st.d1, 0);
-
-///////////////////////////////////////////////////////
-// Test 2 shards with 1 chunk
-// mongos versions: s0: 0|0|0, s2, s3: 2|0|a
-
-testDB_s1.user.drop();
-testDB_s1.adminCommand({ shardCollection: 'test.user', key: { x: 1 }});
-testDB_s1.adminCommand({ split: 'test.user', middle: { x: 0 }});
-
-// shard0: 0|0|b,
-// shard1: 1|1|b, [-inf, 0), [0, inf)
-
-testDB_s1.user.insert({ x: 1 });
-testDB_s1.user.insert({ x: -11 });
-assert.commandWorked(testDB_s1.adminCommand({ moveChunk: 'test.user',
- find: { x: -1 },
- to: 'shard0000' }));
-
-// Official config:
-// shard0: 2|0|b, [-inf, 0)
-// shard1: 2|1|b, [0, inf)
-//
-// Shard metadata:
-// shard0: 0|0|b
-// shard1: 2|1|b
-//
-// mongos2: 2|0|a
-
-checkShardMajorVersion(st.d0, 0);
-checkShardMajorVersion(st.d1, 2);
-
-// mongos2 still thinks that { x: 1 } belong to shard0000, but should be able to
-// refresh it's metadata correctly.
-assert.neq(null, testDB_s2.user.findOne({ x: 1 }));
-
-checkShardMajorVersion(st.d0, 2);
-checkShardMajorVersion(st.d1, 2);
-
-// Set shard metadata to 2|0|b
-assert.neq(null, testDB_s2.user.findOne({ x: -11 }));
-
-checkShardMajorVersion(st.d0, 2);
-checkShardMajorVersion(st.d1, 2);
-
-// Official config:
-// shard0: 2|0|b, [-inf, 0)
-// shard1: 2|1|b, [0, inf)
-//
-// Shard metadata:
-// shard0: 2|0|b
-// shard1: 2|1|b
-//
-// mongos3: 2|0|a
-
-// 4th mongos still thinks that { x: 1 } belong to shard0000, but should be able to
-// refresh it's metadata correctly.
-assert.neq(null, testDB_s3.user.findOne({ x: 1 }));
-
-///////////////////////////////////////////////////////
-// Test mongos thinks unsharded when it's actually sharded
-// mongos current versions: s0: 0|0|0, s2, s3: 2|0|b
+ ///////////////////////////////////////////////////////
+ // Test shard with empty chunk
-// Set mongos0 to version 0|0|0
-testDB_s0.user.drop();
-
-checkShardMajorVersion(st.d0, 0);
-checkShardMajorVersion(st.d1, 0);
-
-assert.eq(null, testDB_s0.user.findOne({ x: 1 }));
+ // shard0: 0|0|a
+ // shard1: 1|0|a, [-inf, inf)
+ // mongos0: 1|0|a
+
+ var testDB_s1 = st.s1.getDB('test');
+ assert.writeOK(testDB_s1.user.insert({x: 1}));
+ assert.commandWorked(
+ testDB_s1.adminCommand({moveChunk: 'test.user', find: {x: 0}, to: 'shard0000'}));
+
+ // Official config:
+ // shard0: 2|0|a, [-inf, inf)
+ // shard1: 0|0|a
+ //
+ // Shard metadata:
+ // shard0: 0|0|a
+ // shard1: 0|0|a
+ // mongos0: 1|0|a
+
+ checkShardMajorVersion(st.d0, 0);
+ checkShardMajorVersion(st.d1, 0);
+
+ // mongos0 still thinks that { x: 1 } belong to shard0001, but should be able to
+ // refresh it's metadata correctly.
+ assert.neq(null, testDB_s0.user.findOne({x: 1}));
-// Needs to also set mongos1 to version 0|0|0, otherwise it'll complain that collection is
-// already sharded.
-assert.eq(null, testDB_s1.user.findOne({ x: 1 }));
-assert.commandWorked(testDB_s1.adminCommand({ shardCollection: 'test.user', key: { x: 1 }}));
-testDB_s1.user.insert({ x: 1 });
-
-assert.commandWorked(testDB_s1.adminCommand({ moveChunk: 'test.user',
- find: { x: 0 },
- to: 'shard0000' }));
-
-// Official config:
-// shard0: 2|0|c, [-inf, inf)
-// shard1: 0|0|c
-//
-// Shard metadata:
-// shard0: 0|0|c
-// shard1: 0|0|c
-//
-// mongos0: 0|0|0
-
-checkShardMajorVersion(st.d0, 0);
-checkShardMajorVersion(st.d1, 0);
-
-// 1st mongos thinks that collection is unshareded and will attempt to query primary shard.
-assert.neq(null, testDB_s0.user.findOne({ x: 1 }));
-
-checkShardMajorVersion(st.d0, 2);
-checkShardMajorVersion(st.d1, 0);
-
-st.stop();
+ checkShardMajorVersion(st.d0, 2);
+ checkShardMajorVersion(st.d1, 0);
+
+ // Set mongos2 & mongos3 to version 2|0|a
+ var testDB_s2 = st.s2.getDB('test');
+ assert.neq(null, testDB_s2.user.findOne({x: 1}));
+
+ var testDB_s3 = st.s3.getDB('test');
+ assert.neq(null, testDB_s3.user.findOne({x: 1}));
+
+ ///////////////////////////////////////////////////////
+ // Test unsharded collection
+ // mongos versions: s0, s2, s3: 2|0|a
+
+ testDB_s1.user.drop();
+ assert.writeOK(testDB_s1.user.insert({x: 10}));
+
+ // shard0: 0|0|0
+ // shard1: 0|0|0
+ // mongos0: 2|0|a
+
+ checkShardMajorVersion(st.d0, 0);
+ checkShardMajorVersion(st.d1, 0);
+
+ // mongos0 still thinks { x: 10 } belong to shard0000, but since coll is dropped,
+ // query should be routed to primary shard.
+ assert.neq(null, testDB_s0.user.findOne({x: 10}));
+
+ checkShardMajorVersion(st.d0, 0);
+ checkShardMajorVersion(st.d1, 0);
+
+ ///////////////////////////////////////////////////////
+ // Test 2 shards with 1 chunk
+ // mongos versions: s0: 0|0|0, s2, s3: 2|0|a
+
+ testDB_s1.user.drop();
+ testDB_s1.adminCommand({shardCollection: 'test.user', key: {x: 1}});
+ testDB_s1.adminCommand({split: 'test.user', middle: {x: 0}});
+
+ // shard0: 0|0|b,
+ // shard1: 1|1|b, [-inf, 0), [0, inf)
+
+ testDB_s1.user.insert({x: 1});
+ testDB_s1.user.insert({x: -11});
+ assert.commandWorked(
+ testDB_s1.adminCommand({moveChunk: 'test.user', find: {x: -1}, to: 'shard0000'}));
+
+ // Official config:
+ // shard0: 2|0|b, [-inf, 0)
+ // shard1: 2|1|b, [0, inf)
+ //
+ // Shard metadata:
+ // shard0: 0|0|b
+ // shard1: 2|1|b
+ //
+ // mongos2: 2|0|a
+
+ checkShardMajorVersion(st.d0, 0);
+ checkShardMajorVersion(st.d1, 2);
+
+ // mongos2 still thinks that { x: 1 } belong to shard0000, but should be able to
+ // refresh it's metadata correctly.
+ assert.neq(null, testDB_s2.user.findOne({x: 1}));
+
+ checkShardMajorVersion(st.d0, 2);
+ checkShardMajorVersion(st.d1, 2);
+
+ // Set shard metadata to 2|0|b
+ assert.neq(null, testDB_s2.user.findOne({x: -11}));
+
+ checkShardMajorVersion(st.d0, 2);
+ checkShardMajorVersion(st.d1, 2);
+
+ // Official config:
+ // shard0: 2|0|b, [-inf, 0)
+ // shard1: 2|1|b, [0, inf)
+ //
+ // Shard metadata:
+ // shard0: 2|0|b
+ // shard1: 2|1|b
+ //
+ // mongos3: 2|0|a
+
+ // 4th mongos still thinks that { x: 1 } belong to shard0000, but should be able to
+ // refresh it's metadata correctly.
+ assert.neq(null, testDB_s3.user.findOne({x: 1}));
+
+ ///////////////////////////////////////////////////////
+ // Test mongos thinks unsharded when it's actually sharded
+ // mongos current versions: s0: 0|0|0, s2, s3: 2|0|b
+
+ // Set mongos0 to version 0|0|0
+ testDB_s0.user.drop();
+
+ checkShardMajorVersion(st.d0, 0);
+ checkShardMajorVersion(st.d1, 0);
+
+ assert.eq(null, testDB_s0.user.findOne({x: 1}));
+
+ // Needs to also set mongos1 to version 0|0|0, otherwise it'll complain that collection is
+ // already sharded.
+ assert.eq(null, testDB_s1.user.findOne({x: 1}));
+ assert.commandWorked(testDB_s1.adminCommand({shardCollection: 'test.user', key: {x: 1}}));
+ testDB_s1.user.insert({x: 1});
+
+ assert.commandWorked(
+ testDB_s1.adminCommand({moveChunk: 'test.user', find: {x: 0}, to: 'shard0000'}));
+
+ // Official config:
+ // shard0: 2|0|c, [-inf, inf)
+ // shard1: 0|0|c
+ //
+ // Shard metadata:
+ // shard0: 0|0|c
+ // shard1: 0|0|c
+ //
+ // mongos0: 0|0|0
+
+ checkShardMajorVersion(st.d0, 0);
+ checkShardMajorVersion(st.d1, 0);
+
+ // 1st mongos thinks that collection is unshareded and will attempt to query primary shard.
+ assert.neq(null, testDB_s0.user.findOne({x: 1}));
+
+ checkShardMajorVersion(st.d0, 2);
+ checkShardMajorVersion(st.d1, 0);
+
+ st.stop();
})();