Details
-
Bug
-
Resolution: Fixed
-
Critical
-
None
-
Untriaged
-
Unknown
Description
Imagine an Active sending the following over DCP:
- PRE(key)
- ABORT(key)
- PRE(key)
If the replica-connection drops after receiving PRE:1 and before receiving ABORT, then at re-connection Replica may receive PRE:3, as on disk we deduplicate Prepare and Abort.
Currently, the code at Replica doesn't consider this scenario and it is likely to fail on some of the checks that we put in place for ensuring that we can never accept a Prepare if another Prepare is in flight.
We need to create a set of valid seqnos for which this is allowed at stream reconnection (addStream as we may destroy the stream object). This set of valid seqnos should be (HCS...HPS]. Consider all the case where we have multiple disconnects. We need to take the union of the old and new sets.
Attachments
Issue Links
For Gerrit Dashboard: MB-34412 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
110145,3 | MB-34412: Hoist isPending check to VBucket::process* methods | master | kv_engine | Status: MERGED | +2 | +1 |
110235,3 | MB-34412: Hoist redirection for new prepare to processSet | master | kv_engine | Status: MERGED | +2 | +1 |
110366,5 | MB-34412: Add prepare functions to KVBucket and VBucket | master | kv_engine | Status: MERGED | +2 | +1 |
110367,6 | MB-34412: Accept duplicate prepares at replica | master | kv_engine | Status: MERGED | +2 | +1 |