-
Type:
Task
-
Resolution: Works as Designed
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
Catalog and Routing
-
CAR Team 2025-03-17, CAR Team 2025-04-14
-
None
-
None
-
None
-
None
-
None
-
None
-
None
The movePrimary DDL operation is acquiring a DDL lock in MOVE_X on the database being moved, hence other operations requiring a database DDL lock can't possibly conflict with it.
At the time of writing this ticket, there are several references to MovePrimaryInProgress under src/mongo, some probably in codepath that can't be reached or where the error can't be thrown/hit.
For example, both collMod and dropIndexes acquire a DDL lock, despite that they seem to be actively checking that no move primary is in progress:
$ git grep MovePrimaryInProgress src/mongo/
src/mongo/base/error_codes.yml: - {code: 319, name: MovePrimaryInProgress}
src/mongo/db/catalog/coll_mod.cpp:void assertNoMovePrimaryInProgress(OperationContext* opCtx, NamespaceString const& nss) {
src/mongo/db/catalog/coll_mod.cpp: if (scopedDss->isMovePrimaryInProgress()) {
src/mongo/db/catalog/coll_mod.cpp: LOGV2(4945200, "assertNoMovePrimaryInProgress", logAttrs(nss));
src/mongo/db/catalog/coll_mod.cpp: uasserted(ErrorCodes::MovePrimaryInProgress,
src/mongo/db/catalog/coll_mod.cpp: if (ex.toStatus() != ErrorCodes::MovePrimaryInProgress) {
src/mongo/db/catalog/database_impl.cpp:void assertNoMovePrimaryInProgress(OperationContext* opCtx, NamespaceString const& nss) {
src/mongo/db/catalog/database_impl.cpp: if (scopedDss->isMovePrimaryInProgress()) {
src/mongo/db/catalog/database_impl.cpp: LOGV2(4909100, "assertNoMovePrimaryInProgress", logAttrs(nss));
src/mongo/db/catalog/database_impl.cpp: uasserted(ErrorCodes::MovePrimaryInProgress,
src/mongo/db/catalog/database_impl.cpp: assertNoMovePrimaryInProgress(opCtx, nss);
src/mongo/db/catalog/database_impl.cpp: assertNoMovePrimaryInProgress(opCtx, fromNss);
src/mongo/db/catalog/database_impl.cpp: assertNoMovePrimaryInProgress(opCtx, nss);
src/mongo/db/catalog/drop_indexes.cpp:void assertNoMovePrimaryInProgress(OperationContext* opCtx, const NamespaceString& nss) {
src/mongo/db/catalog/drop_indexes.cpp: if (scopedDss->isMovePrimaryInProgress()) {
src/mongo/db/catalog/drop_indexes.cpp: LOGV2(4976500, "assertNoMovePrimaryInProgress", logAttrs(nss));
src/mongo/db/catalog/drop_indexes.cpp: uasserted(ErrorCodes::MovePrimaryInProgress,
src/mongo/db/catalog/drop_indexes.cpp: if (ex.toStatus() != ErrorCodes::MovePrimaryInProgress) {
src/mongo/db/catalog/drop_indexes.cpp: assertNoMovePrimaryInProgress(opCtx, collNs);
src/mongo/db/commands/create_indexes_cmd.cpp:void assertNoMovePrimaryInProgress(OperationContext* opCtx, const NamespaceString& nss) {
src/mongo/db/commands/create_indexes_cmd.cpp: if (scopedDss->isMovePrimaryInProgress()) {
src/mongo/db/commands/create_indexes_cmd.cpp: LOGV2(4909200, "assertNoMovePrimaryInProgress", logAttrs(nss));
src/mongo/db/commands/create_indexes_cmd.cpp: uasserted(ErrorCodes::MovePrimaryInProgress,
src/mongo/db/commands/create_indexes_cmd.cpp: if (ex.toStatus() != ErrorCodes::MovePrimaryInProgress) {
src/mongo/db/commands/create_indexes_cmd.cpp: assertNoMovePrimaryInProgress(opCtx, ns);
src/mongo/db/s/database_sharding_state.cpp:void DatabaseShardingState::setMovePrimaryInProgress(OperationContext* opCtx) {
src/mongo/db/s/database_sharding_state.cpp:void DatabaseShardingState::unsetMovePrimaryInProgress(OperationContext* opCtx) {
src/mongo/db/s/database_sharding_state.h: bool isMovePrimaryInProgress() const {
src/mongo/db/s/database_sharding_state.h: * operations on this database to fail with the `MovePrimaryInProgress` error.
src/mongo/db/s/database_sharding_state.h: void setMovePrimaryInProgress(OperationContext* opCtx);
src/mongo/db/s/database_sharding_state.h: void unsetMovePrimaryInProgress(OperationContext* opCtx);
src/mongo/db/s/migration_chunk_cloner_source_op_observer.cpp:void MigrationChunkClonerSourceOpObserver::assertNoMovePrimaryInProgress(
src/mongo/db/s/migration_chunk_cloner_source_op_observer.cpp: if (scopedDss->isMovePrimaryInProgress()) {
src/mongo/db/s/migration_chunk_cloner_source_op_observer.cpp: LOGV2(4908600, "assertNoMovePrimaryInProgress", logAttrs(nss));
src/mongo/db/s/migration_chunk_cloner_source_op_observer.cpp: uasserted(ErrorCodes::MovePrimaryInProgress,
src/mongo/db/s/migration_chunk_cloner_source_op_observer.cpp: MigrationChunkClonerSourceOpObserver::assertNoMovePrimaryInProgress(opCtx, nss);
src/mongo/db/s/migration_chunk_cloner_source_op_observer.cpp: MigrationChunkClonerSourceOpObserver::assertNoMovePrimaryInProgress(opCtx, nss);
src/mongo/db/s/migration_chunk_cloner_source_op_observer.cpp: assertNoMovePrimaryInProgress(opCtx, nss);
src/mongo/db/s/migration_chunk_cloner_source_op_observer.h: static void assertNoMovePrimaryInProgress(OperationContext* opCtx, const NamespaceString& nss);
src/mongo/db/s/move_primary_coordinator.cpp: scopedDss->setMovePrimaryInProgress(opCtx);
src/mongo/db/s/move_primary_coordinator.cpp: scopedDss->unsetMovePrimaryInProgress(opCtx);
src/mongo/db/s/move_primary_coordinator.h: * `MovePrimaryInProgress` error.
- is related to
-
SERVER-106737 Remove assertNoMovePrimaryInProgress from dropIndexes code
-
- Blocked
-
- related to
-
SERVER-100452 Stop taking DSS and CSS locks on assertNoMovePrimaryInProgress
-
- Closed
-