-
Type: Bug
-
Resolution: Duplicate
-
Priority: Unknown
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
Read concerns "linearizable" and "available" cannot be used in causally consistent sessions (see documentation here; see server code here). However, the Causal Consistency spec says that causal consistency should be enabled in sessions by default unless snapshot=true. Enabling causal consistency in implicit sessions can cause server errors when a user sets read concern "linearizable" or "available".
A specific case where this causes a problem is with retryable reads because they reuse the same session and set an "operation time". As a result, a retried read will send a read concern document that includes afterClusterTime. If a user has also set the read concern to "linearizable" or "available", that retried read will fail with error InvalidOptions(72) with message:
afterClusterTime field can be set only if level is equal to majority, local, or snapshotÂ
Update the Go driver to always set causalConsistency=false for implicit sessions to prevent sending afterClusterTime.
Note that the Causal Consistency spec isn't clear on whether implicit sessions should have causal consistency disabled and under what circumstances. DRIVERS-2369 is a ticket to clarify the behavior of implicit sessions in the Causal Consistency spec. The implementer of this ticket should check for updates on DRIVERS-2369 and for any related Causal Consistency spec changes. For now we chose to follow the implementation of the Java driver that always disables causal consistency in implicit sessions.
- duplicates
-
GODRIVER-2497 Disable causal consistency in implicit sessions
- Closed
- is related to
-
DRIVERS-2369 Disable causal consistency in implicit sessions
- Closed
- related to
-
GODRIVER-2497 Disable causal consistency in implicit sessions
- Closed