-
Type:
Task
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
Storage Execution
-
Storage Execution 2026-08-31
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Option 1 of the side-write drain decision document. Cap the number of index specs accepted by a single createIndexes command on a disaggregated storage cluster (proposed limit: 3), so that the per-index share of the serial drain budget stays large enough for the index build to converge.
This is a stopgap intended to make multi-index builds usable for Atlas Infinite public preview, while the longer-term options (replicated container truncates, parallelizing the drain, backpressure on side writes) are evaluated. See SERVER-128241.
Implementation notes
- New uassert in createIndexes (src/mongo/db/shard_role/ddl/create_indexes_cmd.cpp, near the "at least one spec" check at :145). Today the only cap is the per-collection kMaxNumIndexesAllowed = 64 (index_catalog_impl.h:94, enforced at index_catalog_impl.cpp:1240-1249); there is no per-command limit.
- Must apply only on disaggregated storage clusters, and must not change behavior on attached storage clusters.
- The limit should be a server parameter rather than a compile-time constant, so that it can be relaxed without a binary push once a real fix lands.
- User-facing error behavior needs a decision: reject the whole command, or build the first N specs and require the user to reissue for the rest? Rejecting is simpler and more honest.
- This is a user-visible behavior change on DSC. It needs a note in the scope document's "User-Facing Syntax/API Changes" section, which currently reads "None", and it needs Cloud sign-off, since drivers and tooling that issue multi-index createIndexes commands will begin to fail.
Convergence should be verified with the workload created for the side-write drain reproducer.