summaryrefslogtreecommitdiff
path: root/jstests/sharding/features1.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/features1.js')
-rw-r--r--jstests/sharding/features1.js259
1 files changed, 129 insertions, 130 deletions
diff --git a/jstests/sharding/features1.js b/jstests/sharding/features1.js
index 3f3e86056b1..e92e9c4d713 100644
--- a/jstests/sharding/features1.js
+++ b/jstests/sharding/features1.js
@@ -1,132 +1,131 @@
(function() {
- 'use strict';
-
- var s = new ShardingTest({name: "features1", shards: 2, mongos: 1});
- assert.commandWorked(s.s0.adminCommand({enablesharding: "test"}));
- s.ensurePrimaryShard('test', s.shard1.shardName);
-
- // ---- can't shard system namespaces ----
- assert.commandFailed(s.s0.adminCommand({shardcollection: "test.system.blah", key: {num: 1}}),
- "shard system namespace");
-
- // ---- setup test.foo -----
- assert.commandWorked(s.s0.adminCommand({shardcollection: "test.foo", key: {num: 1}}));
- let db = s.s0.getDB("test");
-
- assert.commandWorked(db.foo.createIndex({y: 1}));
-
- assert.commandWorked(s.s0.adminCommand({split: "test.foo", middle: {num: 10}}));
- assert.commandWorked(s.s0.adminCommand(
- {movechunk: "test.foo", find: {num: 20}, to: s.getOther(s.getPrimaryShard("test")).name}));
-
- assert.writeOK(db.foo.insert({num: 5}));
- assert.writeOK(db.foo.save({num: 15}));
-
- let a = s.rs0.getPrimary().getDB("test");
- let b = s.rs1.getPrimary().getDB("test");
-
- // ---- make sure shard key index is everywhere ----
- assert.eq(3, a.foo.getIndexKeys().length, "a index 1");
- assert.eq(3, b.foo.getIndexKeys().length, "b index 1");
-
- // ---- make sure if you add an index it goes everywhere ------
- assert.commandWorked(db.foo.createIndex({x: 1}));
- assert.eq(4, a.foo.getIndexKeys().length, "a index 2");
- assert.eq(4, b.foo.getIndexKeys().length, "b index 2");
-
- // ---- no unique indexes allowed that do not include the shard key ------
- assert.commandFailed(db.foo.createIndex({z: 1}, true));
- assert.eq(4, a.foo.getIndexKeys().length, "a index 3");
- assert.eq(4, b.foo.getIndexKeys().length, "b index 3");
-
- // ---- unique indexes that include the shard key are allowed ------
- assert.commandWorked(db.foo.createIndex({num: 1, bar: 1}, true));
- assert.eq(5, b.foo.getIndexKeys().length, "c index 3");
-
- // ---- can't shard thing with unique indexes ------
- assert.commandWorked(db.foo2.createIndex({a: 1}));
- printjson(db.foo2.getIndexes());
- assert.commandWorked(s.s0.adminCommand({shardcollection: "test.foo2", key: {num: 1}}),
- "shard with index");
-
- assert.commandWorked(db.foo3.createIndex({a: 1}, true));
- printjson(db.foo3.getIndexes());
- assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo3", key: {num: 1}}),
- "shard with unique index");
-
- assert.commandWorked(db.foo7.createIndex({num: 1, a: 1}, true));
- printjson(db.foo7.getIndexes());
- assert.commandWorked(s.s0.adminCommand({shardcollection: "test.foo7", key: {num: 1}}),
- "shard with ok unique index");
-
- // ---- unique shard key ----
- assert.commandWorked(
- s.s0.adminCommand({shardcollection: "test.foo4", key: {num: 1}, unique: true}),
- "shard with index and unique");
- assert.commandWorked(s.s0.adminCommand({split: "test.foo4", middle: {num: 10}}));
- assert.commandWorked(s.s0.adminCommand(
- {movechunk: "test.foo4", find: {num: 20}, to: s.getOther(s.getPrimaryShard("test")).name}));
-
- assert.writeOK(db.foo4.insert({num: 5}));
- assert.writeOK(db.foo4.insert({num: 15}));
-
- assert.eq(1, a.foo4.count(), "ua1");
- assert.eq(1, b.foo4.count(), "ub1");
-
- assert.eq(2, a.foo4.getIndexes().length, "ua2");
- assert.eq(2, b.foo4.getIndexes().length, "ub2");
-
- assert(a.foo4.getIndexes()[1].unique, "ua3");
- assert(b.foo4.getIndexes()[1].unique, "ub3");
-
- assert.eq(2, db.foo4.count(), "uc1");
- assert.writeOK(db.foo4.insert({num: 7}));
- assert.eq(3, db.foo4.count(), "uc2");
- assert.writeError(db.foo4.insert({num: 7}));
- assert.eq(3, db.foo4.count(), "uc4");
-
- // --- don't let you convertToCapped ----
- assert(!db.foo4.isCapped(), "ca1");
- assert(!a.foo4.isCapped(), "ca2");
- assert(!b.foo4.isCapped(), "ca3");
-
- assert.commandFailed(db.foo4.convertToCapped(30000), "ca30");
- assert(!db.foo4.isCapped(), "ca4");
- assert(!a.foo4.isCapped(), "ca5");
- assert(!b.foo4.isCapped(), "ca6");
-
- // make sure i didn't break anything
- db.foo4a.save({a: 1});
- assert(!db.foo4a.isCapped(), "ca7");
- db.foo4a.convertToCapped(30000);
- assert(db.foo4a.isCapped(), "ca8");
-
- // --- don't let you shard a capped collection
- db.createCollection("foo5", {capped: true, size: 30000});
- assert(db.foo5.isCapped(), "cb1");
- assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo5", key: {num: 1}}));
-
- // ---- can't shard non-empty collection without index -----
- assert.writeOK(db.foo8.insert({a: 1}));
- assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo8", key: {a: 1}}),
- "non-empty collection");
-
- // ---- can't shard non-empty collection with null values in shard key ----
- assert.writeOK(db.foo9.insert({b: 1}));
- assert.commandWorked(db.foo9.createIndex({a: 1}));
- assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo9", key: {a: 1}}),
- "entry with null value");
-
- // --- listDatabases ---
- var r = db.getMongo().getDBs();
- assert.eq(3, r.databases.length, tojson(r));
- assert.eq("number", typeof(r.totalSize), "listDatabases 3 : " + tojson(r));
-
- // --- flushRouterconfig ---
- assert.commandWorked(s.s0.adminCommand({flushRouterConfig: 1}));
- assert.commandWorked(s.s0.adminCommand({flushRouterConfig: true}));
- assert.commandWorked(s.s0.adminCommand({flushRouterConfig: 'TestDB'}));
- assert.commandWorked(s.s0.adminCommand({flushRouterConfig: 'TestDB.TestColl'}));
-
- s.stop();
+'use strict';
+
+var s = new ShardingTest({name: "features1", shards: 2, mongos: 1});
+assert.commandWorked(s.s0.adminCommand({enablesharding: "test"}));
+s.ensurePrimaryShard('test', s.shard1.shardName);
+
+// ---- can't shard system namespaces ----
+assert.commandFailed(s.s0.adminCommand({shardcollection: "test.system.blah", key: {num: 1}}),
+ "shard system namespace");
+
+// ---- setup test.foo -----
+assert.commandWorked(s.s0.adminCommand({shardcollection: "test.foo", key: {num: 1}}));
+let db = s.s0.getDB("test");
+
+assert.commandWorked(db.foo.createIndex({y: 1}));
+
+assert.commandWorked(s.s0.adminCommand({split: "test.foo", middle: {num: 10}}));
+assert.commandWorked(s.s0.adminCommand(
+ {movechunk: "test.foo", find: {num: 20}, to: s.getOther(s.getPrimaryShard("test")).name}));
+
+assert.writeOK(db.foo.insert({num: 5}));
+assert.writeOK(db.foo.save({num: 15}));
+
+let a = s.rs0.getPrimary().getDB("test");
+let b = s.rs1.getPrimary().getDB("test");
+
+// ---- make sure shard key index is everywhere ----
+assert.eq(3, a.foo.getIndexKeys().length, "a index 1");
+assert.eq(3, b.foo.getIndexKeys().length, "b index 1");
+
+// ---- make sure if you add an index it goes everywhere ------
+assert.commandWorked(db.foo.createIndex({x: 1}));
+assert.eq(4, a.foo.getIndexKeys().length, "a index 2");
+assert.eq(4, b.foo.getIndexKeys().length, "b index 2");
+
+// ---- no unique indexes allowed that do not include the shard key ------
+assert.commandFailed(db.foo.createIndex({z: 1}, true));
+assert.eq(4, a.foo.getIndexKeys().length, "a index 3");
+assert.eq(4, b.foo.getIndexKeys().length, "b index 3");
+
+// ---- unique indexes that include the shard key are allowed ------
+assert.commandWorked(db.foo.createIndex({num: 1, bar: 1}, true));
+assert.eq(5, b.foo.getIndexKeys().length, "c index 3");
+
+// ---- can't shard thing with unique indexes ------
+assert.commandWorked(db.foo2.createIndex({a: 1}));
+printjson(db.foo2.getIndexes());
+assert.commandWorked(s.s0.adminCommand({shardcollection: "test.foo2", key: {num: 1}}),
+ "shard with index");
+
+assert.commandWorked(db.foo3.createIndex({a: 1}, true));
+printjson(db.foo3.getIndexes());
+assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo3", key: {num: 1}}),
+ "shard with unique index");
+
+assert.commandWorked(db.foo7.createIndex({num: 1, a: 1}, true));
+printjson(db.foo7.getIndexes());
+assert.commandWorked(s.s0.adminCommand({shardcollection: "test.foo7", key: {num: 1}}),
+ "shard with ok unique index");
+
+// ---- unique shard key ----
+assert.commandWorked(s.s0.adminCommand({shardcollection: "test.foo4", key: {num: 1}, unique: true}),
+ "shard with index and unique");
+assert.commandWorked(s.s0.adminCommand({split: "test.foo4", middle: {num: 10}}));
+assert.commandWorked(s.s0.adminCommand(
+ {movechunk: "test.foo4", find: {num: 20}, to: s.getOther(s.getPrimaryShard("test")).name}));
+
+assert.writeOK(db.foo4.insert({num: 5}));
+assert.writeOK(db.foo4.insert({num: 15}));
+
+assert.eq(1, a.foo4.count(), "ua1");
+assert.eq(1, b.foo4.count(), "ub1");
+
+assert.eq(2, a.foo4.getIndexes().length, "ua2");
+assert.eq(2, b.foo4.getIndexes().length, "ub2");
+
+assert(a.foo4.getIndexes()[1].unique, "ua3");
+assert(b.foo4.getIndexes()[1].unique, "ub3");
+
+assert.eq(2, db.foo4.count(), "uc1");
+assert.writeOK(db.foo4.insert({num: 7}));
+assert.eq(3, db.foo4.count(), "uc2");
+assert.writeError(db.foo4.insert({num: 7}));
+assert.eq(3, db.foo4.count(), "uc4");
+
+// --- don't let you convertToCapped ----
+assert(!db.foo4.isCapped(), "ca1");
+assert(!a.foo4.isCapped(), "ca2");
+assert(!b.foo4.isCapped(), "ca3");
+
+assert.commandFailed(db.foo4.convertToCapped(30000), "ca30");
+assert(!db.foo4.isCapped(), "ca4");
+assert(!a.foo4.isCapped(), "ca5");
+assert(!b.foo4.isCapped(), "ca6");
+
+// make sure i didn't break anything
+db.foo4a.save({a: 1});
+assert(!db.foo4a.isCapped(), "ca7");
+db.foo4a.convertToCapped(30000);
+assert(db.foo4a.isCapped(), "ca8");
+
+// --- don't let you shard a capped collection
+db.createCollection("foo5", {capped: true, size: 30000});
+assert(db.foo5.isCapped(), "cb1");
+assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo5", key: {num: 1}}));
+
+// ---- can't shard non-empty collection without index -----
+assert.writeOK(db.foo8.insert({a: 1}));
+assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo8", key: {a: 1}}),
+ "non-empty collection");
+
+// ---- can't shard non-empty collection with null values in shard key ----
+assert.writeOK(db.foo9.insert({b: 1}));
+assert.commandWorked(db.foo9.createIndex({a: 1}));
+assert.commandFailed(s.s0.adminCommand({shardcollection: "test.foo9", key: {a: 1}}),
+ "entry with null value");
+
+// --- listDatabases ---
+var r = db.getMongo().getDBs();
+assert.eq(3, r.databases.length, tojson(r));
+assert.eq("number", typeof (r.totalSize), "listDatabases 3 : " + tojson(r));
+
+// --- flushRouterconfig ---
+assert.commandWorked(s.s0.adminCommand({flushRouterConfig: 1}));
+assert.commandWorked(s.s0.adminCommand({flushRouterConfig: true}));
+assert.commandWorked(s.s0.adminCommand({flushRouterConfig: 'TestDB'}));
+assert.commandWorked(s.s0.adminCommand({flushRouterConfig: 'TestDB.TestColl'}));
+
+s.stop();
})();