diff options
author | valerijf <valerijf@yahoo-inc.com> | 2016-07-20 14:33:44 +0200 |
---|---|---|
committer | valerijf <valerijf@yahoo-inc.com> | 2016-07-20 14:33:44 +0200 |
commit | 284b59f771f15de5e39d35acc0a91b443d95f489 (patch) | |
tree | 9dfe1889fe4a9e46bef1b0f4d525faa84b932487 /node-admin | |
parent | 1b6978ed36fdd979ad7a263fdba66fb0722e2838 (diff) |
applicationStoragePathForNode now takes in ContainerName
Diffstat (limited to 'node-admin')
5 files changed, 33 insertions, 22 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImpl.java index 02b9deb9b27..186a5a284f2 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImpl.java @@ -35,8 +35,6 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.file.Path; import java.nio.file.Paths; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; @@ -45,7 +43,6 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.TimeZone; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -71,11 +68,9 @@ public class DockerImpl implements Docker { private static final String LABEL_NAME_MANAGEDBY = "com.yahoo.vespa.managedby"; private static final String LABEL_VALUE_MANAGEDBY = "node-admin"; private static final Map<String,String> CONTAINER_LABELS = new HashMap<>(); - public static DateFormat filenameFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); static { CONTAINER_LABELS.put(LABEL_NAME_MANAGEDBY, LABEL_VALUE_MANAGEDBY); - filenameFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); } private static final List<String> DIRECTORIES_TO_MOUNT = Arrays.asList( @@ -209,7 +204,7 @@ public class DockerImpl implements Docker { hostConfig( HostConfig.builder() .networkMode("none") - .binds(applicationStorageToMount(containerName.asString())) + .binds(applicationStorageToMount(containerName)) .build()) .env("CONFIG_SERVER_ADDRESS=" + Joiner.on(',').join(Environment.getConfigServerHosts())). hostname(hostName.s()); @@ -332,7 +327,7 @@ public class DockerImpl implements Docker { } } - static List<String> applicationStorageToMount(String containerName) { + static List<String> applicationStorageToMount(ContainerName containerName) { // From-paths when mapping volumes are as seen by the Docker daemon (host) Path destination = Maintainer.applicationStoragePathForHost(containerName); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java index 9348fd0c8f2..204a50811f3 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java @@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.node.admin.maintenance; import com.yahoo.io.IOUtils; import com.yahoo.log.LogLevel; import com.yahoo.vespa.hosted.node.admin.docker.ContainerName; -import com.yahoo.vespa.hosted.node.admin.docker.DockerImpl; import com.yahoo.vespa.hosted.node.maintenance.DeleteOldAppData; import com.yahoo.vespa.hosted.node.maintenance.Maintainer; @@ -13,8 +12,6 @@ import java.io.InputStreamReader; import java.nio.file.Files; import java.nio.file.Path; import java.time.Duration; -import java.time.Instant; -import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; @@ -64,14 +61,13 @@ public class MaintenanceSchedulerImpl implements MaintenanceScheduler { DeleteOldAppData.deleteDirectories(yVarDir.getAbsolutePath(), 0, null); } - Path from = Maintainer.applicationStoragePathForNode(containerName.asString()); + Path from = Maintainer.applicationStoragePathForNode(containerName); if (!Files.exists(from)) { log.log(LogLevel.INFO, "The application storage at " + from + " doesn't exist"); return; } - Path to = Maintainer.applicationStoragePathForNode(Maintainer.APPLICATION_STORAGE_CLEANUP_PATH_PREFIX + - containerName.asString() + "_" + DockerImpl.filenameFormatter.format(Date.from(Instant.now()))); + Path to = Maintainer.applicationStoragePathForNodeCleanup(containerName); log.log(LogLevel.INFO, "Deleting application storage by moving it from " + from + " to " + to); //TODO: move to maintenance JVM Files.move(from, to); @@ -91,7 +87,7 @@ public class MaintenanceSchedulerImpl implements MaintenanceScheduler { } private File resolveContainerPath(ContainerName containerName, String relativePath) { - return Maintainer.applicationStoragePathForNode(containerName.asString()).resolve(relativePath).toFile(); + return Maintainer.applicationStoragePathForNode(containerName).resolve(relativePath).toFile(); } private static String[] concatenateArrays(String[] ar1, String[] ar2) { diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java index 47b2c905c3c..0243cc6b661 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/maintenance/Maintainer.java @@ -1,5 +1,6 @@ package com.yahoo.vespa.hosted.node.maintenance; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerName; import io.airlift.airline.Cli; import io.airlift.airline.Command; import io.airlift.airline.Help; @@ -9,9 +10,14 @@ import io.airlift.airline.ParseOptionMissingException; import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.time.Duration; +import java.time.Instant; import java.util.Arrays; +import java.util.Date; import java.util.List; +import java.util.TimeZone; import java.util.regex.Pattern; /** @@ -21,13 +27,18 @@ public class Maintainer { private static final Path RELATIVE_APPLICATION_STORAGE_PATH = Paths.get("home/docker/container-storage"); private static final Path APPLICATION_STORAGE_PATH_FOR_NODE_ADMIN = Paths.get("/host").resolve(RELATIVE_APPLICATION_STORAGE_PATH); private static final Path APPLICATION_STORAGE_PATH_FOR_HOST = Paths.get("/").resolve(RELATIVE_APPLICATION_STORAGE_PATH); + private static final String APPLICATION_STORAGE_CLEANUP_PATH_PREFIX = "cleanup_"; - public static final String APPLICATION_STORAGE_CLEANUP_PATH_PREFIX = "cleanup_"; + private static DateFormat filenameFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); public static final String JOB_DELETE_OLD_APP_DATA = "delete-old-app-data"; public static final String JOB_CLEAN_CORE_DUMPS = "clean-core-dumps"; public static final String JOB_CLEAN_HOME = "clean-home"; + static { + filenameFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); + } + @SuppressWarnings("unchecked") public static void main(String[] args) { Cli.CliBuilder<Runnable> builder = Cli.<Runnable>builder("maintainer.jar") @@ -48,7 +59,7 @@ public class Maintainer { public static class DeleteOldAppDataArguments implements Runnable { @Override public void run() { - String path = applicationStoragePathForNode("/").toString(); + String path = applicationStorageRootPathForNode().toString(); String regex = "^" + Pattern.quote(APPLICATION_STORAGE_CLEANUP_PATH_PREFIX); DeleteOldAppData.deleteDirectories(path, Duration.ofDays(7).getSeconds(), regex); @@ -85,12 +96,20 @@ public class Maintainer { } } + public static Path applicationStoragePathForHost(ContainerName containerName) { + return APPLICATION_STORAGE_PATH_FOR_HOST.resolve(containerName.asString()); + } + + public static Path applicationStorageRootPathForNode() { + return APPLICATION_STORAGE_PATH_FOR_NODE_ADMIN.toAbsolutePath(); + } - public static Path applicationStoragePathForHost(String containerName) { - return APPLICATION_STORAGE_PATH_FOR_HOST.resolve(containerName); + public static Path applicationStoragePathForNode(ContainerName containerName) { + return APPLICATION_STORAGE_PATH_FOR_NODE_ADMIN.resolve(containerName.asString()); } - public static Path applicationStoragePathForNode(String containerName) { - return APPLICATION_STORAGE_PATH_FOR_NODE_ADMIN.resolve(containerName); + public static Path applicationStoragePathForNodeCleanup(ContainerName containerName) { + return APPLICATION_STORAGE_PATH_FOR_NODE_ADMIN.resolve(APPLICATION_STORAGE_CLEANUP_PATH_PREFIX + + containerName.asString() + "_" + filenameFormatter.format(Date.from(Instant.now()))); } } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImplTest.java index 66167e73d3b..5656627bbba 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerImplTest.java @@ -44,7 +44,7 @@ import static org.mockito.Mockito.when; public class DockerImplTest { @Test public void data_directories_are_mounted_in_from_the_host() { - List<String> binds = DockerImpl.applicationStorageToMount("my-container"); + List<String> binds = DockerImpl.applicationStorageToMount(new ContainerName("my-container")); String dataDirectory = Defaults.getDefaults().vespaHome() + "logs"; String directoryOnHost = "/home/docker/container-storage/my-container" + dataDirectory; diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/maintenance/MaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/maintenance/MaintainerTest.java index a676234e47d..7d030d0dc3a 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/maintenance/MaintainerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/maintenance/MaintainerTest.java @@ -1,5 +1,6 @@ package com.yahoo.vespa.hosted.node.maintenance; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerName; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -12,6 +13,6 @@ public class MaintainerTest { public void locationOfContainerStorageInNodeAdmin() { assertEquals( "/host/home/docker/container-storage/docker1-1", - Maintainer.applicationStoragePathForNode("docker1-1").toString()); + Maintainer.applicationStoragePathForNode(new ContainerName("docker1-1")).toString()); } } |