diff options
author | valerijf <valerijf@oath.com> | 2017-08-23 11:02:57 +0200 |
---|---|---|
committer | valerijf <valerijf@oath.com> | 2017-08-23 11:02:57 +0200 |
commit | 0125415eb6c6cfc2f9def00cbb260275137d5718 (patch) | |
tree | b8455698ebe41dd87a7d86071f1117acc35f3d3b /node-admin | |
parent | 37b53e6a3314b5798a0e2f0a4a9bdc4e7e915aae (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.java | 79 |
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)); |