[
https://issues.apache.org/jira/browse/PHOENIX-7984?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tanuj Khurana resolved PHOENIX-7984.
------------------------------------
Resolution: Fixed
> Fence writer on sync failure to prevent false-success RPO loss
> --------------------------------------------------------------
>
> Key: PHOENIX-7984
> URL: https://issues.apache.org/jira/browse/PHOENIX-7984
> Project: Phoenix
> Issue Type: Sub-task
> Reporter: Tanuj Khurana
> Assignee: Tanuj Khurana
> Priority: Major
>
> A block-full or explicit sync() that fails after closeBlock() has already
> advanced block state leaves the LogFileWriter in a torn-down state. A
> subsequent retry sync() then finds nothing left to flush and returns success
> — a false ACK. That false ACK clears currentBatch, silently dropping the
> unsynced records (RPO loss). The retry succeeds against a writer whose
> durability barrier was never actually crossed.
> Fix (mirroring HDFS DFSOutputStream single-shot semantics)
> - LogFileWriter: latch the first append/sync failure. Every subsequent
> append/sync fails fast rather than re-driving the already torn-down stream,
> so a fenced writer can never report false success.
> - ReplicationLog.apply(): a retry is only meaningful on a fresh writer. On
> failure, request rotation; if no fresh writer can be staged, surface the
> original failure instead of burning a retry attempt on the fenced writer.
> Recovery remains the higher layer's responsibility: rotate to a fresh writer
> and replay the unsynced batch. The failing event's own record is recovered
> via replayFailedEvent.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)