From 6cfd9ef70ebc985044a9889692b69258a2be131a Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Tue, 19 Sep 2017 12:40:31 +0200 Subject: Re-order arguments, take converge interval as Duration instead --- .../node/admin/docker/DockerOperationsImpl.java | 3 --- .../admin/nodeadmin/NodeAdminStateUpdater.java | 26 ++++++++++++---------- .../admin/nodeadmin/NodeAdminStateUpdaterTest.java | 16 +++++++------ 3 files changed, 23 insertions(+), 22 deletions(-) (limited to 'node-admin') diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java index a4118ebe9ff..f6fd8c3bd18 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.regex.Pattern; import java.util.stream.Stream; import static com.yahoo.vespa.defaults.Defaults.getDefaults; @@ -40,8 +39,6 @@ public class DockerOperationsImpl implements DockerOperations { private static final String[] RESTART_VESPA_ON_NODE_COMMAND = new String[]{NODE_PROGRAM, "restart-vespa"}; private static final String[] STOP_NODE_COMMAND = new String[]{NODE_PROGRAM, "stop"}; - private static final Pattern VESPA_VERSION_PATTERN = Pattern.compile("^(\\S*)$", Pattern.MULTILINE); - private static final String MANAGER_NAME = "node-admin"; // Map of directories to mount and whether they should be writable by everyone diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java index a848dae9388..cf47e3c2da5 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java @@ -56,23 +56,25 @@ public class NodeAdminStateUpdater extends AbstractComponent { private final Clock clock; private final Orchestrator orchestrator; private final String dockerHostHostName; + private final Duration nodeAdminConvergeStateInterval; - private long delaysBetweenEachTickMillis = 30_000; private Instant lastTick; public NodeAdminStateUpdater( - final NodeRepository nodeRepository, - final NodeAdmin nodeAdmin, + NodeRepository nodeRepository, + Orchestrator orchestrator, StorageMaintainer storageMaintainer, + NodeAdmin nodeAdmin, + String dockerHostHostName, Clock clock, - Orchestrator orchestrator, - String dockerHostHostName) { + Duration nodeAdminConvergeStateInterval) { log.log(LogLevel.INFO, objectToString() + ": Creating object"); this.nodeRepository = nodeRepository; - this.nodeAdmin = nodeAdmin; - this.clock = clock; this.orchestrator = orchestrator; + this.nodeAdmin = nodeAdmin; this.dockerHostHostName = dockerHostHostName; + this.clock = clock; + this.nodeAdminConvergeStateInterval = nodeAdminConvergeStateInterval; this.lastTick = clock.instant(); specVerifierScheduler.scheduleWithFixedDelay(() -> @@ -133,7 +135,8 @@ public class NodeAdminStateUpdater extends AbstractComponent { State wantedStateCopy; synchronized (monitor) { while (! workToDoNow) { - long remainder = delaysBetweenEachTickMillis - Duration.between(lastTick, clock.instant()).toMillis(); + Duration timeSinceLastConverge = Duration.between(lastTick, clock.instant()); + long remainder = nodeAdminConvergeStateInterval.minus(timeSinceLastConverge).toMillis(); if (remainder > 0) { try { monitor.wait(remainder); @@ -231,7 +234,7 @@ public class NodeAdminStateUpdater extends AbstractComponent { } final List containersToRun; try { - containersToRun = nodeRepository.getContainersToRun(); + containersToRun = nodeRepository.getContainersToRun(dockerHostHostName); } catch (Exception e) { log.log(LogLevel.WARNING, "Failed fetching container info from node repository", e); return; @@ -250,7 +253,7 @@ public class NodeAdminStateUpdater extends AbstractComponent { private List getNodesInActiveState() { try { - return nodeRepository.getContainersToRun() + return nodeRepository.getContainersToRun(dockerHostHostName) .stream() .filter(nodespec -> nodespec.nodeState == Node.State.active) .map(nodespec -> nodespec.hostname) @@ -260,8 +263,7 @@ public class NodeAdminStateUpdater extends AbstractComponent { } } - public void start(long stateConvergeInterval) { - delaysBetweenEachTickMillis = stateConvergeInterval; + public void start() { if (loopThread != null) { throw new RuntimeException("Can not restart NodeAdminStateUpdater"); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java index f2d5c7e3ade..e1501cf59fe 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java @@ -32,18 +32,20 @@ import static org.mockito.Mockito.when; /** * Basic test of NodeAdminStateUpdater + * * @author freva */ public class NodeAdminStateUpdaterTest { - private final String parentHostname = "basehost1.test.yahoo.com"; - - private final ManualClock clock = new ManualClock(); private final NodeRepository nodeRepository = mock(NodeRepository.class); - private final NodeAdmin nodeAdmin = mock(NodeAdmin.class); - private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class); private final Orchestrator orchestrator = mock(Orchestrator.class); + private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class); + private final NodeAdmin nodeAdmin = mock(NodeAdmin.class); + private final String parentHostname = "basehost1.test.yahoo.com"; + private final ManualClock clock = new ManualClock(); + private final Duration convergeStateInterval = Duration.ofSeconds(30); + private final NodeAdminStateUpdater refresher = spy(new NodeAdminStateUpdater( - nodeRepository, nodeAdmin, storageMaintainer, clock, orchestrator, parentHostname)); + nodeRepository, orchestrator, storageMaintainer, nodeAdmin, parentHostname, clock, convergeStateInterval)); @Test @@ -66,7 +68,7 @@ public class NodeAdminStateUpdaterTest { List suspendHostnames = new ArrayList<>(activeHostnames); suspendHostnames.add(parentHostname); - when(nodeRepository.getContainersToRun()).thenReturn(containersToRun); + when(nodeRepository.getContainersToRun(eq(parentHostname))).thenReturn(containersToRun); // Initially everything is frozen to force convergence assertFalse(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED)); -- cgit v1.2.3