-
Type: Bug
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: 4.9.0
-
Component/s: None
-
None
-
Fully Compatible
-
ALL
-
Execution Team 2021-04-19, Execution Team 2021-05-03, Execution Team 2021-05-17
-
137
This assertion added in SERVER-38910, made an assumption that all ident drops are timestamped. During startup recovery, if an index build is unfinished and needs to be restarted, we drop the original ident without a timestamp. This can cause this assertion to fail in certain circumstances.
I think we need to either:
- Timestamp the ident drop on startup recovery. This would ensure we don't drop the ident until it is majority-committed. Unfortunately, we aren't starting the index build from oplog entry, so we would potentially have to use a timestamp in the future, ahead of the recovery timestamp.
- Relax this assertion to exclude unfinished index builds. Similar to the original code, if we discover that an ident is missing for an index, we only need to guarantee it will be rebuilt. If we do this, we also need to ensure that we don't error if we try to drop an ident that doesn't exist.
- is related to
-
SERVER-56639 Timestamp index ident drops for startup recovery
- Closed
-
SERVER-58159 Extend relaxation of index ident reconciliation invariant for single-phase index builds
- Closed
- related to
-
SERVER-55552 Unreplicated collection idents can get dropped before the drop in the durable catalog becomes both checkpointed and older than the oldest timestamp
- Closed
-
SERVER-38910 Remove redundant rollback handling on index drops
- Closed