summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jstests/index12.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/jstests/index12.js b/jstests/index12.js
new file mode 100644
index 00000000000..efae3b5b3b9
--- /dev/null
+++ b/jstests/index12.js
@@ -0,0 +1,74 @@
+// Test background index creation w/ constraints
+
+parallel = function() {
+ return db[ baseName + "_parallelStatus" ];
+}
+
+resetParallel = function() {
+ parallel().drop();
+}
+
+doParallel = function( work ) {
+ resetParallel();
+ startMongoProgramNoConnect( "mongo", "--eval", work + "; db." + baseName + "_parallelStatus.save( {done:1} );", db.getMongo().host );
+}
+
+doneParallel = function() {
+ return !!parallel().findOne();
+}
+
+waitParallel = function() {
+ assert.soon( function() { return doneParallel(); }, "parallel did not finish in time", 300000, 1000 );
+}
+
+doTest = function( dropDups ) {
+
+size = 10000;
+while( 1 ) { // if indexing finishes before we can run checks, try indexing w/ more data
+ print( "size: " + size );
+ baseName = "jstests_index12";
+ fullName = "db." + baseName;
+ t = db[ baseName ];
+ t.drop();
+
+ db.eval( function( size ) {
+ for( i = 0; i < size; ++i ) {
+ db.jstests_index12.save( {i:i} );
+ }
+ },
+ size );
+ assert.eq( size, t.count() );
+
+ doParallel( fullName + ".ensureIndex( {i:1}, {background:true, unique:true, dropDups:" + dropDups + "} )" );
+ try {
+ // wait for indexing to start
+ assert.soon( function() { return 2 == db.system.indexes.count( {ns:"test."+baseName} ) }, "no index created", 30000, 50 );
+ t.save( {i:0} );
+ printjson( db.getLastError() );
+ t.save( {i:size-1} );
+ printjson( db.getLastError() );
+ } catch( e ) {
+ // only a failure if we're still indexing
+ // wait for parallel status to update to reflect indexing status
+ sleep( 1000 );
+ if ( !doneParallel() ) {
+ throw e;
+ }
+ }
+ if ( !doneParallel() ) {
+ break;
+ }
+ print( "indexing finished too soon, retrying..." );
+ size *= 2;
+ assert( size < 5000000, "unable to run checks in parallel with index creation" );
+}
+
+waitParallel();
+assert.eq( size, t.find().toArray().length, "full query failed" );
+assert.eq( size, t.count(), "count failed" );
+
+}
+
+// SERVER-619
+//doTest( "false" );
+//doTest( "true" ); \ No newline at end of file