summaryrefslogtreecommitdiffstats
path: root/vespajlib/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-02-25 13:27:09 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2022-02-25 14:24:26 +0100
commita40709e319105f33a81eeec0dce09572fe45ecb7 (patch)
treef59e29066e5fde7e056a06afe2e35a171df46155 /vespajlib/src
parentd69aeb4ee39c352c87336e617f5d73c58b2faeb8 (diff)
Use a typesafe Duration instead of integer milliseondst status.
Diffstat (limited to 'vespajlib/src')
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java14
-rw-r--r--vespajlib/src/test/java/com/yahoo/concurrent/ExecutorsTestCase.java27
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());
+ }
+
}