diff options
author | David Storch <david.storch@10gen.com> | 2014-10-21 10:24:24 -0400 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2014-10-21 10:32:59 -0400 |
commit | 011dde7e6eac3b73cb1d2a7f004feee9bed99c46 (patch) | |
tree | 32b20bc3224627c93e5781ba72abb45a1f825b37 /src/mongo/dbtests/query_stage_collscan.cpp | |
parent | 0bee61d26e44e26c2678d550990a57ce488f222d (diff) | |
download | mongo-011dde7e6eac3b73cb1d2a7f004feee9bed99c46.tar.gz |
SERVER-15541 SERVER-15652 implement timing-based yielding
Diffstat (limited to 'src/mongo/dbtests/query_stage_collscan.cpp')
-rw-r--r-- | src/mongo/dbtests/query_stage_collscan.cpp | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/mongo/dbtests/query_stage_collscan.cpp b/src/mongo/dbtests/query_stage_collscan.cpp index 9cbf2dc22f7..db759de784f 100644 --- a/src/mongo/dbtests/query_stage_collscan.cpp +++ b/src/mongo/dbtests/query_stage_collscan.cpp @@ -60,13 +60,11 @@ namespace QueryStageCollectionScan { bob.append("foo", i); _client.insert(ns(), bob.obj()); } - ctx.commit(); } virtual ~QueryStageCollectionScanBase() { Client::WriteContext ctx(&_txn, ns()); _client.dropCollection(ns()); - ctx.commit(); } void remove(const BSONObj& obj) { @@ -90,11 +88,16 @@ namespace QueryStageCollectionScan { // Make a scan and have the runner own it. WorkingSet* ws = new WorkingSet(); PlanStage* ps = new CollectionScan(&_txn, params, ws, filterExpr.get()); - PlanExecutor runner(&_txn, ws, ps, params.collection); + + PlanExecutor* rawExec; + Status status = PlanExecutor::make(&_txn, ws, ps, params.collection, + PlanExecutor::YIELD_MANUAL, &rawExec); + ASSERT_OK(status); + boost::scoped_ptr<PlanExecutor> exec(rawExec); // Use the runner to count the number of objects scanned. int count = 0; - for (BSONObj obj; PlanExecutor::ADVANCED == runner.getNext(&obj, NULL); ) { ++count; } + for (BSONObj obj; PlanExecutor::ADVANCED == exec->getNext(&obj, NULL); ) { ++count; } return count; } @@ -195,10 +198,15 @@ namespace QueryStageCollectionScan { // Make a scan and have the runner own it. WorkingSet* ws = new WorkingSet(); PlanStage* ps = new CollectionScan(&_txn, params, ws, NULL); - PlanExecutor runner(&_txn, ws, ps, params.collection); + + PlanExecutor* rawExec; + Status status = PlanExecutor::make(&_txn, ws, ps, params.collection, + PlanExecutor::YIELD_MANUAL, &rawExec); + ASSERT_OK(status); + boost::scoped_ptr<PlanExecutor> exec(rawExec); int count = 0; - for (BSONObj obj; PlanExecutor::ADVANCED == runner.getNext(&obj, NULL); ) { + for (BSONObj obj; PlanExecutor::ADVANCED == exec->getNext(&obj, NULL); ) { // Make sure we get the objects in the order we want ASSERT_EQUALS(count, obj["foo"].numberInt()); ++count; @@ -224,10 +232,15 @@ namespace QueryStageCollectionScan { WorkingSet* ws = new WorkingSet(); PlanStage* ps = new CollectionScan(&_txn, params, ws, NULL); - PlanExecutor runner(&_txn, ws, ps, params.collection); + + PlanExecutor* rawExec; + Status status = PlanExecutor::make(&_txn, ws, ps, params.collection, + PlanExecutor::YIELD_MANUAL, &rawExec); + ASSERT_OK(status); + boost::scoped_ptr<PlanExecutor> exec(rawExec); int count = 0; - for (BSONObj obj; PlanExecutor::ADVANCED == runner.getNext(&obj, NULL); ) { + for (BSONObj obj; PlanExecutor::ADVANCED == exec->getNext(&obj, NULL); ) { ++count; ASSERT_EQUALS(numObj() - count, obj["foo"].numberInt()); } @@ -293,7 +306,6 @@ namespace QueryStageCollectionScan { ++count; } } - ctx.commit(); ASSERT_EQUALS(numObj(), count); } @@ -355,7 +367,6 @@ namespace QueryStageCollectionScan { ++count; } } - ctx.commit(); ASSERT_EQUALS(numObj(), count); } |