diff options
Diffstat (limited to 'src/mongo/dbtests/query_plan_executor.cpp')
-rw-r--r-- | src/mongo/dbtests/query_plan_executor.cpp | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/src/mongo/dbtests/query_plan_executor.cpp b/src/mongo/dbtests/query_plan_executor.cpp index 71492c66683..7265c0e8dbc 100644 --- a/src/mongo/dbtests/query_plan_executor.cpp +++ b/src/mongo/dbtests/query_plan_executor.cpp @@ -64,14 +64,14 @@ static const NamespaceString nss("unittests.QueryPlanExecutor"); class PlanExecutorBase { public: - PlanExecutorBase() : _client(&_txn) {} + PlanExecutorBase() : _client(&_opCtx) {} virtual ~PlanExecutorBase() { _client.dropCollection(nss.ns()); } void addIndex(const BSONObj& obj) { - ASSERT_OK(dbtests::createIndex(&_txn, nss.ns(), obj)); + ASSERT_OK(dbtests::createIndex(&_opCtx, nss.ns(), obj)); } void insert(const BSONObj& obj) { @@ -107,17 +107,22 @@ public: auto qr = stdx::make_unique<QueryRequest>(nss); qr->setFilter(filterObj); auto statusWithCQ = CanonicalQuery::canonicalize( - &_txn, std::move(qr), ExtensionsCallbackDisallowExtensions()); + &_opCtx, std::move(qr), ExtensionsCallbackDisallowExtensions()); verify(statusWithCQ.isOK()); unique_ptr<CanonicalQuery> cq = std::move(statusWithCQ.getValue()); verify(NULL != cq.get()); // Make the stage. - unique_ptr<PlanStage> root(new CollectionScan(&_txn, csparams, ws.get(), cq.get()->root())); + unique_ptr<PlanStage> root( + new CollectionScan(&_opCtx, csparams, ws.get(), cq.get()->root())); // Hand the plan off to the executor. - auto statusWithPlanExecutor = PlanExecutor::make( - &_txn, std::move(ws), std::move(root), std::move(cq), coll, PlanExecutor::YIELD_MANUAL); + auto statusWithPlanExecutor = PlanExecutor::make(&_opCtx, + std::move(ws), + std::move(root), + std::move(cq), + coll, + PlanExecutor::YIELD_MANUAL); ASSERT_OK(statusWithPlanExecutor.getStatus()); return statusWithPlanExecutor.getValue().release(); } @@ -148,25 +153,29 @@ public: const Collection* coll = db->getCollection(nss.ns()); unique_ptr<WorkingSet> ws(new WorkingSet()); - IndexScan* ix = new IndexScan(&_txn, ixparams, ws.get(), NULL); - unique_ptr<PlanStage> root(new FetchStage(&_txn, ws.get(), ix, NULL, coll)); + IndexScan* ix = new IndexScan(&_opCtx, ixparams, ws.get(), NULL); + unique_ptr<PlanStage> root(new FetchStage(&_opCtx, ws.get(), ix, NULL, coll)); auto qr = stdx::make_unique<QueryRequest>(nss); auto statusWithCQ = CanonicalQuery::canonicalize( - &_txn, std::move(qr), ExtensionsCallbackDisallowExtensions()); + &_opCtx, std::move(qr), ExtensionsCallbackDisallowExtensions()); verify(statusWithCQ.isOK()); unique_ptr<CanonicalQuery> cq = std::move(statusWithCQ.getValue()); verify(NULL != cq.get()); // Hand the plan off to the executor. - auto statusWithPlanExecutor = PlanExecutor::make( - &_txn, std::move(ws), std::move(root), std::move(cq), coll, PlanExecutor::YIELD_MANUAL); + auto statusWithPlanExecutor = PlanExecutor::make(&_opCtx, + std::move(ws), + std::move(root), + std::move(cq), + coll, + PlanExecutor::YIELD_MANUAL); ASSERT_OK(statusWithPlanExecutor.getStatus()); return statusWithPlanExecutor.getValue().release(); } size_t numCursors() { - AutoGetCollectionForRead ctx(&_txn, nss); + AutoGetCollectionForRead ctx(&_opCtx, nss); Collection* collection = ctx.getCollection(); if (!collection) return 0; @@ -175,31 +184,31 @@ public: void registerExec(PlanExecutor* exec) { // TODO: This is not correct (create collection under S-lock) - AutoGetCollectionForRead ctx(&_txn, nss); - WriteUnitOfWork wunit(&_txn); - Collection* collection = ctx.getDb()->getOrCreateCollection(&_txn, nss.ns()); + AutoGetCollectionForRead ctx(&_opCtx, nss); + WriteUnitOfWork wunit(&_opCtx); + Collection* collection = ctx.getDb()->getOrCreateCollection(&_opCtx, nss.ns()); collection->getCursorManager()->registerExecutor(exec); wunit.commit(); } void deregisterExec(PlanExecutor* exec) { // TODO: This is not correct (create collection under S-lock) - AutoGetCollectionForRead ctx(&_txn, nss); - WriteUnitOfWork wunit(&_txn); - Collection* collection = ctx.getDb()->getOrCreateCollection(&_txn, nss.ns()); + AutoGetCollectionForRead ctx(&_opCtx, nss); + WriteUnitOfWork wunit(&_opCtx); + Collection* collection = ctx.getDb()->getOrCreateCollection(&_opCtx, nss.ns()); collection->getCursorManager()->deregisterExecutor(exec); wunit.commit(); } protected: const ServiceContext::UniqueOperationContext _txnPtr = cc().makeOperationContext(); - OperationContext& _txn = *_txnPtr; + OperationContext& _opCtx = *_txnPtr; private: IndexDescriptor* getIndex(Database* db, const BSONObj& obj) { Collection* collection = db->getCollection(nss.ns()); std::vector<IndexDescriptor*> indexes; - collection->getIndexCatalog()->findIndexesByKeyPattern(&_txn, obj, false, &indexes); + collection->getIndexCatalog()->findIndexesByKeyPattern(&_opCtx, obj, false, &indexes); ASSERT_LTE(indexes.size(), 1U); return indexes.size() == 0 ? nullptr : indexes[0]; } @@ -214,7 +223,7 @@ private: class DropCollScan : public PlanExecutorBase { public: void run() { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); insert(BSON("_id" << 1)); insert(BSON("_id" << 2)); @@ -242,7 +251,7 @@ public: class DropIndexScan : public PlanExecutorBase { public: void run() { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); insert(BSON("_id" << 1 << "a" << 6)); insert(BSON("_id" << 2 << "a" << 7)); insert(BSON("_id" << 3 << "a" << 8)); @@ -270,7 +279,7 @@ public: class DropIndexScanAgg : public PlanExecutorBase { public: void run() { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); insert(BSON("_id" << 1 << "a" << 6)); insert(BSON("_id" << 2 << "a" << 7)); @@ -283,7 +292,7 @@ public: // Create the aggregation pipeline. std::vector<BSONObj> rawPipeline = {fromjson("{$match: {a: {$gte: 7, $lte: 10}}}")}; boost::intrusive_ptr<ExpressionContextForTest> expCtx = - new ExpressionContextForTest(&_txn, AggregationRequest(nss, rawPipeline)); + new ExpressionContextForTest(&_opCtx, AggregationRequest(nss, rawPipeline)); // Create an "inner" plan executor and register it with the cursor manager so that it can // get notified when the collection is dropped. @@ -299,10 +308,10 @@ public: // Create the output PlanExecutor that pulls results from the pipeline. auto ws = make_unique<WorkingSet>(); - auto proxy = make_unique<PipelineProxyStage>(&_txn, pipeline, ws.get()); + auto proxy = make_unique<PipelineProxyStage>(&_opCtx, pipeline, ws.get()); auto statusWithPlanExecutor = PlanExecutor::make( - &_txn, std::move(ws), std::move(proxy), collection, PlanExecutor::YIELD_MANUAL); + &_opCtx, std::move(ws), std::move(proxy), collection, PlanExecutor::YIELD_MANUAL); ASSERT_OK(statusWithPlanExecutor.getStatus()); unique_ptr<PlanExecutor> outerExec = std::move(statusWithPlanExecutor.getValue()); @@ -377,7 +386,7 @@ protected: class SnapshotControl : public SnapshotBase { public: void run() { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); setupCollection(); BSONObj filterObj = fromjson("{a: {$gte: 2}}"); @@ -404,7 +413,7 @@ public: class SnapshotTest : public SnapshotBase { public: void run() { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); setupCollection(); BSONObj indexSpec = BSON("_id" << 1); addIndex(indexSpec); @@ -435,7 +444,7 @@ using mongo::ClientCursor; class Invalidate : public PlanExecutorBase { public: void run() { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); insert(BSON("a" << 1 << "b" << 1)); BSONObj filterObj = fromjson("{_id: {$gt: 0}, b: {$gt: 0}}"); @@ -461,7 +470,7 @@ public: class InvalidatePinned : public PlanExecutorBase { public: void run() { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); insert(BSON("a" << 1 << "b" << 1)); Collection* collection = ctx.getCollection(); @@ -501,12 +510,12 @@ class Timeout : public PlanExecutorBase { public: void run() { { - OldClientWriteContext ctx(&_txn, nss.ns()); + OldClientWriteContext ctx(&_opCtx, nss.ns()); insert(BSON("a" << 1 << "b" << 1)); } { - AutoGetCollectionForRead ctx(&_txn, nss); + AutoGetCollectionForRead ctx(&_opCtx, nss); Collection* collection = ctx.getCollection(); BSONObj filterObj = fromjson("{_id: {$gt: 0}, b: {$gt: 0}}"); @@ -519,7 +528,7 @@ public: // There should be one cursor before timeout, // and zero cursors after timeout. ASSERT_EQUALS(1U, numCursors()); - CursorManager::timeoutCursorsGlobal(&_txn, 600001); + CursorManager::timeoutCursorsGlobal(&_opCtx, 600001); ASSERT_EQUALS(0U, numCursors()); } }; |