From e53c65a6024f90ab1075aaf6c40cd6c14ca9f25c Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Fri, 19 Mar 2021 14:15:31 +0100 Subject: No need for warmup for admin and content nodes --- .../configserver/noderepository/NodeMembership.java | 11 +++++------ .../hosted/node/admin/nodeagent/NodeAgentImpl.java | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 11 deletions(-) (limited to 'node-admin') diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeMembership.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeMembership.java index 93541b03537..3b608b203e9 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeMembership.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeMembership.java @@ -1,4 +1,4 @@ -// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. 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; import java.util.Objects; @@ -33,9 +33,7 @@ public class NodeMembership { return group; } - public int index() { - return index; - } + public int index() { return index; } public boolean isRetired() { return retired; @@ -85,8 +83,9 @@ public class NodeMembership { } public boolean isAdmin() { return "admin".equals(type); } - public boolean isContent() { return "content".equals(type) || "combined".equals(type); } - public boolean isContainer() { return "container".equals(type) || "combined".equals(type); } + public boolean isContent() { return "content".equals(type) || isCombined(); } + public boolean isCombined() { return "combined".equals(type); } + public boolean isContainer() { return "container".equals(type) || isCombined(); } public String value() { return type; 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 8f9e3a46613..2d9b61b6ceb 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 @@ -15,6 +15,7 @@ import com.yahoo.vespa.hosted.dockerapi.RegistryCredentials; import com.yahoo.vespa.hosted.dockerapi.exception.ContainerNotFoundException; import com.yahoo.vespa.hosted.dockerapi.exception.DockerException; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeMembership; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; @@ -217,7 +218,7 @@ public class NodeAgentImpl implements NodeAgent { private Container startContainer(NodeAgentContext context) { ContainerData containerData = createContainerData(context); - ContainerResources wantedResources = context.nodeType() != NodeType.tenant || warmUpDuration(context.zone()).isNegative() ? + ContainerResources wantedResources = warmUpDuration(context).isNegative() ? getContainerResources(context) : getContainerResources(context).withUnlimitedCpus(); containerOperations.createContainer(context, containerData, wantedResources); containerOperations.startContainer(context); @@ -363,7 +364,7 @@ public class NodeAgentImpl implements NodeAgent { ContainerResources wantedContainerResources = getContainerResources(context); if (healthChecker.isPresent() && firstSuccessfulHealthCheckInstant - .map(clock.instant().minus(warmUpDuration(context.zone()))::isBefore) + .map(clock.instant().minus(warmUpDuration(context))::isBefore) .orElse(true)) return existingContainer; @@ -478,7 +479,7 @@ public class NodeAgentImpl implements NodeAgent { if (firstSuccessfulHealthCheckInstant.isEmpty()) firstSuccessfulHealthCheckInstant = Optional.of(clock.instant()); - Duration timeLeft = Duration.between(clock.instant(), firstSuccessfulHealthCheckInstant.get().plus(warmUpDuration(context.zone()))); + Duration timeLeft = Duration.between(clock.instant(), firstSuccessfulHealthCheckInstant.get().plus(warmUpDuration(context))); if (!container.get().resources.equalsCpu(getContainerResources(context))) throw new ConvergenceException("Refusing to resume until warm up period ends (" + (timeLeft.isNegative() ? "next tick" : "in " + timeLeft) + ")"); @@ -611,9 +612,17 @@ public class NodeAgentImpl implements NodeAgent { return credentialsMaintainers; } - private Duration warmUpDuration(ZoneApi zone) { - return zone.getSystemName().isCd() || zone.getEnvironment().isTest() + private Duration warmUpDuration(NodeAgentContext context) { + ZoneApi zone = context.zone(); + Optional membership = context.node().membership(); + return zone.getSystemName().isCd() + || zone.getEnvironment().isTest() + || (context.nodeType() != NodeType.tenant) + || membership.map(mem -> ! (mem.type().isContainer() || + mem.type().isCombined())) + .orElse(false) ? Duration.ofSeconds(-1) : warmUpDuration; } + } -- cgit v1.2.3