summaryrefslogtreecommitdiff
path: root/src/mongo/s/commands/strategy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/commands/strategy.cpp')
-rw-r--r--src/mongo/s/commands/strategy.cpp82
1 files changed, 42 insertions, 40 deletions
diff --git a/src/mongo/s/commands/strategy.cpp b/src/mongo/s/commands/strategy.cpp
index 148dcd66e05..a209b0a8f9b 100644
--- a/src/mongo/s/commands/strategy.cpp
+++ b/src/mongo/s/commands/strategy.cpp
@@ -82,7 +82,7 @@ using std::stringstream;
namespace {
-void runAgainstRegistered(OperationContext* txn,
+void runAgainstRegistered(OperationContext* opCtx,
const char* ns,
BSONObj& jsobj,
BSONObjBuilder& anObjBuilder,
@@ -104,14 +104,14 @@ void runAgainstRegistered(OperationContext* txn,
return;
}
- execCommandClient(txn, c, queryOptions, ns, jsobj, anObjBuilder);
+ execCommandClient(opCtx, c, queryOptions, ns, jsobj, anObjBuilder);
}
/**
* Called into by the web server. For now we just translate the parameters to their old style
* equivalents.
*/
-void execCommandHandler(OperationContext* txn,
+void execCommandHandler(OperationContext* opCtx,
Command* command,
const rpc::RequestInterface& request,
rpc::ReplyBuilderInterface* replyBuilder) {
@@ -124,7 +124,7 @@ void execCommandHandler(OperationContext* txn,
std::string db = request.getDatabase().rawData();
BSONObjBuilder result;
- execCommandClient(txn, command, queryFlags, request.getDatabase().rawData(), cmdObj, result);
+ execCommandClient(opCtx, command, queryFlags, request.getDatabase().rawData(), cmdObj, result);
replyBuilder->setCommandReply(result.done()).setMetadata(rpc::makeEmptyMetadata());
}
@@ -134,7 +134,7 @@ MONGO_INITIALIZER(InitializeCommandExecCommandHandler)(InitializerContext* const
return Status::OK();
}
-void registerErrorImpl(OperationContext* txn, const DBException& exception) {}
+void registerErrorImpl(OperationContext* opCtx, const DBException& exception) {}
MONGO_INITIALIZER(InitializeRegisterErrorHandler)(InitializerContext* const) {
Command::registerRegisterError(registerErrorImpl);
@@ -143,12 +143,12 @@ MONGO_INITIALIZER(InitializeRegisterErrorHandler)(InitializerContext* const) {
} // namespace
-void Strategy::queryOp(OperationContext* txn, const NamespaceString& nss, DbMessage* dbm) {
+void Strategy::queryOp(OperationContext* opCtx, const NamespaceString& nss, DbMessage* dbm) {
globalOpCounters.gotQuery();
const QueryMessage q(*dbm);
- Client* const client = txn->getClient();
+ Client* const client = opCtx->getClient();
AuthorizationSession* const authSession = AuthorizationSession::get(client);
Status status = authSession->checkAuthForFind(nss, false);
@@ -183,7 +183,7 @@ void Strategy::queryOp(OperationContext* txn, const NamespaceString& nss, DbMess
}();
auto canonicalQuery =
- uassertStatusOK(CanonicalQuery::canonicalize(txn, q, ExtensionsCallbackNoop()));
+ uassertStatusOK(CanonicalQuery::canonicalize(opCtx, q, ExtensionsCallbackNoop()));
// If the $explain flag was set, we must run the operation on the shards as an explain command
// rather than a find command.
@@ -199,7 +199,7 @@ void Strategy::queryOp(OperationContext* txn, const NamespaceString& nss, DbMess
BSONObjBuilder explainBuilder;
uassertStatusOK(Strategy::explainFind(
- txn, findCommand, queryRequest, verbosity, metadata, &explainBuilder));
+ opCtx, findCommand, queryRequest, verbosity, metadata, &explainBuilder));
BSONObj explainObj = explainBuilder.done();
replyToQuery(0, // query result flags
@@ -220,7 +220,7 @@ void Strategy::queryOp(OperationContext* txn, const NamespaceString& nss, DbMess
// 0 means the cursor is exhausted. Otherwise we assume that a cursor with the returned id can
// be retrieved via the ClusterCursorManager.
auto cursorId =
- ClusterFind::runQuery(txn,
+ ClusterFind::runQuery(opCtx,
*canonicalQuery,
readPreference,
&batch,
@@ -249,10 +249,12 @@ void Strategy::queryOp(OperationContext* txn, const NamespaceString& nss, DbMess
cursorId.getValue());
}
-void Strategy::clientCommandOp(OperationContext* txn, const NamespaceString& nss, DbMessage* dbm) {
+void Strategy::clientCommandOp(OperationContext* opCtx,
+ const NamespaceString& nss,
+ DbMessage* dbm) {
const QueryMessage q(*dbm);
- Client* const client = txn->getClient();
+ Client* const client = opCtx->getClient();
LOG(3) << "command: " << q.ns << " " << redact(q.query) << " ntoreturn: " << q.ntoreturn
<< " options: " << q.queryOptions;
@@ -282,7 +284,7 @@ void Strategy::clientCommandOp(OperationContext* txn, const NamespaceString& nss
const NamespaceString interposedNss("admin", "$cmd");
BSONObjBuilder reply;
runAgainstRegistered(
- txn, interposedNss.ns().c_str(), interposedCmd, reply, q.queryOptions);
+ opCtx, interposedNss.ns().c_str(), interposedCmd, reply, q.queryOptions);
replyToQuery(0, client->session(), dbm->msg(), reply.done());
};
@@ -336,7 +338,7 @@ void Strategy::clientCommandOp(OperationContext* txn, const NamespaceString& nss
const int maxTimeMS =
uassertStatusOK(QueryRequest::parseMaxTimeMS(cmdObj[QueryRequest::cmdOptionMaxTimeMS]));
if (maxTimeMS > 0) {
- txn->setDeadlineAfterNowBy(Milliseconds{maxTimeMS});
+ opCtx->setDeadlineAfterNowBy(Milliseconds{maxTimeMS});
}
int loops = 5;
@@ -346,7 +348,7 @@ void Strategy::clientCommandOp(OperationContext* txn, const NamespaceString& nss
OpQueryReplyBuilder reply;
{
BSONObjBuilder builder(reply.bufBuilderForResults());
- runAgainstRegistered(txn, q.ns, cmdObj, builder, q.queryOptions);
+ runAgainstRegistered(opCtx, q.ns, cmdObj, builder, q.queryOptions);
}
reply.sendCommandReply(client->session(), dbm->msg());
return;
@@ -361,13 +363,13 @@ void Strategy::clientCommandOp(OperationContext* txn, const NamespaceString& nss
// For legacy reasons, ns may not actually be set in the exception
const std::string staleNS(e.getns().empty() ? std::string(q.ns) : e.getns());
- ShardConnection::checkMyConnectionVersions(txn, staleNS);
+ ShardConnection::checkMyConnectionVersions(opCtx, staleNS);
if (loops < 4) {
// This throws out the entire database cache entry in response to
// StaleConfigException instead of just the collection which encountered it. There
// is no good reason for it other than the lack of lower-granularity cache
// invalidation.
- Grid::get(txn)->catalogCache()->invalidate(NamespaceString(staleNS).db());
+ Grid::get(opCtx)->catalogCache()->invalidate(NamespaceString(staleNS).db());
}
} catch (const DBException& e) {
OpQueryReplyBuilder reply;
@@ -381,7 +383,7 @@ void Strategy::clientCommandOp(OperationContext* txn, const NamespaceString& nss
}
}
-void Strategy::commandOp(OperationContext* txn,
+void Strategy::commandOp(OperationContext* opCtx,
const string& db,
const BSONObj& command,
int options,
@@ -395,7 +397,7 @@ void Strategy::commandOp(OperationContext* txn,
qSpec, CommandInfo(versionedNS, targetingQuery, targetingCollation));
// Initialize the cursor
- cursor.init(txn);
+ cursor.init(opCtx);
set<ShardId> shardIds;
cursor.getQueryShardIds(shardIds);
@@ -411,7 +413,7 @@ void Strategy::commandOp(OperationContext* txn,
}
}
-void Strategy::getMore(OperationContext* txn, const NamespaceString& nss, DbMessage* dbm) {
+void Strategy::getMore(OperationContext* opCtx, const NamespaceString& nss, DbMessage* dbm) {
const int ntoreturn = dbm->pullInt();
uassert(
34424, str::stream() << "Invalid ntoreturn for OP_GET_MORE: " << ntoreturn, ntoreturn >= 0);
@@ -419,12 +421,12 @@ void Strategy::getMore(OperationContext* txn, const NamespaceString& nss, DbMess
globalOpCounters.gotGetMore();
- Client* const client = txn->getClient();
+ Client* const client = opCtx->getClient();
// TODO: Handle stale config exceptions here from coll being dropped or sharded during op for
// now has same semantics as legacy request.
- auto statusGetDb = Grid::get(txn)->catalogCache()->getDatabase(txn, nss.db());
+ auto statusGetDb = Grid::get(opCtx)->catalogCache()->getDatabase(opCtx, nss.db());
if (statusGetDb == ErrorCodes::NamespaceNotFound) {
replyToQuery(ResultFlag_CursorNotFound, client->session(), dbm->msg(), 0, 0, 0);
return;
@@ -438,7 +440,7 @@ void Strategy::getMore(OperationContext* txn, const NamespaceString& nss, DbMess
GetMoreRequest getMoreRequest(nss, cursorId, batchSize, boost::none, boost::none, boost::none);
- auto cursorResponse = ClusterFind::runGetMore(txn, getMoreRequest);
+ auto cursorResponse = ClusterFind::runGetMore(opCtx, getMoreRequest);
if (cursorResponse == ErrorCodes::CursorNotFound) {
replyToQuery(ResultFlag_CursorNotFound, client->session(), dbm->msg(), 0, 0, 0);
return;
@@ -464,7 +466,7 @@ void Strategy::getMore(OperationContext* txn, const NamespaceString& nss, DbMess
cursorResponse.getValue().getCursorId());
}
-void Strategy::killCursors(OperationContext* txn, DbMessage* dbm) {
+void Strategy::killCursors(OperationContext* opCtx, DbMessage* dbm) {
const int numCursors = dbm->pullInt();
massert(34425,
str::stream() << "Invalid killCursors message. numCursors: " << numCursors
@@ -481,9 +483,9 @@ void Strategy::killCursors(OperationContext* txn, DbMessage* dbm) {
ConstDataCursor cursors(dbm->getArray(numCursors));
- Client* const client = txn->getClient();
+ Client* const client = opCtx->getClient();
AuthorizationSession* const authSession = AuthorizationSession::get(client);
- ClusterCursorManager* const manager = Grid::get(txn)->getCursorManager();
+ ClusterCursorManager* const manager = Grid::get(opCtx)->getCursorManager();
for (int i = 0; i < numCursors; ++i) {
const CursorId cursorId = cursors.readAndAdvance<LittleEndian<int64_t>>();
@@ -517,13 +519,13 @@ void Strategy::killCursors(OperationContext* txn, DbMessage* dbm) {
}
}
-void Strategy::writeOp(OperationContext* txn, DbMessage* dbm) {
+void Strategy::writeOp(OperationContext* opCtx, DbMessage* dbm) {
OwnedPointerVector<BatchedCommandRequest> commandRequestsOwned;
std::vector<BatchedCommandRequest*>& commandRequests = commandRequestsOwned.mutableVector();
msgToBatchRequests(dbm->msg(), &commandRequests);
- auto& clientLastError = LastError::get(txn->getClient());
+ auto& clientLastError = LastError::get(opCtx->getClient());
for (auto it = commandRequests.begin(); it != commandRequests.end(); ++it) {
// Multiple commands registered to last error as multiple requests
@@ -546,7 +548,7 @@ void Strategy::writeOp(OperationContext* txn, DbMessage* dbm) {
BSONObj commandBSON = commandRequest->toBSON();
BSONObjBuilder builder;
- runAgainstRegistered(txn, cmdNS.c_str(), commandBSON, builder, 0);
+ runAgainstRegistered(opCtx, cmdNS.c_str(), commandBSON, builder, 0);
bool parsed = commandResponse.parseBSON(builder.done(), nullptr);
(void)parsed; // for compile
@@ -566,7 +568,7 @@ void Strategy::writeOp(OperationContext* txn, DbMessage* dbm) {
}
}
-Status Strategy::explainFind(OperationContext* txn,
+Status Strategy::explainFind(OperationContext* opCtx,
const BSONObj& findCommand,
const QueryRequest& qr,
ExplainCommon::Verbosity verbosity,
@@ -581,7 +583,7 @@ Status Strategy::explainFind(OperationContext* txn,
Timer timer;
std::vector<Strategy::CommandResult> shardResults;
- Strategy::commandOp(txn,
+ Strategy::commandOp(opCtx,
qr.nss().db().toString(),
explainCmdBob.obj(),
options,
@@ -601,13 +603,13 @@ Status Strategy::explainFind(OperationContext* txn,
const char* mongosStageName = ClusterExplain::getStageNameForReadOp(shardResults, findCommand);
return ClusterExplain::buildExplainResult(
- txn, shardResults, mongosStageName, millisElapsed, out);
+ opCtx, shardResults, mongosStageName, millisElapsed, out);
}
/**
* Called into by the commands infrastructure.
*/
-void execCommandClient(OperationContext* txn,
+void execCommandClient(OperationContext* opCtx,
Command* c,
int queryOptions,
const char* ns,
@@ -624,7 +626,7 @@ void execCommandClient(OperationContext* txn,
return;
}
- Status status = Command::checkAuthorization(c, txn, dbname, cmdObj);
+ Status status = Command::checkAuthorization(c, opCtx, dbname, cmdObj);
if (!status.isOK()) {
Command::appendCommandStatus(result, status);
return;
@@ -657,20 +659,20 @@ void execCommandClient(OperationContext* txn,
// attach tracking
rpc::TrackingMetadata trackingMetadata;
trackingMetadata.initWithOperName(c->getName());
- rpc::TrackingMetadata::get(txn) = trackingMetadata;
+ rpc::TrackingMetadata::get(opCtx) = trackingMetadata;
std::string errmsg;
bool ok = false;
try {
if (!supportsWriteConcern) {
- ok = c->run(txn, dbname, cmdObj, queryOptions, errmsg, result);
+ ok = c->run(opCtx, dbname, cmdObj, queryOptions, errmsg, result);
} else {
// Change the write concern while running the command.
- const auto oldWC = txn->getWriteConcern();
- ON_BLOCK_EXIT([&] { txn->setWriteConcern(oldWC); });
- txn->setWriteConcern(wcResult.getValue());
+ const auto oldWC = opCtx->getWriteConcern();
+ ON_BLOCK_EXIT([&] { opCtx->setWriteConcern(oldWC); });
+ opCtx->setWriteConcern(wcResult.getValue());
- ok = c->run(txn, dbname, cmdObj, queryOptions, errmsg, result);
+ ok = c->run(opCtx, dbname, cmdObj, queryOptions, errmsg, result);
}
} catch (const DBException& e) {
result.resetToEmpty();