summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorvalerijf <valerijf@oath.com>2017-08-23 11:02:57 +0200
committervalerijf <valerijf@oath.com>2017-08-23 11:02:57 +0200
commit0125415eb6c6cfc2f9def00cbb260275137d5718 (patch)
treeb8455698ebe41dd87a7d86071f1117acc35f3d3b /node-admin
parent37b53e6a3314b5798a0e2f0a4a9bdc4e7e915aae (diff)
Make it possible to easily add multiple MaintainerJobs in one execution, no functional changes.
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java79
1 files changed, 42 insertions, 37 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 cffbaf84159..3410963d48a 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
@@ -35,7 +35,6 @@ import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
-import java.util.logging.Logger;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -50,7 +49,6 @@ public class StorageMaintainer {
private static final ObjectMapper objectMapper = new ObjectMapper();
private static Optional<String> kernelVersion = Optional.empty();
- private final Logger logger = Logger.getLogger(StorageMaintainer.class.getName());
private final CounterWrapper numberOfNodeAdminMaintenanceFails;
private final Docker docker;
private final ProcessExecuter processExecuter;
@@ -168,12 +166,19 @@ public class StorageMaintainer {
if (! getMaintenanceThrottlerFor(containerName).shouldRemoveOldFilesNow()) return;
MaintainerExecutor maintainerExecutor = new MaintainerExecutor();
+ addRemoveOldFilesCommand(maintainerExecutor, containerName);
+
+ maintainerExecutor.execute();
+ getMaintenanceThrottlerFor(containerName).updateNextRemoveOldFilesTime();
+ }
+
+ private void addRemoveOldFilesCommand(MaintainerExecutor maintainerExecutor, ContainerName containerName) {
String[] pathsToClean = {
- getDefaults().underVespaHome("logs/elasticsearch2"),
- getDefaults().underVespaHome("logs/logstash2"),
- getDefaults().underVespaHome("logs/daemontools_y"),
- getDefaults().underVespaHome("logs/nginx"),
- getDefaults().underVespaHome("logs/vespa")
+ getDefaults().underVespaHome("logs/elasticsearch2"),
+ getDefaults().underVespaHome("logs/logstash2"),
+ getDefaults().underVespaHome("logs/daemontools_y"),
+ getDefaults().underVespaHome("logs/nginx"),
+ getDefaults().underVespaHome("logs/vespa")
};
for (String pathToClean : pathsToClean) {
@@ -193,22 +198,19 @@ public class StorageMaintainer {
}
}
- Path logArchiveDir = environment.pathInNodeAdminFromPathInNode(containerName,
- getDefaults().underVespaHome("logs/vespa/logarchive"));
+ Path logArchiveDir = environment.pathInNodeAdminFromPathInNode(
+ containerName, getDefaults().underVespaHome("logs/vespa/logarchive"));
maintainerExecutor.addJob("delete-files")
.withArgument("basePath", logArchiveDir)
.withArgument("maxAgeSeconds", Duration.ofDays(31).getSeconds())
.withArgument("recursive", false);
- Path fileDistrDir = environment.pathInNodeAdminFromPathInNode(containerName,
- getDefaults().underVespaHome("var/db/vespa/filedistribution"));
+ Path fileDistrDir = environment.pathInNodeAdminFromPathInNode(
+ containerName, getDefaults().underVespaHome("var/db/vespa/filedistribution"));
maintainerExecutor.addJob("delete-files")
.withArgument("basePath", fileDistrDir)
.withArgument("maxAgeSeconds", Duration.ofDays(31).getSeconds())
.withArgument("recursive", true);
-
- maintainerExecutor.execute();
- getMaintenanceThrottlerFor(containerName).updateNextRemoveOldFilesTime();
}
/**
@@ -217,6 +219,14 @@ public class StorageMaintainer {
public void handleCoreDumpsForContainer(ContainerName containerName, ContainerNodeSpec nodeSpec, Environment environment) {
if (! getMaintenanceThrottlerFor(containerName).shouldHandleCoredumpsNow()) return;
+ MaintainerExecutor maintainerExecutor = new MaintainerExecutor();
+ addHandleCoredumpsCommand(maintainerExecutor, containerName, nodeSpec);
+
+ maintainerExecutor.execute();
+ getMaintenanceThrottlerFor(containerName).updateNextHandleCoredumpsTime();
+ }
+
+ private void addHandleCoredumpsCommand(MaintainerExecutor maintainerExecutor, ContainerName containerName, ContainerNodeSpec nodeSpec) {
Map<String, Object> attributes = new HashMap<>();
attributes.put("hostname", nodeSpec.hostname);
attributes.put("parent_hostname", HostName.getLocalhost());
@@ -237,17 +247,12 @@ public class StorageMaintainer {
attributes.put("instance", owner.instance);
});
- MaintainerExecutor maintainerExecutor = new MaintainerExecutor();
maintainerExecutor.addJob("handle-core-dumps")
.withArgument("doneCoredumpsPath", environment.pathInNodeAdminToDoneCoredumps())
- .withArgument("coredumpsPath",
- environment.pathInNodeAdminFromPathInNode(containerName,
- getDefaults().underVespaHome("var/crash")))
+ .withArgument("coredumpsPath", environment.pathInNodeAdminFromPathInNode(
+ containerName, getDefaults().underVespaHome("var/crash")))
.withArgument("feedEndpoint", environment.getCoredumpFeedEndpoint())
.withArgument("attributes", attributes);
-
- maintainerExecutor.execute();
- getMaintenanceThrottlerFor(containerName).updateNextHandleCoredumpsTime();
}
/**
@@ -265,13 +270,15 @@ public class StorageMaintainer {
.withArgument("maxAgeSeconds", Duration.ofDays(7).getSeconds())
.withArgument("dirNameRegex", "^" + Pattern.quote(Environment.APPLICATION_STORAGE_CLEANUP_PATH_PREFIX));
- Path nodeAdminJDiskLogsPath = environment.pathInNodeAdminFromPathInNode(NODE_ADMIN, getDefaults().underVespaHome("logs/vespa/"));
+ Path nodeAdminJDiskLogsPath = environment.pathInNodeAdminFromPathInNode(
+ NODE_ADMIN, getDefaults().underVespaHome("logs/vespa/"));
maintainerExecutor.addJob("delete-files")
.withArgument("basePath", nodeAdminJDiskLogsPath)
.withArgument("maxAgeSeconds", Duration.ofDays(31).getSeconds())
.withArgument("recursive", false);
- Path fileDistrDir = environment.pathInNodeAdminFromPathInNode(NODE_ADMIN, getDefaults().underVespaHome("var/db/vespa/filedistribution"));
+ Path fileDistrDir = environment.pathInNodeAdminFromPathInNode(
+ NODE_ADMIN, getDefaults().underVespaHome("var/db/vespa/filedistribution"));
maintainerExecutor.addJob("delete-files")
.withArgument("basePath", fileDistrDir)
.withArgument("maxAgeSeconds", Duration.ofDays(31).getSeconds())
@@ -286,15 +293,20 @@ public class StorageMaintainer {
*/
public void archiveNodeData(ContainerName containerName) {
MaintainerExecutor maintainerExecutor = new MaintainerExecutor();
+ addArchiveNodeData(maintainerExecutor, containerName);
+
+ maintainerExecutor.execute();
+ getMaintenanceThrottlerFor(containerName).reset();
+ }
+
+ private void addArchiveNodeData(MaintainerExecutor maintainerExecutor, ContainerName containerName) {
maintainerExecutor.addJob("recursive-delete")
- .withArgument("path", environment.pathInNodeAdminFromPathInNode(containerName, getDefaults().underVespaHome("var")));
+ .withArgument("path", environment.pathInNodeAdminFromPathInNode(
+ containerName, getDefaults().underVespaHome("var")));
maintainerExecutor.addJob("move-files")
.withArgument("from", environment.pathInNodeAdminFromPathInNode(containerName, "/"))
.withArgument("to", environment.pathInNodeAdminToNodeCleanup(containerName));
-
- maintainerExecutor.execute();
- getMaintenanceThrottlerFor(containerName).reset();
}
/**
@@ -388,20 +400,13 @@ public class StorageMaintainer {
}
private MaintenanceThrottler getMaintenanceThrottlerFor(ContainerName containerName) {
- if (! maintenanceThrottlerByContainerName.containsKey(containerName)) {
- maintenanceThrottlerByContainerName.put(containerName, new MaintenanceThrottler());
- }
-
+ maintenanceThrottlerByContainerName.putIfAbsent(containerName, new MaintenanceThrottler());
return maintenanceThrottlerByContainerName.get(containerName);
}
private class MaintenanceThrottler {
- private Instant nextRemoveOldFilesAt;
- private Instant nextHandleOldCoredumpsAt;
-
- MaintenanceThrottler() {
- reset();
- }
+ private Instant nextRemoveOldFilesAt = Instant.EPOCH;
+ private Instant nextHandleOldCoredumpsAt = Instant.EPOCH;
void updateNextRemoveOldFilesTime() {
nextRemoveOldFilesAt = clock.instant().plus(Duration.ofHours(1));