summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands
diff options
context:
space:
mode:
authorjannaerin <golden.janna@gmail.com>2019-07-03 13:24:58 -0400
committerjannaerin <golden.janna@gmail.com>2019-07-08 17:09:04 -0400
commitc6468f7d3ac783b4bcdeb6744fc976c8ecee2969 (patch)
tree1f425d3bc85d26cd24ff1fdf0d8c9ad81aca8d66 /src/mongo/db/commands
parent13434801be12a72d370147aed4c2ac194e658062 (diff)
downloadmongo-c6468f7d3ac783b4bcdeb6744fc976c8ecee2969.tar.gz
SERVER-34431 MoveDatabaseShardingState into its own map
Diffstat (limited to 'src/mongo/db/commands')
-rw-r--r--src/mongo/db/commands/create_indexes.cpp28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/mongo/db/commands/create_indexes.cpp b/src/mongo/db/commands/create_indexes.cpp
index 227c4d843a1..ea679e2bca7 100644
--- a/src/mongo/db/commands/create_indexes.cpp
+++ b/src/mongo/db/commands/create_indexes.cpp
@@ -339,6 +339,15 @@ bool indexesAlreadyExist(OperationContext* opCtx,
}
/**
+ * Checks database sharding state. Throws exception on error.
+ */
+void checkDatabaseShardingState(OperationContext* opCtx, StringData dbName) {
+ auto dss = DatabaseShardingState::get(opCtx, dbName);
+ auto dssLock = DatabaseShardingState::DSSLock::lockShared(opCtx, dss);
+ dss->checkDbVersion(opCtx, dssLock);
+}
+
+/**
* Opens or creates database for index creation.
* On database creation, the lock will be made exclusive.
*/
@@ -353,16 +362,9 @@ Database* getOrCreateDatabase(OperationContext* opCtx, StringData dbName, Lock::
// replication state from changing. Abandon the current snapshot to see changed metadata.
opCtx->recoveryUnit()->abandonSnapshot();
dbLock->relockWithMode(MODE_X);
- return databaseHolder->openDb(opCtx, dbName);
-}
-/**
- * Checks database sharding state. Throws exception on error.
- */
-void checkDatabaseShardingState(OperationContext* opCtx, Database* db) {
- auto& dss = DatabaseShardingState::get(db);
- auto dssLock = DatabaseShardingState::DSSLock::lockShared(opCtx, &dss);
- dss.checkDbVersion(opCtx, dssLock);
+ checkDatabaseShardingState(opCtx, dbName);
+ return databaseHolder->openDb(opCtx, dbName);
}
/**
@@ -428,6 +430,7 @@ bool runCreateIndexes(OperationContext* opCtx,
// Do not use AutoGetOrCreateDb because we may relock the database in mode X.
Lock::DBLock dbLock(opCtx, ns.db(), MODE_IX);
+ checkDatabaseShardingState(opCtx, ns.db());
if (!repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(opCtx, ns)) {
uasserted(ErrorCodes::NotMaster,
str::stream() << "Not primary while creating indexes in " << ns.ns());
@@ -439,8 +442,6 @@ bool runCreateIndexes(OperationContext* opCtx,
auto db = getOrCreateDatabase(opCtx, ns.db(), &dbLock);
- checkDatabaseShardingState(opCtx, db);
-
opCtx->recoveryUnit()->abandonSnapshot();
boost::optional<Lock::CollectionLock> exclusiveCollectionLock(
boost::in_place_init, opCtx, ns, MODE_X);
@@ -566,8 +567,6 @@ bool runCreateIndexes(OperationContext* opCtx,
db = databaseHolder->getDb(opCtx, ns.db());
invariant(db->getCollection(opCtx, ns));
- checkDatabaseShardingState(opCtx, db);
-
// Perform the third and final drain while holding the exclusive collection lock.
uassertStatusOK(indexer.drainBackgroundWrites(opCtx));
@@ -624,6 +623,7 @@ bool runCreateIndexesWithCoordinator(OperationContext* opCtx,
{
// Do not use AutoGetOrCreateDb because we may relock the database in mode X.
Lock::DBLock dbLock(opCtx, ns.db(), MODE_IX);
+ checkDatabaseShardingState(opCtx, ns.db());
if (!repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(opCtx, ns)) {
uasserted(ErrorCodes::NotMaster,
str::stream() << "Not primary while creating indexes in " << ns.ns());
@@ -635,8 +635,6 @@ bool runCreateIndexesWithCoordinator(OperationContext* opCtx,
auto db = getOrCreateDatabase(opCtx, ns.db(), &dbLock);
- checkDatabaseShardingState(opCtx, db);
-
opCtx->recoveryUnit()->abandonSnapshot();
Lock::CollectionLock collLock(opCtx, ns, MODE_X);