This is an automated email from the ASF dual-hosted git repository.

ijuma pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 6216c88  KAFKA-9853: Improve performance of Log.fetchOffsetByTimestamp 
(#8474)
6216c88 is described below

commit 6216c886de1fcfdc404620d13baae3863fb9d2d0
Author: Eric Bolinger <[email protected]>
AuthorDate: Mon Apr 13 18:09:12 2020 -0600

    KAFKA-9853: Improve performance of Log.fetchOffsetByTimestamp (#8474)
    
    The previous code did not use the collection produced by `takeWhile()`.
    It only used the length of that collection to select the next element.
    
    Reviewers: Ismael Juma <[email protected]>
---
 core/src/main/scala/kafka/log/Log.scala | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/core/src/main/scala/kafka/log/Log.scala 
b/core/src/main/scala/kafka/log/Log.scala
index 0f756bb..b1a0f05 100644
--- a/core/src/main/scala/kafka/log/Log.scala
+++ b/core/src/main/scala/kafka/log/Log.scala
@@ -1615,16 +1615,8 @@ class Log(@volatile private var _dir: File,
         return Some(new TimestampAndOffset(RecordBatch.NO_TIMESTAMP, 
logEndOffset, epochOptional))
       }
 
-      val targetSeg = {
-        // Get all the segments whose largest timestamp is smaller than target 
timestamp
-        val earlierSegs = segmentsCopy.takeWhile(_.largestTimestamp < 
targetTimestamp)
-        // We need to search the first segment whose largest timestamp is 
greater than the target timestamp if there is one.
-        if (earlierSegs.length < segmentsCopy.length)
-          Some(segmentsCopy(earlierSegs.length))
-        else
-          None
-      }
-
+      // We need to search the first segment whose largest timestamp is >= the 
target timestamp if there is one.
+      val targetSeg = segmentsCopy.find(_.largestTimestamp >= targetTimestamp)
       targetSeg.flatMap(_.findOffsetByTimestamp(targetTimestamp, 
logStartOffset))
     }
   }

Reply via email to