diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-25 13:27:09 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-25 14:24:26 +0100 |
commit | a40709e319105f33a81eeec0dce09572fe45ecb7 (patch) | |
tree | f59e29066e5fde7e056a06afe2e35a171df46155 /vespajlib | |
parent | d69aeb4ee39c352c87336e617f5d73c58b2faeb8 (diff) |
Use a typesafe Duration instead of integer milliseondst status.
Diffstat (limited to 'vespajlib')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java | 14 | ||||
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/concurrent/ExecutorsTestCase.java | 27 |
2 files changed, 35 insertions, 6 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java b/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java index 38e93db30b6..8111d52a10f 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.concurrent; +import java.time.Duration; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -16,10 +17,10 @@ public enum SystemTimer implements Timer { private volatile long millis; - public static int detectHz() { + public static long detectHz() { Logger log = Logger.getLogger(SystemTimer.class.getName()); String hzEnv = System.getenv("VESPA_TIMER_HZ"); - int hz = 1000; + long hz = 1000; if ((hzEnv != null) && !hzEnv.isBlank()) { try { hz = Integer.parseInt(hzEnv); @@ -32,12 +33,15 @@ public enum SystemTimer implements Timer { return hz; } - public static int adjustTimeoutByDetectedHz(int timeoutMS) { - return (timeoutMS * 1000)/ detectHz(); + public static Duration adjustTimeoutByDetectedHz(Duration timeout) { + return adjustTimeoutByDetectedHz(timeout, detectHz()); + } + public static Duration adjustTimeoutByDetectedHz(Duration timeout, long hz) { + return timeout.multipliedBy(1000).dividedBy(hz); } SystemTimer() { - int napTime = adjustTimeoutByDetectedHz(1); + long napTime = adjustTimeoutByDetectedHz(Duration.ofMillis(1)).toMillis(); millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime()); Thread thread = new Thread() { diff --git a/vespajlib/src/test/java/com/yahoo/concurrent/ExecutorsTestCase.java b/vespajlib/src/test/java/com/yahoo/concurrent/ExecutorsTestCase.java index 707445efc5b..0a1bdc51930 100644 --- a/vespajlib/src/test/java/com/yahoo/concurrent/ExecutorsTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/concurrent/ExecutorsTestCase.java @@ -8,8 +8,16 @@ import static org.junit.Assert.assertTrue; import org.junit.Ignore; import org.junit.Test; +import java.time.Duration; import java.util.LinkedList; -import java.util.concurrent.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class ExecutorsTestCase { @@ -137,4 +145,21 @@ public class ExecutorsTestCase { assertEquals(9, measureMaxNumThreadsUsage(new ThreadPoolExecutor(100, 100, 0L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(false)), 3000, 10)); Runner.threadCount.set(0); } + + @Test + public void requireHzAndAdjustment() { + assertEquals(1000, SystemTimer.detectHz()); + + assertEquals(1, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(1)).toMillis()); + assertEquals(20, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(20)).toMillis()); + + assertEquals(1, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(1), 1000).toMillis()); + assertEquals(10, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(1), 100).toMillis()); + assertEquals(100, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(1), 10).toMillis()); + + assertEquals(20, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(20), 1000).toMillis()); + assertEquals(200, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(20), 100).toMillis()); + assertEquals(2000, SystemTimer.adjustTimeoutByDetectedHz(Duration.ofMillis(20), 10).toMillis()); + } + } |