From 8e0da30bc5c8372822218162a4b0c9e7c49bcf33 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsuda Date: Thu, 19 Feb 2015 09:38:37 -0800 Subject: [PATCH] leaner DelayedItem --- core/src/main/scala/kafka/utils/DelayedItem.scala | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/core/src/main/scala/kafka/utils/DelayedItem.scala b/core/src/main/scala/kafka/utils/DelayedItem.scala index a4e0dab..56dff76 100644 --- a/core/src/main/scala/kafka/utils/DelayedItem.scala +++ b/core/src/main/scala/kafka/utils/DelayedItem.scala @@ -20,33 +20,24 @@ package kafka.utils import java.util.concurrent._ import scala.math._ -class DelayedItem(delay: Long, unit: TimeUnit) extends Delayed with Logging { +class DelayedItem(delay: Long) extends Delayed with Logging { - val createdMs = SystemTime.milliseconds - val delayMs = { - val given = unit.toMillis(delay) - if (given < 0 || (createdMs + given) < 0) (Long.MaxValue - createdMs) - else given - } + private val due = SystemTime.milliseconds + delay - def this(delayMs: Long) = - this(delayMs, TimeUnit.MILLISECONDS) + def this(delay: Long, unit: TimeUnit) = this(unit.toMillis(delay)) /** * The remaining delay time */ def getDelay(unit: TimeUnit): Long = { - val elapsedMs = (SystemTime.milliseconds - createdMs) - unit.convert(max(delayMs - elapsedMs, 0), TimeUnit.MILLISECONDS) + unit.convert(max(due - SystemTime.milliseconds, 0), TimeUnit.MILLISECONDS) } def compareTo(d: Delayed): Int = { - val delayed = d.asInstanceOf[DelayedItem] - val myEnd = createdMs + delayMs - val yourEnd = delayed.createdMs + delayed.delayMs + val other = d.asInstanceOf[DelayedItem] - if(myEnd < yourEnd) -1 - else if(myEnd > yourEnd) 1 + if(due < other.due) -1 + else if(due > other.due) 1 else 0 } -- 2.3.0