summaryrefslogtreecommitdiff
path: root/jstests/sharding/delete_during_migrate.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/delete_during_migrate.js')
-rw-r--r--jstests/sharding/delete_during_migrate.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/jstests/sharding/delete_during_migrate.js b/jstests/sharding/delete_during_migrate.js
new file mode 100644
index 00000000000..4b01d16734a
--- /dev/null
+++ b/jstests/sharding/delete_during_migrate.js
@@ -0,0 +1,42 @@
+// Test migrating a big chunk while deletions are happening within that chunk.
+// Test is slightly non-deterministic, since removes could happen before migrate
+// starts. Protect against that by making chunk very large.
+
+// start up a new sharded cluster
+var st = new ShardingTest({ shards : 2, mongos : 1 });
+
+// stop balancer since we want manual control for this
+st.stopBalancer();
+
+var dbname = "testDB";
+var coll = "foo";
+var ns = dbname + "." + coll;
+var s = st.s0;
+var t = s.getDB( dbname ).getCollection( coll );
+
+// Create fresh collection with lots of docs
+t.drop();
+for ( i=0; i<200000; i++ ){
+ t.insert( { a : i } );
+}
+
+// enable sharding of the collection. Only 1 chunk.
+t.ensureIndex( { a : 1 } );
+s.adminCommand( { enablesharding : dbname } );
+s.adminCommand( { shardcollection : ns , key: { a : 1 } } );
+
+// start a parallel shell that deletes things
+startMongoProgramNoConnect( "mongo" ,
+ "--host" , getHostName() ,
+ "--port" , st.s0.port ,
+ "--eval" , "db." + coll + ".remove({});" ,
+ dbname );
+
+// migrate while deletions are happening
+var moveResult = s.adminCommand( { moveChunk : ns ,
+ find : { a : 1 } ,
+ to : st.getOther( st.getServer( dbname ) ).name } );
+// check if migration worked
+assert( moveResult.ok , "migration didn't work while doing deletes" );
+
+st.stop();