summaryrefslogtreecommitdiff
path: root/src/mongo/s/version_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/version_manager.cpp')
-rw-r--r--src/mongo/s/version_manager.cpp39
1 files changed, 21 insertions, 18 deletions
diff --git a/src/mongo/s/version_manager.cpp b/src/mongo/s/version_manager.cpp
index 8faed905b60..6ba65451d4e 100644
--- a/src/mongo/s/version_manager.cpp
+++ b/src/mongo/s/version_manager.cpp
@@ -187,7 +187,7 @@ DBClientBase* getVersionable(DBClientBase* conn) {
* Eventually this should go completely away, but for now many commands rely on unversioned but
* mongos-specific behavior on mongod (auditing and replication information in commands)
*/
-bool initShardVersionEmptyNS(DBClientBase* conn_in) {
+bool initShardVersionEmptyNS(OperationContext* txn, DBClientBase* conn_in) {
bool ok;
BSONObj result;
DBClientBase* conn = NULL;
@@ -214,7 +214,7 @@ bool initShardVersionEmptyNS(DBClientBase* conn_in) {
ok = setShardVersion(*conn,
"",
- grid.catalogManager()->connectionString().toString(),
+ grid.catalogManager(txn)->connectionString().toString(),
ChunkVersion(),
NULL,
true,
@@ -273,7 +273,8 @@ bool initShardVersionEmptyNS(DBClientBase* conn_in) {
*
* @return true if we contacted the remote host
*/
-bool checkShardVersion(DBClientBase* conn_in,
+bool checkShardVersion(OperationContext* txn,
+ DBClientBase* conn_in,
const string& ns,
ChunkManagerPtr refManager,
bool authoritative,
@@ -282,10 +283,10 @@ bool checkShardVersion(DBClientBase* conn_in,
// Empty namespaces are special - we require initialization but not versioning
if (ns.size() == 0) {
- return initShardVersionEmptyNS(conn_in);
+ return initShardVersionEmptyNS(txn, conn_in);
}
- auto status = grid.catalogCache()->getDatabase(nsToDatabase(ns));
+ auto status = grid.catalogCache()->getDatabase(txn, nsToDatabase(ns));
if (!status.isOK()) {
return false;
}
@@ -300,7 +301,7 @@ bool checkShardVersion(DBClientBase* conn_in,
ShardPtr primary;
ChunkManagerPtr manager;
if (authoritative)
- conf->getChunkManagerIfExists(ns, true);
+ conf->getChunkManagerIfExists(txn, ns, true);
conf->getChunkManagerOrPrimary(ns, manager, primary);
@@ -372,7 +373,7 @@ bool checkShardVersion(DBClientBase* conn_in,
BSONObj result;
if (setShardVersion(*conn,
ns,
- grid.catalogManager()->connectionString().toString(),
+ grid.catalogManager(txn)->connectionString().toString(),
version,
manager.get(),
authoritative,
@@ -390,7 +391,7 @@ bool checkShardVersion(DBClientBase* conn_in,
if (!authoritative) {
// use the original connection and get a fresh versionable connection
// since conn can be invalidated (or worse, freed) after the failure
- checkShardVersion(conn_in, ns, refManager, 1, tryNumber + 1);
+ checkShardVersion(txn, conn_in, ns, refManager, 1, tryNumber + 1);
return true;
}
@@ -400,10 +401,10 @@ bool checkShardVersion(DBClientBase* conn_in,
<< ", connection state indicates significant version changes";
// reload db
- conf->reload();
+ conf->reload(txn);
} else {
// reload config
- conf->getChunkManager(ns, true);
+ conf->getChunkManager(txn, ns, true);
}
}
@@ -414,7 +415,7 @@ bool checkShardVersion(DBClientBase* conn_in,
sleepmillis(10 * tryNumber);
// use the original connection and get a fresh versionable connection
// since conn can be invalidated (or worse, freed) after the failure
- checkShardVersion(conn_in, ns, refManager, true, tryNumber + 1);
+ checkShardVersion(txn, conn_in, ns, refManager, true, tryNumber + 1);
return true;
}
@@ -443,13 +444,13 @@ bool VersionManager::isVersionableCB(DBClientBase* conn) {
return conn->type() == ConnectionString::MASTER || conn->type() == ConnectionString::SET;
}
-bool VersionManager::forceRemoteCheckShardVersionCB(const string& ns) {
+bool VersionManager::forceRemoteCheckShardVersionCB(OperationContext* txn, const string& ns) {
const NamespaceString nss(ns);
// This will force the database catalog entry to be reloaded
grid.catalogCache()->invalidate(nss.db().toString());
- auto status = grid.catalogCache()->getDatabase(nss.db().toString());
+ auto status = grid.catalogCache()->getDatabase(txn, nss.db().toString());
if (!status.isOK()) {
return false;
}
@@ -461,7 +462,7 @@ bool VersionManager::forceRemoteCheckShardVersionCB(const string& ns) {
return false;
}
- ChunkManagerPtr manager = conf->getChunkManagerIfExists(ns, true, true);
+ ChunkManagerPtr manager = conf->getChunkManagerIfExists(txn, ns, true, true);
if (!manager) {
return false;
}
@@ -469,18 +470,20 @@ bool VersionManager::forceRemoteCheckShardVersionCB(const string& ns) {
return true;
}
-bool VersionManager::checkShardVersionCB(DBClientBase* conn_in,
+bool VersionManager::checkShardVersionCB(OperationContext* txn,
+ DBClientBase* conn_in,
const string& ns,
bool authoritative,
int tryNumber) {
- return checkShardVersion(conn_in, ns, nullptr, authoritative, tryNumber);
+ return checkShardVersion(txn, conn_in, ns, nullptr, authoritative, tryNumber);
}
-bool VersionManager::checkShardVersionCB(ShardConnection* conn_in,
+bool VersionManager::checkShardVersionCB(OperationContext* txn,
+ ShardConnection* conn_in,
bool authoritative,
int tryNumber) {
return checkShardVersion(
- conn_in->get(), conn_in->getNS(), conn_in->getManager(), authoritative, tryNumber);
+ txn, conn_in->get(), conn_in->getNS(), conn_in->getManager(), authoritative, tryNumber);
}
} // namespace mongo