summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-10-12 13:36:05 +0200
committerValerij Fredriksen <valerijf@oath.com>2018-10-12 13:36:05 +0200
commit0dec619cd87f5baa7b462c4dcfbd45b3a3a7d0b3 (patch)
tree21cd9fb6f7768ab69efc75b3434cf26cbf2e71d5 /node-admin
parent6a0539af772ce6005741b2cb8caa9f4c7fc332a7 (diff)
Add pathInNodeFromPathOnHost() to NodeAgentContext
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java20
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java15
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java32
3 files changed, 59 insertions, 8 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java
index 63f469635f8..f65f371ff67 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java
@@ -19,24 +19,42 @@ public interface NodeAgentContext extends TaskContext {
AthenzService identity();
+
/**
- * Translates an absolute path in container to an absolute path in host.
+ * This method is the inverse of {@link #pathInNodeFromPathOnHost(Path)}}
*
* @param pathInNode absolute path in the container
* @return the absolute path on host pointing at the same inode
*/
Path pathOnHostFromPathInNode(Path pathInNode);
+ /** @see #pathOnHostFromPathInNode(Path) */
default Path pathOnHostFromPathInNode(String pathInNode) {
return pathOnHostFromPathInNode(Paths.get(pathInNode));
}
+
+ /**
+ * This method is the inverse of {@link #pathOnHostFromPathInNode(Path)}
+ *
+ * @param pathOnHost absolute path on host
+ * @return the absolute path in the container pointing at the same inode
+ */
+ Path pathInNodeFromPathOnHost(Path pathOnHost);
+
+ /** @see #pathOnHostFromPathInNode(Path) */
+ default Path pathInNodeFromPathOnHost(String pathOnHost) {
+ return pathInNodeFromPathOnHost(Paths.get(pathOnHost));
+ }
+
+
/**
* @param relativePath relative path under Vespa home in container
* @return the absolute path under Vespa home in the container
*/
Path pathInNodeUnderVespaHome(Path relativePath);
+ /** @see #pathInNodeUnderVespaHome(Path) */
default Path pathInNodeUnderVespaHome(String relativePath) {
return pathInNodeUnderVespaHome(Paths.get(relativePath));
}
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 6d7110aeb51..d3c8b145488 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
@@ -59,15 +59,26 @@ public class NodeAgentContextImpl implements NodeAgentContext {
@Override
public Path pathOnHostFromPathInNode(Path pathInNode) {
if (! pathInNode.isAbsolute())
- throw new IllegalArgumentException("Expected an absolute path in container, got: " + pathInNode);
+ throw new IllegalArgumentException("Expected an absolute path in the container, got: " + pathInNode);
return pathToNodeRootOnHost.resolve(ROOT.relativize(pathInNode).toString());
}
@Override
+ public Path pathInNodeFromPathOnHost(Path pathOnHost) {
+ if (! pathOnHost.isAbsolute())
+ throw new IllegalArgumentException("Expected an absolute path on the host, got: " + pathOnHost);
+
+ if (!pathOnHost.startsWith(pathToNodeRootOnHost))
+ throw new IllegalArgumentException("Path " + pathOnHost + " does not exist in the container");
+
+ return ROOT.resolve(pathToNodeRootOnHost.relativize(pathOnHost).toString());
+ }
+
+ @Override
public Path pathInNodeUnderVespaHome(Path relativePath) {
if (relativePath.isAbsolute())
- throw new IllegalArgumentException("Expected a relative path to Vespa home, got: " + relativePath);
+ throw new IllegalArgumentException("Expected a relative path to the Vespa home, got: " + relativePath);
return pathToVespaHome.resolve(relativePath);
}
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 2388e1e02b1..31ac8d1c114 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
@@ -15,23 +15,45 @@ import static org.junit.Assert.assertEquals;
* @author freva
*/
public class NodeAgentContextImplTest {
- private final NodeAgentContext context = nodeAgentFromHostname("container-1.domain.tld");
-
+ private final FileSystem fileSystem = TestFileSystem.create();
+ private final NodeAgentContext context = nodeAgentFromHostname(fileSystem, "container-1.domain.tld");
@Test
public void path_on_host_from_path_in_node_test() {
assertEquals(
"/home/docker/container-1",
- context.pathOnHostFromPathInNode(Paths.get("/")).toString());
+ context.pathOnHostFromPathInNode("/").toString());
assertEquals(
"/home/docker/container-1/dev/null",
- context.pathOnHostFromPathInNode(Paths.get("/dev/null")).toString());
+ context.pathOnHostFromPathInNode("/dev/null").toString());
}
@Test(expected=IllegalArgumentException.class)
public void path_in_container_must_be_absolute() {
- context.pathOnHostFromPathInNode(Paths.get("some/relative/path"));
+ context.pathOnHostFromPathInNode("some/relative/path");
+ }
+
+ @Test
+ public void path_in_node_from_path_on_host_test() {
+ assertEquals(
+ "/dev/null",
+ context.pathInNodeFromPathOnHost(fileSystem.getPath("/home/docker/container-1/dev/null")).toString());
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void path_on_host_must_be_absolute() {
+ context.pathInNodeFromPathOnHost("some/relative/path");
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void path_on_host_must_be_inside_container_storage_of_context() {
+ context.pathInNodeFromPathOnHost(fileSystem.getPath("/home/docker/container-2/dev/null"));
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void path_on_host_must_be_inside_container_storage() {
+ context.pathInNodeFromPathOnHost(fileSystem.getPath("/home"));
}
@Test