-
Type: Bug
-
Resolution: Duplicate
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Storage
-
None
-
ALL
-
-
Execution Team 2020-02-10, Execution Team 2020-03-23, Execution Team 2020-04-06, Execution Team 2020-04-20
-
40
When the createIndex thread marks the index build as aborted, it sets the abortTimestamp as null timestamp. So, when the indexBuildCoordinatorThread sees this aborted flag and assume a step down also happened, the stepped down primary will go into this code block. This means the index build got torn down (unregistered the index build). But, we don't remove the catalog entry i.e, the index catalog entry for the aborted index build with ready:false will present in the catalog table. Now, assume, secondary had already started the index build before the abortion event on the primary. This means, if that secondary gets elected as new primary, it can go ahead and commit the index Build. On receiving the commitIndexBuild oplog entry, the old primary (after SERVER-44953) will restart and try the initialize the index build . But, then since the catalog has the index entry with ready:false (representing in-progress/unfinished index build), this invariant check fails leading to crash.
- duplicates
-
SERVER-46560 Make Abort index build logic deterministic.
- Closed
- is related to
-
SERVER-45933 2 phase index build running with maxTimeMS can lead to undesirable behavior like server crash.
- Closed
- related to
-
SERVER-44953 Secondaries should restart index builds when a commitIndexBuild oplog entry is processed but no index build is active
- Closed
-
SERVER-45916 On primary, 2-phase index build cleanup writes an abortIndexBuild oplog entry under a stronger mode user collection lock X which can lead to 3 way deadlock with prepared transactions, step down and index build
- Closed
-
SERVER-46560 Make Abort index build logic deterministic.
- Closed
-
SERVER-46012 Aborting index builders through the IndexBuildsCoordinator does not always abort the index builders
- Closed