aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorvalerijf <valerijf@yahoo-inc.com>2017-07-31 11:24:53 +0200
committervalerijf <valerijf@yahoo-inc.com>2017-07-31 11:24:53 +0200
commit671d903e9efbd5963c86d3cfed2ba695be5cdfca (patch)
treec3bdc8b24a9ec91fff565b4355fa5522e67e30bf /node-admin
parent7f1bc047bd72f2249c5d06fb368245a94083cb5a (diff)
Do not cache disk usage metric
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java45
1 files changed, 9 insertions, 36 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
index 0c71779dceb..42615813e3a 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
@@ -51,10 +51,7 @@ public class StorageMaintainer {
private static final ObjectMapper objectMapper = new ObjectMapper();
private static Optional<String> kernelVersion = Optional.empty();
- private static final long intervalSec = 1000;
-
private final Logger logger = Logger.getLogger(StorageMaintainer.class.getName());
- private final Object monitor = new Object();
private final CounterWrapper numberOfNodeAdminMaintenanceFails;
private final Docker docker;
private final Environment environment;
@@ -128,25 +125,14 @@ public class StorageMaintainer {
}
public Optional<Long> updateIfNeededAndGetDiskMetricsFor(ContainerName containerName) {
- // Calculating disk usage is IO expensive operation and its value changes relatively slowly, we want to perform
- // that calculation rarely. Additionally, we spread out the calculation for different containers by adding
- // a random deviation.
- MaintenanceThrottler maintenanceThrottler = getMaintenanceThrottlerFor(containerName);
- if (maintenanceThrottler.shouldUpdateDiskUsageNow()) {
- // Throttle to one disk usage calculation at a time.
- synchronized (monitor) {
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(StorageMaintainer.class, containerName);
- Path containerDir = environment.pathInNodeAdminFromPathInNode(containerName, "/home/");
- try {
- long used = getDiscUsedInBytes(containerDir);
- maintenanceThrottler.setDiskUsage(used);
- } catch (Throwable e) {
- logger.error("Problems during disk usage calculations: " + e.getMessage());
- }
- }
+ Path containerDir = environment.pathInNodeAdminFromPathInNode(containerName, "/home/");
+ try {
+ return Optional.of(getDiscUsedInBytes(containerDir));
+ } catch (Throwable e) {
+ PrefixLogger logger = PrefixLogger.getNodeAgentLogger(StorageMaintainer.class, containerName);
+ logger.error("Problems during disk usage calculations in " + containerDir.toAbsolutePath(), e);
+ return Optional.empty();
}
-
- return maintenanceThrottler.diskUsage;
}
// Public for testing
@@ -418,25 +404,13 @@ public class StorageMaintainer {
}
private class MaintenanceThrottler {
- private Instant nextDiskUsageUpdateAt;
private Instant nextRemoveOldFilesAt;
private Instant nextHandleOldCoredumpsAt;
- private Optional<Long> diskUsage = Optional.empty();
MaintenanceThrottler() {
reset();
}
- boolean shouldUpdateDiskUsageNow() {
- return !nextDiskUsageUpdateAt.isAfter(clock.instant());
- }
-
- void setDiskUsage(long diskUsage) {
- this.diskUsage = Optional.of(diskUsage);
- long distributedSecs = (long) (intervalSec * (0.5 + Math.random()));
- nextDiskUsageUpdateAt = clock.instant().plusSeconds(distributedSecs);
- }
-
void updateNextRemoveOldFilesTime() {
nextRemoveOldFilesAt = clock.instant().plus(Duration.ofHours(1));
}
@@ -454,9 +428,8 @@ public class StorageMaintainer {
}
void reset() {
- nextDiskUsageUpdateAt = clock.instant().minus(Duration.ofDays(1));
- nextRemoveOldFilesAt = clock.instant().minus(Duration.ofDays(1));
- nextHandleOldCoredumpsAt = clock.instant().minus(Duration.ofDays(1));
+ nextRemoveOldFilesAt = Instant.EPOCH;
+ nextHandleOldCoredumpsAt = Instant.EPOCH;
}
}
}