summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2021-10-14 16:55:49 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2021-10-14 16:55:49 +0200
commit7f1f9e3d1d17d176c13d183d4131f58c808c2141 (patch)
tree77409641acd2706c3b7a53efa58fc5cedae8c551
parent4d5118af963dd985a417e5af45ab9af879e21ba3 (diff)
Create container storage root directories when creating Container FS
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java14
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/fs/ContainerFileSystem.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerFailTest.java3
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java3
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextManagerTest.java3
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java7
8 files changed, 24 insertions, 18 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java
index 899df091e7a..3b1235d1ccf 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java
@@ -20,7 +20,6 @@ import com.yahoo.vespa.hosted.node.admin.task.util.fs.ContainerFileSystem;
import com.yahoo.vespa.hosted.node.admin.task.util.fs.ContainerPath;
import java.nio.file.FileSystem;
-import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
import java.util.Optional;
@@ -29,8 +28,6 @@ import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
-import static com.yahoo.yolean.Exceptions.uncheck;
-
/**
* @author freva
*/
@@ -259,7 +256,9 @@ public class NodeAgentContextImpl implements NodeAgentContext {
}
public NodeAgentContextImpl build() {
- NodeAgentContextImpl context = new NodeAgentContextImpl(
+ Objects.requireNonNull(containerStorage, "Must set one of containerStorage or fileSystem");
+
+ return new NodeAgentContextImpl(
nodeSpecBuilder.build(),
Optional.ofNullable(acl).orElse(Acl.EMPTY),
Optional.ofNullable(identity).orElseGet(() -> new AthenzService("domain", "service")),
@@ -286,15 +285,10 @@ public class NodeAgentContextImpl implements NodeAgentContext {
}
}),
Optional.ofNullable(flagSource).orElseGet(InMemoryFlagSource::new),
- Optional.ofNullable(containerStorage).orElseGet(() -> Path.of("/data/vespa/storage")),
+ containerStorage,
"/opt/vespa",
Optional.ofNullable(userNamespace).orElseGet(() -> new UserNamespace(100000, 100000, "vespa", "vespa", 1000, 100)),
cpuSpeedUp, hostExclusiveTo);
-
- if (containerStorage != null)
- uncheck(() -> Files.createDirectories(context.containerPath("/").pathOnHost()));
-
- return context;
}
}
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/fs/ContainerFileSystem.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/fs/ContainerFileSystem.java
index 495b72e4554..36edfa1c1ee 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/fs/ContainerFileSystem.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/fs/ContainerFileSystem.java
@@ -4,12 +4,15 @@ package com.yahoo.vespa.hosted.node.admin.task.util.fs;
import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.FileSystem;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.WatchService;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.util.Set;
+import static com.yahoo.yolean.Exceptions.uncheck;
+
/**
* @author valerijf
*/
@@ -82,6 +85,7 @@ public class ContainerFileSystem extends FileSystem {
}
public static ContainerFileSystem create(Path containerStorageRoot, int uidOffset, int gidOffset) {
+ uncheck(() -> Files.createDirectories(containerStorageRoot));
return new ContainerFileSystemProvider(containerStorageRoot, uidOffset, gidOffset).getFileSystem(null);
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerFailTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerFailTest.java
index 8683c2cb417..a2dbfe0db4b 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerFailTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerFailTest.java
@@ -6,6 +6,7 @@ import com.yahoo.vespa.hosted.node.admin.container.ContainerName;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl;
+import com.yahoo.vespa.test.file.TestFileSystem;
import org.junit.Test;
import java.util.List;
@@ -33,7 +34,7 @@ public class ContainerFailTest {
.build();
tester.addChildNodeRepositoryNode(nodeSpec);
- NodeAgentContext context = NodeAgentContextImpl.builder(nodeSpec).build();
+ NodeAgentContext context = NodeAgentContextImpl.builder(nodeSpec).fileSystem(TestFileSystem.create()).build();
tester.inOrder(tester.containerOperations).createContainer(containerMatcher(containerName), any(), any());
tester.inOrder(tester.containerOperations).resumeNode(containerMatcher(containerName));
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java
index faea4c0bac9..ded99cf3778 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java
@@ -6,6 +6,7 @@ import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl;
import com.yahoo.vespa.hosted.node.admin.task.util.fs.ContainerPath;
import com.yahoo.vespa.hosted.node.admin.task.util.process.CommandResult;
+import com.yahoo.vespa.test.file.TestFileSystem;
import org.junit.Test;
import java.util.List;
@@ -27,7 +28,8 @@ public class CoreCollectorTest {
private final String JDK_PATH = "/path/to/jdk/java";
private final ContainerOperations docker = mock(ContainerOperations.class);
private final CoreCollector coreCollector = new CoreCollector(docker);
- private final NodeAgentContext context = NodeAgentContextImpl.builder("container-123.domain.tld").build();
+ private final NodeAgentContext context = NodeAgentContextImpl.builder("container-123.domain.tld")
+ .fileSystem(TestFileSystem.create()).build();
private final ContainerPath TEST_CORE_PATH = context.containerPath("/tmp/core.1234");
private final String TEST_BIN_PATH = "/usr/bin/program";
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java
index 232b95f5ede..f8dc05b5eda 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImplTest.java
@@ -5,6 +5,7 @@ import com.yahoo.test.ManualClock;
import com.yahoo.vespa.hosted.node.admin.container.metrics.Metrics;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl;
+import com.yahoo.vespa.test.file.TestFileSystem;
import org.junit.Test;
import org.mockito.InOrder;
@@ -154,7 +155,7 @@ public class NodeAdminImplTest {
}
private NodeAgentContext createNodeAgentContext(String hostname) {
- return NodeAgentContextImpl.builder(hostname).build();
+ return NodeAgentContextImpl.builder(hostname).fileSystem(TestFileSystem.create()).build();
}
private NodeAgentWithScheduler mockNodeAgentWithSchedulerFactory(NodeAgentContext context) {
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java
index 782dbf52aea..1c439234a34 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java
@@ -87,9 +87,9 @@ public class NodeAgentContextImplTest {
assertTrue(context2.isDisabled(NodeAgentTask.CoreDumps));
}
- private static NodeAgentContext createContextWithDisabledTasks(String... tasks) {
+ private NodeAgentContext createContextWithDisabledTasks(String... tasks) {
InMemoryFlagSource flagSource = new InMemoryFlagSource();
flagSource.withListFlag(PermanentFlags.DISABLED_HOST_ADMIN_TASKS.id(), List.of(tasks), String.class);
- return NodeAgentContextImpl.builder("node123").flagSource(flagSource).build();
+ return NodeAgentContextImpl.builder("node123").fileSystem(fileSystem).flagSource(flagSource).build();
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextManagerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextManagerTest.java
index 51fedd54381..197b1c81b57 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextManagerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextManagerTest.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.vespa.hosted.node.admin.nodeagent;
+import com.yahoo.vespa.test.file.TestFileSystem;
import org.junit.Test;
import java.time.Clock;
@@ -142,7 +143,7 @@ public class NodeAgentContextManagerTest {
}
private static NodeAgentContext generateContext() {
- return NodeAgentContextImpl.builder("container-123.domain.tld").build();
+ return NodeAgentContextImpl.builder("container-123.domain.tld").fileSystem(TestFileSystem.create()).build();
}
private static class AsyncExecutor<T> {
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
index 8764db502bb..1c6831e6379 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
@@ -27,10 +27,12 @@ import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer;
import com.yahoo.vespa.hosted.node.admin.maintenance.identity.CredentialsMaintainer;
import com.yahoo.vespa.hosted.node.admin.maintenance.servicedump.VespaServiceDumper;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.ConvergenceException;
+import com.yahoo.vespa.test.file.TestFileSystem;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
+import java.nio.file.FileSystem;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
@@ -72,6 +74,7 @@ public class NodeAgentImplTest {
private final CredentialsMaintainer credentialsMaintainer = mock(CredentialsMaintainer.class);
private final InMemoryFlagSource flagSource = new InMemoryFlagSource();
private final ManualClock clock = new ManualClock(Instant.now());
+ private final FileSystem fileSystem = TestFileSystem.create();
@Before
public void setUp() {
@@ -233,7 +236,7 @@ public class NodeAgentImplTest {
nodeAgent.doConverge(secondContext);
inOrder.verify(orchestrator, never()).resume(any(String.class));
- NodeAgentContext thirdContext = NodeAgentContextImpl.builder(specBuilder.vcpu(5).build()).cpuSpeedUp(1.25).build();
+ NodeAgentContext thirdContext = NodeAgentContextImpl.builder(specBuilder.vcpu(5).build()).fileSystem(fileSystem).cpuSpeedUp(1.25).build();
nodeAgent.doConverge(thirdContext);
ContainerResources resourcesAfterThird = ContainerResources.from(0, 4, 16);
mockGetContainer(dockerImage, resourcesAfterThird, true);
@@ -777,7 +780,7 @@ public class NodeAgentImplTest {
}
private NodeAgentContext createContext(NodeSpec nodeSpec) {
- return NodeAgentContextImpl.builder(nodeSpec).build();
+ return NodeAgentContextImpl.builder(nodeSpec).fileSystem(fileSystem).build();
}
private NodeSpec.Builder nodeBuilder(NodeState state) {