Details
-
Bug
-
Resolution: Fixed
-
Major
-
None
-
Untriaged
-
Unknown
Description
That may happen at Replica at Commit. E.g.
- topology: {A, R1, R2}
- A receives Prepare{s:1, Level:PersistToMajority} and sends it to R1/R2
- s:1 persisted and ack'ed by A and R1
- A sends Commit{s:1} to R1/R2
- R2 receives Commit{s:1} and removes Prepare{s:1} from PassiveDM
- Prepare{s:1} persisted on R2
- the flusher calls back to PassiveDM for updating the HPS
- the update is skipped because the tracked Container in PassiveDM is empty
Note that in PassiveDM the HPS is of type:
struct DurabilityMonitor::Position {
|
Container::iterator it;
|
WeaklyMonotonic<int64_t, ThrowExceptionPolicy> lastWriteSeqno{0};
|
}
|
While Position::it can point to Container::end (which is expected in the case described), Position::lastWriteSeqno must always be set to the right seqno.
Attachments
For Gerrit Dashboard: MB-34151 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
109452,5 | MB-34151 [SR]: Remove Prepares from PassiveDM only if locally-satisfied | master | kv_engine | Status: MERGED | +2 | +1 |