diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-04-26 16:17:07 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2018-04-26 16:17:07 +0200 |
commit | 75e7523cc49412d9215e3bed4c692ec0de1b20d6 (patch) | |
tree | 36d2bb5e38de720b3fc030004834ef95de199caa /node-admin | |
parent | 012c652c970b286114273512ecdd8910c71b217f (diff) |
Add getNode and getOptionalNode
Diffstat (limited to 'node-admin')
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); |