text: // testing dropDatabase concurrency
  // this is also a test of saveState() as that will get exercised by the update
  
  function f(variant, quickCommits, paranoid) {
      var ourdb = "closealltest";
  
      print("closeall.js start mongod variant:" + variant + "." + quickCommits + "." + paranoid);
      var options = (paranoid==1 ? 8 : 0); // 8 is DurParanoid
      print("closeall.js --journalOptions " + options);
      var N = 1000;
      if (options) 
          N = 300;
  
      // use replication to exercise that code too with a close, and also to test local.sources with a close
      var conn = MongoRunner.runMongod({journal: "",
                                        journalOptions: options + "",
                                        master: "",
                                        oplogSize: 64});
      var connSlave = MongoRunner.runMongod({journal: "",
                                             journalOptions: options + "",
                                             slave: "",
                                             source: "localhost:" + conn.port});
  
      var slave = connSlave.getDB(ourdb);
  
      // we'll use two connections to make a little parallelism
      var db1 = conn.getDB(ourdb);
      var db2 = new Mongo(db1.getMongo().host).getDB(ourdb);
      if( quickCommits ) {
          print("closeall.js QuickCommits variant (using a small syncdelay)");
          assert( db2.adminCommand({setParameter:1, syncdelay:5}).ok );
      }
  
      print("closeall.js run test");
  
      print("wait for initial sync to finish") // SERVER-4852
      assert.writeOK(db1.foo.insert({}, { writeConcern: { w: 2 }}));
      assert.writeOK(db1.foo.remove({}, { writeConcern: { w: 2 }}));
      print("initial sync done")
  
      var writeOps = startParallelShell('var coll = db.getSiblingDB("' + ourdb + '").foo; \
                                         for( var i = 0; i < ' + N + '; i++ ) { \
                                             var bulk = coll.initializeUnorderedBulkOp(); \
                                             bulk.insert({ x: 1 }); \
                                             if ( i % 7 == 0 ) \
                                                 bulk.insert({ x: 99, y: 2 }); \
                                             if ( i % 49 == 0 ) \
                                                 bulk.find({ x: 99 }).update( \
                                                     { $set: { a: 1, b: 2, c: 3, d: 4 }}); \
                                             if( i == 800 ) \
                                                 coll.ensureIndex({ x: 1 }); \
                                             assert.writeOK(bulk.execute()); \
                                         }', conn.port);
  
      for( var i = 0; i < N; i++ ) {
          var res = null;
          try {
              if( variant == 1 )
                  sleep(0);
              else if( variant == 2 ) 
                  sleep(1);
              else if( variant == 3 && i % 10 == 0 )
                  print(i);
              res = db2.dropDatabase();
          }
          catch (e) {
              print("\n\n\nFAIL closeall.js dropDatabase command invocation threw an exception. i:" + i);
              try {
                  print("getlasterror:");
                  printjson(db2.getLastErrorObj());
                  print("trying one more dropDatabase:");
                  res = db2.dropDatabase();
                  printjson(res);
              }
              catch (e) {
                  print("got another exception : " + e);
              }
              print("\n\n\n");
              throw e;
          }
          assert( res.ok, "dropDatabase res.ok=false");
      }
  
      writeOps();
  
      print("closeall.js end test loop.  slave.foo.count:");
      print(slave.foo.count());
  
      print("closeall.js shutting down servers");
      MongoRunner.stopMongod(connSlave);
      MongoRunner.stopMongod(conn);
  }
  
  // Skip this test on 32-bit Windows (unfixable failures in MapViewOfFileEx)
  //
  if (_isWindows() && getBuildInfo().bits == 32 ) {
      print("Skipping closeall.js on 32-bit Windows");
  }
  else {
      for (var variant=0; variant < 4; variant++){
          for (var quickCommits=0; quickCommits <= 1; quickCommits++){ // false then true
              for (var paranoid=0; paranoid <= 1; paranoid++){ // false then true
                  f(variant, quickCommits, paranoid);
                  sleep(500);
              }
          }
      }
      print("SUCCESS closeall.js");
  }
  