summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/query_plan_executor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/dbtests/query_plan_executor.cpp')
-rw-r--r--src/mongo/dbtests/query_plan_executor.cpp75
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());
}
};