-
Type:
Task
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
Query Execution
-
QE 2026-06-22, QE 2026-07-06
-
None
-
None
-
None
-
None
-
None
-
None
-
None
SERVER-66751 identifies that the upsert path uses writeConflictRetry directly, instead of the generic yield machinery. Under concurrent upserts on the same key, this can behave differently from regular updates and may not cooperate with execution control as well. Many workloads use "insert or update by external ID" patterns that map naturally to updateOne(..., upsert: true).
Workload design
Baseline:
Simple indexed reads as canaries.
Degradation:
Many concurrent updateOne(...,
) operations:
common filter form:
mixed population:
some filter keys already present (update path)
some filter keys absent (insert path)
this exercises both branches of the upsert code path.
Two index configurations:
with a unique index on the filter field
without a unique index on the filter field
What this tells us
Whether making upserts use the generic yield machinery (SERVER-66751) improves availability.
Whether upserts represent a materially different failure mode than plain updates, under conflicting access on the same key.
- depends on
-
SERVER-66751 Upsert stage should use generic yield machinery instead of writeConflictRetry
-
- Closed
-