Reduces this test's execution time from ~17 minutes to <30 seconds.
(cherry picked from commit 181cdbf26a)
78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
// Basic integration tests for the background job that periodically kills idle cursors, in both
|
|
// mongod and mongos. This test creates the following four cursors:
|
|
//
|
|
// 1. A no-timeout cursor through mongos.
|
|
// 2. A no-timeout cursor through mongod.
|
|
// 3. A normal cursor through mongos.
|
|
// 4. A normal cursor through mongod.
|
|
//
|
|
// After a period of inactivity, the test asserts that cursors #1 and #2 are still alive, and that
|
|
// #3 and #4 have been killed.
|
|
|
|
var st =
|
|
new ShardingTest( { shards: 2,
|
|
other: { chunkSize: 1,
|
|
shardOptions: { setParameter: "cursorTimeoutMillis=1000" },
|
|
mongosOptions: { setParameter: "cursorTimeoutMillis=1000" } } } );
|
|
st.stopBalancer();
|
|
|
|
var adminDB = st.admin;
|
|
var configDB = st.config;
|
|
var coll = st.s.getDB( 'test' ).user;
|
|
|
|
adminDB.runCommand({ enableSharding: coll.getDB().getName() });
|
|
st.ensurePrimaryShard(coll.getDB().getName(), 'shard0001');
|
|
adminDB.runCommand({ shardCollection: coll.getFullName(), key: { x: 1 }});
|
|
|
|
var data = 'c';
|
|
for( var x = 0; x < 18; x++ ){
|
|
data += data;
|
|
}
|
|
|
|
for( x = 0; x < 200; x++ ){
|
|
coll.insert({ x: x, v: data });
|
|
}
|
|
|
|
var chunkDoc = configDB.chunks.findOne();
|
|
var chunkOwner = chunkDoc.shard;
|
|
var toShard = configDB.shards.findOne({ _id: { $ne: chunkOwner }})._id;
|
|
var cmd = { moveChunk: coll.getFullName(), find: chunkDoc.min, to: toShard, _waitForDelete: true };
|
|
var res = adminDB.runCommand( cmd );
|
|
|
|
jsTest.log( 'move result: ' + tojson( res ));
|
|
|
|
var shardedCursorWithTimeout = coll.find();
|
|
var shardedCursorWithNoTimeout = coll.find();
|
|
shardedCursorWithNoTimeout.addOption( DBQuery.Option.noTimeout );
|
|
|
|
// Query directly to mongod
|
|
var shardHost = configDB.shards.findOne({ _id: chunkOwner }).host;
|
|
var mongod = new Mongo( shardHost );
|
|
var shardColl = mongod.getCollection( coll.getFullName() );
|
|
|
|
var cursorWithTimeout = shardColl.find();
|
|
var cursorWithNoTimeout = shardColl.find();
|
|
cursorWithNoTimeout.addOption( DBQuery.Option.noTimeout );
|
|
|
|
shardedCursorWithTimeout.next();
|
|
shardedCursorWithNoTimeout.next();
|
|
|
|
cursorWithTimeout.next();
|
|
cursorWithNoTimeout.next();
|
|
|
|
// Wait until the idle cursor background job has killed the cursors that do not have the "no
|
|
// timeout" flag set. We use the "cursorTimeoutMillis" setParameter above to reduce the amount of
|
|
// time we need to wait here.
|
|
sleep( 5000 );
|
|
|
|
assert.throws( function(){ shardedCursorWithTimeout.itcount(); } );
|
|
assert.throws( function(){ cursorWithTimeout.itcount(); } );
|
|
|
|
// +1 because we already advanced once
|
|
assert.eq( coll.count(), shardedCursorWithNoTimeout.itcount() + 1 );
|
|
|
|
assert.eq( shardColl.count(), cursorWithNoTimeout.itcount() + 1 );
|
|
|
|
st.stop();
|
|
|