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

ayegorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 9aad0453f0 FastTimer to return rates if queried at the same second as 
update (#4152)
9aad0453f0 is described below

commit 9aad0453f0f17f45ea673e82fb63762156315e8b
Author: Andrey Yegorov <[email protected]>
AuthorDate: Wed Dec 13 08:37:09 2023 -0800

    FastTimer to return rates if queried at the same second as update (#4152)
---
 .../java/org/apache/bookkeeper/stats/codahale/FastTimer.java |  5 +++--
 .../org/apache/bookkeeper/stats/codahale/FastTimerTest.java  | 12 ++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git 
a/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/codahale/FastTimer.java
 
b/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/codahale/FastTimer.java
index 2333df2f3f..12e070d881 100644
--- 
a/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/codahale/FastTimer.java
+++ 
b/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/codahale/FastTimer.java
@@ -477,8 +477,9 @@ public class FastTimer extends Timer {
      */
     public double getRate(int seconds) {
         seconds = Math.min(seconds, timeWindow - 2);
-        int t = getNow(getHash()) - 1; // start from last completed second
-        int secFrom = t - seconds;
+        int t = getNow(getHash());
+        // start from last completed second
+        int secFrom = t - seconds - 1;
         long sum = 0;
         for (int h = 0; h < HASH_SIZE; h++) {
             for (int i = t; i > secFrom; i--) {
diff --git 
a/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/test/java/org/apache/bookkeeper/stats/codahale/FastTimerTest.java
 
b/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/test/java/org/apache/bookkeeper/stats/codahale/FastTimerTest.java
index bc95dff074..0e900652cd 100644
--- 
a/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/test/java/org/apache/bookkeeper/stats/codahale/FastTimerTest.java
+++ 
b/stats/bookkeeper-stats-providers/codahale-metrics-provider/src/test/java/org/apache/bookkeeper/stats/codahale/FastTimerTest.java
@@ -17,6 +17,7 @@
 package org.apache.bookkeeper.stats.codahale;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import com.codahale.metrics.Snapshot;
 import java.util.ArrayList;
@@ -52,6 +53,17 @@ public class FastTimerTest {
         };
     }
 
+    @Test
+    public void testMeanRate() {
+        FastTimer t = getMockedFastTimer(1, FastTimer.Buckets.fine);
+
+        t.update(10, TimeUnit.NANOSECONDS);
+        assertTrue("should calculate mean before advancing time", 
t.getMeanRate() > 0);
+
+        incSec();
+        assertTrue("should calculate mean after advancing time", 
t.getMeanRate() > 0);
+   }
+
     @Test
     public void testBuckets() {
         FastTimer t = new FastTimer(1, FastTimer.Buckets.fine);

Reply via email to