summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-02-16 21:45:36 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2022-02-16 21:45:36 +0100
commit08b8a40cb5bd32f02f8cab22e4a02d9438682e97 (patch)
tree3455b144f4a6c68fe1db6c4938881b781f719417 /config
parent0f50c99c8a87a3c476327231ca0ad99c40ec3ba1 (diff)
If timeout is zero or negative there is no need to make a costly call to sample the time.
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java34
1 files changed, 21 insertions, 13 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java
index 85bb1cd4ca7..68f1dc2df17 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSetSubscription.java
@@ -29,23 +29,31 @@ public class ConfigSetSubscription<T extends ConfigInstance> extends ConfigSubsc
setGeneration(0L);
}
+ private boolean hasConfigChanged() {
+ T myInstance = getNewInstance();
+ ConfigState<T> configState = getConfigState();
+ // User forced reload
+ if (checkReloaded()) {
+ setConfigIfChanged(myInstance);
+ return true;
+ }
+ if (!myInstance.equals(configState.getConfig())) {
+ setConfigIncGen(myInstance);
+ return true;
+ }
+ return false;
+ }
+
@Override
public boolean nextConfig(long timeout) {
- long end = System.currentTimeMillis() + timeout;
+ if (hasConfigChanged()) return true;
+ if (timeout <= 0) return false;
+
+ long end = System.nanoTime() + timeout * 1_000_000;
do {
- T myInstance = getNewInstance();
- ConfigState<T> configState = getConfigState();
- // User forced reload
- if (checkReloaded()) {
- setConfigIfChanged(myInstance);
- return true;
- }
- if (!myInstance.equals(configState.getConfig())) {
- setConfigIncGen(myInstance);
- return true;
- }
sleep();
- } while (System.currentTimeMillis() < end);
+ if (hasConfigChanged()) return true;
+ } while (System.nanoTime() < end);
return false;
}