[
https://issues.apache.org/jira/browse/KAFKA-21317?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jun Rao resolved KAFKA-21317.
-----------------------------
Fix Version/s: 4.5.0
Resolution: Fixed
merged the PR to trunk.
> Timestamp lookup can miss valid offsets after the log start offset advances
> ---------------------------------------------------------------------------
>
> Key: KAFKA-21317
> URL: https://issues.apache.org/jira/browse/KAFKA-21317
> Project: Kafka
> Issue Type: Bug
> Components: core
> Reporter: Shantanu Kawale
> Assignee: Shantanu Kawale
> Priority: Major
> Fix For: 4.5.0
>
>
> UnifiedLog.searchOffsetInLocalLog returns immediately from the first segment
> whose largestTimestamp meets the requested timestamp, even when that
> segment's findOffsetByTimestamp returns empty.
> This can incorrectly return no result for a timestamp lookup when the log
> start offset has advanced into a segment and a later segment contains a valid
> match.
> *Reproduction*
> Confirmed on Apache Kafka trunk commit:
> 8e46092edac3e837972ee13b40dcc149e7113ae7
> (4.5.0-SNAPSHOT, tested October 20, 2026)
> 1. Append offset 0 at timestamp T and offset 1 at timestamp T-1 into the
> first segment.
> 2. Roll the log and append offset 2 at timestamp T into the second segment.
> 3. Advance the high watermark to the log end.
> 4. Advance the log start offset to 1, as with DeleteRecords, leaving the
> first segment physically present.
> 5. Query timestamp T.
> Expected: timestamp T at offset 2.
> Actual: an empty result.
> *Root cause*
> The first segment remains eligible because its cached largest timestamp comes
> from offset 0. LogSegment correctly excludes that record because it is below
> the log start offset. UnifiedLog then returns the empty result without
> searching the second segment.
> *Proposed fix*
> Continue searching eligible segments until a lookup returns a result. Use
> in-memory segment base offsets to skip obsolete segments without reading
> segment tails.
> *Validation*
> - The new regression fails with trunk production code unchanged.
> - The same regression passes with the fix applied.
> - All 243 tests in UnifiedLogTest and LogSegmentTest pass.
> - Storage Spotless, Checkstyle, and SpotBugs checks pass.
> *Proposed patch:*
> https://github.com/shantanukawale-stripe/kafka/tree/fix-unified-log-timestamp-search
> Related issues
> KAFKA-10875 reports similar symptoms, but equivalence has not been
> established.
> KAFKA-21204 concerns the upper fetchable offset bound, not this cross-segment
> search failure.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)