diff options
Diffstat (limited to 'vespajlib/src')
5 files changed, 15 insertions, 7 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java b/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java index 705176e8f3e..60d66ae4d91 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java @@ -14,6 +14,6 @@ public abstract class JobMetrics { * Records completion of a run of a job. * This is guaranteed to always be called once after each maintainer run. */ - public abstract void completed(String job, double successFactor); + public abstract void completed(String job, double successFactor, long durationMs); } diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/Maintainer.java b/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/Maintainer.java index b038106843e..1e2c0900ff7 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/Maintainer.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/Maintainer.java @@ -6,6 +6,7 @@ import com.yahoo.net.HostName; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.Clock; import java.time.Duration; import java.time.Instant; import java.util.List; @@ -35,15 +36,17 @@ public abstract class Maintainer implements Runnable { private final ScheduledExecutorService service; private final AtomicBoolean shutDown = new AtomicBoolean(); private final boolean ignoreCollision; + private final Clock clock; - public Maintainer(String name, Duration interval, Instant startedAt, JobControl jobControl, + public Maintainer(String name, Duration interval, Clock clock, JobControl jobControl, JobMetrics jobMetrics, List<String> clusterHostnames, boolean ignoreCollision) { this.name = name; this.interval = requireInterval(interval); this.jobControl = Objects.requireNonNull(jobControl); this.jobMetrics = Objects.requireNonNull(jobMetrics); this.ignoreCollision = ignoreCollision; - Objects.requireNonNull(startedAt); + this.clock = clock; + var startedAt = clock.instant(); Objects.requireNonNull(clusterHostnames); Duration initialDelay = staggeredDelay(interval, startedAt, HostName.getLocalhost(), clusterHostnames) .plus(Duration.ofSeconds(30)); // Let the system stabilize before maintenance @@ -109,6 +112,7 @@ public abstract class Maintainer implements Runnable { log.log(Level.FINE, () -> "Running " + this.getClass().getSimpleName()); double successFactor = 0; + long startTime = clock.millis(); try (var lock = jobControl.lockJob(name())) { successFactor = maintain(); } @@ -122,7 +126,8 @@ public abstract class Maintainer implements Runnable { log.log(Level.WARNING, this + " failed. Will retry in " + interval, e); } finally { - jobMetrics.completed(name(), successFactor); + long endTime = clock.millis(); + jobMetrics.completed(name(), successFactor, endTime - startTime); } log.log(Level.FINE, () -> "Finished " + this.getClass().getSimpleName()); } diff --git a/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/JobControlTest.java b/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/JobControlTest.java index 62fcd885494..0e183b05ee8 100644 --- a/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/JobControlTest.java +++ b/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/JobControlTest.java @@ -84,7 +84,7 @@ public class JobControlTest { private static class NoopJobMetrics extends JobMetrics { @Override - public void completed(String job, double successFactor) { } + public void completed(String job, double successFactor, long durationMs) { } } diff --git a/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/MaintainerTest.java b/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/MaintainerTest.java index 604c29e7289..bb62b1189a1 100644 --- a/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/MaintainerTest.java +++ b/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/MaintainerTest.java @@ -70,10 +70,12 @@ public class MaintainerTest { private static class TestJobMetrics extends JobMetrics { double successFactor = 0.0; + long durationMs = 0; @Override - public void completed(String job, double successFactor) { + public void completed(String job, double successFactor, long durationMs) { this.successFactor = successFactor; + this.durationMs = durationMs; } } diff --git a/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/TestMaintainer.java b/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/TestMaintainer.java index 1946f688df6..d8191b98a51 100644 --- a/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/TestMaintainer.java +++ b/vespajlib/src/test/java/com/yahoo/concurrent/maintenance/TestMaintainer.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.maintenance; +import java.time.Clock; import java.time.Duration; import java.time.Instant; import java.util.List; @@ -15,7 +16,7 @@ class TestMaintainer extends Maintainer { private RuntimeException exceptionToThrow = null; public TestMaintainer(String name, JobControl jobControl, JobMetrics jobMetrics) { - super(name, Duration.ofDays(1), Instant.now(), jobControl, jobMetrics, List.of(), false); + super(name, Duration.ofDays(1), Clock.systemUTC(), jobControl, jobMetrics, List.of(), false); } public int totalRuns() { |