diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-16 21:45:36 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-16 21:45:36 +0100 |
commit | 08b8a40cb5bd32f02f8cab22e4a02d9438682e97 (patch) | |
tree | 3455b144f4a6c68fe1db6c4938881b781f719417 /config | |
parent | 0f50c99c8a87a3c476327231ca0ad99c40ec3ba1 (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.java | 34 |
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; } |