fujian created KAFKA-20091:
------------------------------

             Summary: Fix inconsistency in time-based retention checks between 
remote and local segment deletion logic. 
                 Key: KAFKA-20091
                 URL: https://issues.apache.org/jira/browse/KAFKA-20091
             Project: Kafka
          Issue Type: Bug
          Components: Tiered-Storage
            Reporter: fujian
            Assignee: fujian


When currentTime- largestTimestamp of segment = retentionMs, the behavior is 
different:
 # Local Segment delete: *Not delete*

org.apache.kafka.storage.internals.log.UnifiedLog#deleteRetentionMsBreachedSegments:
   boolean delete = startMs - segment.largestTimestamp() > retentionMs;

  # Remote segement delete: *Delete*

org.apache.kafka.server.log.remote.storage.RemoteLogManager.RLMExpirationTask.RemoteLogRetentionHandler#isSegmentBreachedByRetentionTime
shouldDeleteSegment = metadata.maxTimestampMs() <= 
retentionTimeData.get().cleanupUntilMs;

//cleanupUntilMs is time.milliseconds() - retentionMs;
private Optional<RetentionTimeData> buildRetentionTimeData(long retentionMs) \{
    long cleanupUntilMs = time.milliseconds() - retentionMs;
    return retentionMs > -1 && cleanupUntilMs >= 0
            ? Optional.of(new RetentionTimeData(retentionMs, cleanupUntilMs))
            : Optional.empty();
}{{}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to