aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src')
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java2
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/maintenance/Maintainer.java11
-rw-r--r--vespajlib/src/test/java/com/yahoo/concurrent/maintenance/JobControlTest.java2
-rw-r--r--vespajlib/src/test/java/com/yahoo/concurrent/maintenance/MaintainerTest.java4
-rw-r--r--vespajlib/src/test/java/com/yahoo/concurrent/maintenance/TestMaintainer.java3
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() {