Avoid computing negative values for offsets, making zero the lowest possible value
Fixes #25
This commit is contained in:
parent
dc33298435
commit
3a9caa2535
|
@ -7,7 +7,7 @@ apply plugin: 'application'
|
||||||
|
|
||||||
group = "com.github.lookout"
|
group = "com.github.lookout"
|
||||||
description = "A utility for monitoring the delay of Kafka consumers"
|
description = "A utility for monitoring the delay of Kafka consumers"
|
||||||
version = '0.1.7'
|
version = '0.1.8'
|
||||||
mainClassName = 'com.github.lookout.verspaetung.Main'
|
mainClassName = 'com.github.lookout.verspaetung.Main'
|
||||||
defaultTasks 'clean', 'check'
|
defaultTasks 'clean', 'check'
|
||||||
sourceCompatibility = '1.7'
|
sourceCompatibility = '1.7'
|
||||||
|
|
|
@ -39,7 +39,15 @@ class ConsumerGauge implements Gauge<Integer>, Tagged {
|
||||||
(!this.topics.containsKey(topicPartition))) {
|
(!this.topics.containsKey(topicPartition))) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
return ((Integer)this.topics[topicPartition]) - this.consumers[consumer]
|
|
||||||
|
/*
|
||||||
|
* Returning the maximum value of the computation and zero, there are
|
||||||
|
* some cases where we can be "behind" on the Kafka latest offset
|
||||||
|
* polling and this could result in an erroneous negative value. See:
|
||||||
|
* <https://github.com/lookout/verspaetung/issues/25> for more details
|
||||||
|
*/
|
||||||
|
return Math.max(0,
|
||||||
|
((Integer)this.topics[topicPartition]) - this.consumers[consumer])
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -35,7 +35,17 @@ class ConsumerGaugeSpec extends Specification {
|
||||||
|
|
||||||
def "getValue() should return zero for a consumer not in the map"() {
|
def "getValue() should return zero for a consumer not in the map"() {
|
||||||
given:
|
given:
|
||||||
ConsumerGauge gauge = new ConsumerGauge(consumer, [:], [:])
|
ConsumerGauge gauge = new ConsumerGauge(this.consumer, [:], [:])
|
||||||
|
|
||||||
|
expect:
|
||||||
|
gauge.value == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
def "getValue() should return zero instead of a negative number"() {
|
||||||
|
given:
|
||||||
|
ConsumerGauge gauge = new ConsumerGauge(this.consumer,
|
||||||
|
[(this.consumer) : 10],
|
||||||
|
[(this.tp) : 5])
|
||||||
|
|
||||||
expect:
|
expect:
|
||||||
gauge.value == 0
|
gauge.value == 0
|
||||||
|
|
Loading…
Reference in New Issue