summaryrefslogtreecommitdiff
path: root/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/commands/cluster_find_and_modify_cmd.cpp')
-rw-r--r--src/mongo/s/commands/cluster_find_and_modify_cmd.cpp46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp b/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
index d41fa0a5707..578968205af 100644
--- a/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
+++ b/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
@@ -82,7 +82,7 @@ public:
find_and_modify::addPrivilegesRequiredForFindAndModify(this, dbname, cmdObj, out);
}
- virtual Status explain(OperationContext* txn,
+ virtual Status explain(OperationContext* opCtx,
const std::string& dbName,
const BSONObj& cmdObj,
ExplainCommon::Verbosity verbosity,
@@ -90,20 +90,21 @@ public:
BSONObjBuilder* out) const {
const NamespaceString nss = parseNsCollectionRequired(dbName, cmdObj);
- auto scopedDB = uassertStatusOK(ScopedShardDatabase::getExisting(txn, dbName));
+ auto scopedDB = uassertStatusOK(ScopedShardDatabase::getExisting(opCtx, dbName));
const auto conf = scopedDB.db();
shared_ptr<ChunkManager> chunkMgr;
shared_ptr<Shard> shard;
if (!conf->isSharded(nss.ns())) {
- auto shardStatus = Grid::get(txn)->shardRegistry()->getShard(txn, conf->getPrimaryId());
+ auto shardStatus =
+ Grid::get(opCtx)->shardRegistry()->getShard(opCtx, conf->getPrimaryId());
if (!shardStatus.isOK()) {
return shardStatus.getStatus();
}
shard = shardStatus.getValue();
} else {
- chunkMgr = _getChunkManager(txn, conf, nss);
+ chunkMgr = _getChunkManager(opCtx, conf, nss);
const BSONObj query = cmdObj.getObjectField("query");
@@ -117,7 +118,7 @@ public:
return collationElementStatus;
}
- StatusWith<BSONObj> status = _getShardKey(txn, chunkMgr, query);
+ StatusWith<BSONObj> status = _getShardKey(opCtx, chunkMgr, query);
if (!status.isOK()) {
return status.getStatus();
}
@@ -125,7 +126,8 @@ public:
BSONObj shardKey = status.getValue();
auto chunk = chunkMgr->findIntersectingChunk(shardKey, collation);
- auto shardStatus = Grid::get(txn)->shardRegistry()->getShard(txn, chunk->getShardId());
+ auto shardStatus =
+ Grid::get(opCtx)->shardRegistry()->getShard(opCtx, chunk->getShardId());
if (!shardStatus.isOK()) {
return shardStatus.getStatus();
}
@@ -141,7 +143,7 @@ public:
Timer timer;
BSONObjBuilder result;
- bool ok = _runCommand(txn, conf, chunkMgr, shard->getId(), nss, explainCmd.obj(), result);
+ bool ok = _runCommand(opCtx, conf, chunkMgr, shard->getId(), nss, explainCmd.obj(), result);
long long millisElapsed = timer.millis();
if (!ok) {
@@ -159,10 +161,10 @@ public:
shardResults.push_back(cmdResult);
return ClusterExplain::buildExplainResult(
- txn, shardResults, ClusterExplain::kSingleShard, millisElapsed, out);
+ opCtx, shardResults, ClusterExplain::kSingleShard, millisElapsed, out);
}
- virtual bool run(OperationContext* txn,
+ virtual bool run(OperationContext* opCtx,
const std::string& dbName,
BSONObj& cmdObj,
int options,
@@ -172,14 +174,14 @@ public:
// findAndModify should only be creating database if upsert is true, but this would require
// that the parsing be pulled into this function.
- auto scopedDb = uassertStatusOK(ScopedShardDatabase::getOrCreate(txn, dbName));
+ auto scopedDb = uassertStatusOK(ScopedShardDatabase::getOrCreate(opCtx, dbName));
const auto conf = scopedDb.db();
if (!conf->isSharded(nss.ns())) {
- return _runCommand(txn, conf, nullptr, conf->getPrimaryId(), nss, cmdObj, result);
+ return _runCommand(opCtx, conf, nullptr, conf->getPrimaryId(), nss, cmdObj, result);
}
- shared_ptr<ChunkManager> chunkMgr = _getChunkManager(txn, conf, nss);
+ shared_ptr<ChunkManager> chunkMgr = _getChunkManager(opCtx, conf, nss);
const BSONObj query = cmdObj.getObjectField("query");
@@ -193,7 +195,7 @@ public:
return appendCommandStatus(result, collationElementStatus);
}
- StatusWith<BSONObj> status = _getShardKey(txn, chunkMgr, query);
+ StatusWith<BSONObj> status = _getShardKey(opCtx, chunkMgr, query);
if (!status.isOK()) {
// Bad query
return appendCommandStatus(result, status.getStatus());
@@ -202,31 +204,32 @@ public:
BSONObj shardKey = status.getValue();
auto chunk = chunkMgr->findIntersectingChunk(shardKey, collation);
- const bool ok = _runCommand(txn, conf, chunkMgr, chunk->getShardId(), nss, cmdObj, result);
+ const bool ok =
+ _runCommand(opCtx, conf, chunkMgr, chunk->getShardId(), nss, cmdObj, result);
if (ok) {
updateChunkWriteStatsAndSplitIfNeeded(
- txn, chunkMgr.get(), chunk.get(), cmdObj.getObjectField("update").objsize());
+ opCtx, chunkMgr.get(), chunk.get(), cmdObj.getObjectField("update").objsize());
}
return ok;
}
private:
- shared_ptr<ChunkManager> _getChunkManager(OperationContext* txn,
+ shared_ptr<ChunkManager> _getChunkManager(OperationContext* opCtx,
DBConfig* conf,
const NamespaceString& nss) const {
- shared_ptr<ChunkManager> chunkMgr = conf->getChunkManager(txn, nss.ns());
+ shared_ptr<ChunkManager> chunkMgr = conf->getChunkManager(opCtx, nss.ns());
massert(13002, "shard internal error chunk manager should never be null", chunkMgr);
return chunkMgr;
}
- StatusWith<BSONObj> _getShardKey(OperationContext* txn,
+ StatusWith<BSONObj> _getShardKey(OperationContext* opCtx,
shared_ptr<ChunkManager> chunkMgr,
const BSONObj& query) const {
// Verify that the query has an equality predicate using the shard key
StatusWith<BSONObj> status =
- chunkMgr->getShardKeyPattern().extractShardKeyFromQuery(txn, query);
+ chunkMgr->getShardKeyPattern().extractShardKeyFromQuery(opCtx, query);
if (!status.isOK()) {
return status;
@@ -242,7 +245,7 @@ private:
return shardKey;
}
- bool _runCommand(OperationContext* txn,
+ bool _runCommand(OperationContext* opCtx,
DBConfig* conf,
shared_ptr<ChunkManager> chunkManager,
const ShardId& shardId,
@@ -251,7 +254,8 @@ private:
BSONObjBuilder& result) const {
BSONObj res;
- const auto shard = uassertStatusOK(Grid::get(txn)->shardRegistry()->getShard(txn, shardId));
+ const auto shard =
+ uassertStatusOK(Grid::get(opCtx)->shardRegistry()->getShard(opCtx, shardId));
ShardConnection conn(shard->getConnString(), nss.ns(), chunkManager);
bool ok = conn->runCommand(conf->name(), cmdObj, res);