summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-04-26 16:17:07 +0200
committerValerij Fredriksen <valerijf@oath.com>2018-04-26 16:17:07 +0200
commit75e7523cc49412d9215e3bed4c692ec0de1b20d6 (patch)
tree36d2bb5e38de720b3fc030004834ef95de199caa /node-admin
parent012c652c970b286114273512ecdd8910c71b217f (diff)
Add getNode and getOptionalNode
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NoSuchNodeException.java8
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java6
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepositoryException.java12
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java10
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java34
11 files changed, 54 insertions, 30 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NoSuchNodeException.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NoSuchNodeException.java
new file mode 100644
index 00000000000..1548b41f0af
--- /dev/null
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NoSuchNodeException.java
@@ -0,0 +1,8 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
+
+public class NoSuchNodeException extends NodeRepositoryException {
+ public NoSuchNodeException(String message) {
+ super(message);
+ }
+}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java
index 8f3b6faa4d9..cbb714c3779 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepository.java
@@ -16,7 +16,11 @@ public interface NodeRepository {
List<NodeSpec> getNodes(String baseHostName);
- Optional<NodeSpec> getNode(String hostName);
+ default NodeSpec getNode(String hostName) {
+ return getOptionalNode(hostName).orElseThrow(() -> new NoSuchNodeException(hostName + " not found in node-repo"));
+ }
+
+ Optional<NodeSpec> getOptionalNode(String hostName);
Map<String, Acl> getAcls(String hostname);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepositoryException.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepositoryException.java
new file mode 100644
index 00000000000..6094518c3fc
--- /dev/null
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeRepositoryException.java
@@ -0,0 +1,12 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
+
+public class NodeRepositoryException extends RuntimeException {
+ public NodeRepositoryException(String message) {
+ super(message);
+ }
+
+ public NodeRepositoryException(String message, Exception exception) {
+ super(message, exception);
+ }
+}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
index 8c34002f5d0..c74f6a31e6c 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
@@ -57,7 +57,7 @@ public class RealNodeRepository implements NodeRepository {
}
@Override
- public Optional<NodeSpec> getNode(String hostName) {
+ public Optional<NodeSpec> getOptionalNode(String hostName) {
try {
NodeRepositoryNode nodeResponse = configServerApi.get("/nodes/v2/node/" + hostName,
NodeRepositoryNode.class);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java
index 44bd93b8d1d..f21f2cd9077 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java
@@ -129,7 +129,7 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater {
if (currentState != RESUMED) return;
try {
- NodeSpec node = nodeRepository.getNode(dockerHostHostName)
+ NodeSpec node = nodeRepository.getOptionalNode(dockerHostHostName)
.orElseThrow(() -> new RuntimeException("Failed to get host's node spec from node-repo"));
String hardwareDivergence = maintainer.getHardwareDivergence(node);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
index d5c81c09133..2fccbc7038e 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
@@ -441,7 +441,7 @@ public class NodeAgentImpl implements NodeAgent {
// Public for testing
void converge() {
- final Optional<NodeSpec> optionalNode = nodeRepository.getNode(hostname);
+ final Optional<NodeSpec> optionalNode = nodeRepository.getOptionalNode(hostname);
// We just removed the node from node repo, so this is expected until NodeAdmin stop this NodeAgent
if (!optionalNode.isPresent() && expectNodeNotInNodeRepo) return;
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
index 2759883ca66..7f9f0027546 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
@@ -120,7 +120,7 @@ public class RealNodeRepositoryTest {
@Test
public void testGetContainer() {
String hostname = "host4.yahoo.com";
- Optional<NodeSpec> node = nodeRepositoryApi.getNode(hostname);
+ Optional<NodeSpec> node = nodeRepositoryApi.getOptionalNode(hostname);
assertThat(node.isPresent(), is(true));
assertThat(node.get().getHostname(), is(hostname));
}
@@ -128,7 +128,7 @@ public class RealNodeRepositoryTest {
@Test
public void testGetContainerForNonExistingNode() {
String hostname = "host-that-does-not-exist";
- Optional<NodeSpec> node = nodeRepositoryApi.getNode(hostname);
+ Optional<NodeSpec> node = nodeRepositoryApi.getOptionalNode(hostname);
assertFalse(node.isPresent());
}
@@ -182,15 +182,15 @@ public class RealNodeRepositoryTest {
List<AddNode> nodesToAdd = Arrays.asList(host, node);
- assertFalse(nodeRepositoryApi.getNode("host123.domain.tld").isPresent());
+ assertFalse(nodeRepositoryApi.getOptionalNode("host123.domain.tld").isPresent());
nodeRepositoryApi.addNodes(nodesToAdd);
- NodeSpec hostSpecInNodeRepo = nodeRepositoryApi.getNode("host123.domain.tld")
+ NodeSpec hostSpecInNodeRepo = nodeRepositoryApi.getOptionalNode("host123.domain.tld")
.orElseThrow(RuntimeException::new);
assertEquals(host.nodeFlavor, hostSpecInNodeRepo.getFlavor());
assertEquals(host.nodeType, hostSpecInNodeRepo.getNodeType());
- assertTrue(nodeRepositoryApi.getNode("host123-1.domain.tld").isPresent());
+ assertTrue(nodeRepositoryApi.getOptionalNode("host123-1.domain.tld").isPresent());
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java
index 5619fd1bab3..ed315708b51 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java
@@ -29,7 +29,7 @@ public class MultiDockerTest {
.build());
// Wait until it is marked ready
- while (dockerTester.nodeRepositoryMock.getNode(nodeSpec2.getHostname())
+ while (dockerTester.nodeRepositoryMock.getOptionalNode(nodeSpec2.getHostname())
.filter(node -> node.getState() != Node.State.ready).isPresent()) {
Thread.sleep(10);
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java
index 13f1520e065..68fa2bc7a1a 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeRepoMock.java
@@ -42,7 +42,7 @@ public class NodeRepoMock implements NodeRepository {
}
@Override
- public Optional<NodeSpec> getNode(String hostName) {
+ public Optional<NodeSpec> getOptionalNode(String hostName) {
synchronized (monitor) {
return Optional.ofNullable(nodeRepositoryNodesByHostname.get(hostName));
}
@@ -64,7 +64,7 @@ public class NodeRepoMock implements NodeRepository {
@Override
public void setNodeState(String hostName, Node.State nodeState) {
- Optional<NodeSpec> node = getNode(hostName);
+ Optional<NodeSpec> node = getOptionalNode(hostName);
synchronized (monitor) {
node.ifPresent(nrn -> updateNodeRepositoryNode(new NodeSpec.Builder(nrn)
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
index c50d8e4efa9..063e478ffb4 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
@@ -55,7 +55,7 @@ public class NodeStateTest {
.build());
// Wait until it is marked ready
- while (dockerTester.nodeRepositoryMock.getNode(initialNodeSpec.getHostname())
+ while (dockerTester.nodeRepositoryMock.getOptionalNode(initialNodeSpec.getHostname())
.filter(node -> node.getState() != Node.State.ready).isPresent()) {
Thread.sleep(10);
}
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 a90afe767af..d6d7de7f835 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
@@ -118,7 +118,7 @@ public class NodeAgentImplTest {
.build();
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
when(storageMaintainer.getDiskUsageFor(eq(containerName))).thenReturn(Optional.of(187500000000L));
nodeAgent.converge();
@@ -150,7 +150,7 @@ public class NodeAgentImplTest {
.build();
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
when(storageMaintainer.getDiskUsageFor(eq(containerName))).thenReturn(Optional.of(217432719360L));
nodeAgent.converge();
@@ -174,7 +174,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(null, false);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
when(pathResolver.getApplicationStoragePathForNodeAdmin()).thenReturn(Files.createTempDirectory("foo"));
when(pathResolver.getApplicationStoragePathForHost()).thenReturn(Files.createTempDirectory("bar"));
when(dockerOperations.pullImageAsyncIfNeeded(eq(dockerImage))).thenReturn(false);
@@ -216,7 +216,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
when(dockerOperations.pullImageAsyncIfNeeded(any())).thenReturn(true);
when(storageMaintainer.getDiskUsageFor(eq(containerName))).thenReturn(Optional.of(201326592000L));
@@ -248,7 +248,7 @@ public class NodeAgentImplTest {
NodeSpec secondSpec = specBuilder.minDiskAvailableGb(200).build();
NodeSpec thirdSpec = specBuilder.minCpuCores(4).build();
- when(nodeRepository.getNode(hostName))
+ when(nodeRepository.getOptionalNode(hostName))
.thenReturn(Optional.of(firstSpec))
.thenReturn(Optional.of(secondSpec))
.thenReturn(Optional.of(thirdSpec));
@@ -312,7 +312,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
nodeAgent.converge();
@@ -334,7 +334,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(null,false);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
nodeAgent.converge();
nodeAgent.converge();
@@ -367,7 +367,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
nodeAgent.converge();
@@ -394,7 +394,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(null, false);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
nodeAgent.converge();
@@ -414,7 +414,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
nodeAgent.converge();
@@ -453,7 +453,7 @@ public class NodeAgentImplTest {
.build();
NodeAgentImpl nodeAgent = makeNodeAgent(null, false);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
nodeAgent.converge();
verify(nodeRepository, times(1)).setNodeState(eq(hostName), eq(Node.State.dirty));
@@ -470,7 +470,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, false);
- when(nodeRepository.getNode(eq(hostName))).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(eq(hostName))).thenReturn(Optional.of(node));
when(pathResolver.getApplicationStoragePathForNodeAdmin()).thenReturn(Files.createTempDirectory("foo"));
when(pathResolver.getApplicationStoragePathForHost()).thenReturn(Files.createTempDirectory("bar"));
when(storageMaintainer.getDiskUsageFor(eq(containerName))).thenReturn(Optional.of(201326592000L));
@@ -496,7 +496,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(eq(hostName))).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(eq(hostName))).thenReturn(Optional.of(node));
when(storageMaintainer.getDiskUsageFor(eq(containerName))).thenReturn(Optional.of(201326592000L));
final InOrder inOrder = inOrder(orchestrator, dockerOperations, nodeRepository);
@@ -563,7 +563,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = spy(makeNodeAgent(null, false));
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
when(pathResolver.getApplicationStoragePathForNodeAdmin()).thenReturn(Files.createTempDirectory("foo"));
when(pathResolver.getApplicationStoragePathForHost()).thenReturn(Files.createTempDirectory("bar"));
when(dockerOperations.pullImageAsyncIfNeeded(eq(dockerImage))).thenReturn(false);
@@ -622,7 +622,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
- when(nodeRepository.getNode(eq(hostName))).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(eq(hostName))).thenReturn(Optional.of(node));
when(storageMaintainer.getDiskUsageFor(eq(containerName))).thenReturn(Optional.of(39625000000L));
when(dockerOperations.getContainerStats(eq(containerName)))
.thenReturn(Optional.of(stats1))
@@ -664,7 +664,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(null, false);
- when(nodeRepository.getNode(eq(hostName))).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(eq(hostName))).thenReturn(Optional.of(node));
when(dockerOperations.getContainerStats(eq(containerName))).thenReturn(Optional.empty());
nodeAgent.converge(); // Run the converge loop once to initialize lastNode
@@ -687,7 +687,7 @@ public class NodeAgentImplTest {
NodeAgentImpl nodeAgent = makeNodeAgent(null, false);
- when(nodeRepository.getNode(hostName)).thenReturn(Optional.of(node));
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
Path tempDirectory = Files.createTempDirectory("foo");
when(pathResolver.getApplicationStoragePathForHost()).thenReturn(tempDirectory);
when(dockerOperations.pullImageAsyncIfNeeded(eq(dockerImage))).thenReturn(false);