diff options
author | Harald Musum <musum@yahoo-inc.com> | 2017-05-22 12:46:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-22 12:46:25 +0200 |
commit | 885e83247645e05abfa38e18ca76601541cc50d9 (patch) | |
tree | 177d95556759faec42d540b8f033806defa73efa /node-admin | |
parent | 327c64b72bd9b07b3ef539212260433d83e40888 (diff) | |
parent | 44d2e14dac881ec5ec49fa8b037154f035163013 (diff) |
Merge pull request #2516 from yahoo/freva/set-vespa-version-from-wanted-vespa-version
Set vespaVersion in node-repo to be the same as wantedVespaVersion
Diffstat (limited to 'node-admin')
8 files changed, 86 insertions, 90 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java index 5ad60475276..d30b674872c 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/ContainerNodeSpec.java @@ -17,6 +17,7 @@ public class ContainerNodeSpec { public final Node.State nodeState; public final String nodeType; public final String nodeFlavor; + public final Optional<String> wantedVespaVersion; public final Optional<String> vespaVersion; public final Optional<Owner> owner; public final Optional<Membership> membership; @@ -34,6 +35,7 @@ public class ContainerNodeSpec { final Node.State nodeState, final String nodeType, final String nodeFlavor, + final Optional<String> wantedVespaVersion, final Optional<String> vespaVersion, final Optional<Owner> owner, final Optional<Membership> membership, @@ -54,6 +56,7 @@ public class ContainerNodeSpec { this.nodeState = nodeState; this.nodeType = nodeType; this.nodeFlavor = nodeFlavor; + this.wantedVespaVersion = wantedVespaVersion; this.vespaVersion = vespaVersion; this.owner = owner; this.membership = membership; @@ -78,6 +81,7 @@ public class ContainerNodeSpec { Objects.equals(nodeState, that.nodeState) && Objects.equals(nodeType, that.nodeType) && Objects.equals(nodeFlavor, that.nodeFlavor) && + Objects.equals(wantedVespaVersion, that.wantedVespaVersion) && Objects.equals(vespaVersion, that.vespaVersion) && Objects.equals(owner, that.owner) && Objects.equals(membership, that.membership) && @@ -98,6 +102,7 @@ public class ContainerNodeSpec { nodeState, nodeType, nodeFlavor, + wantedVespaVersion, vespaVersion, owner, membership, @@ -118,6 +123,7 @@ public class ContainerNodeSpec { + " nodeState=" + nodeState + " nodeType = " + nodeType + " nodeFlavor = " + nodeFlavor + + " wantedVespaVersion = " + wantedVespaVersion + " vespaVersion = " + vespaVersion + " owner = " + owner + " membership = " + membership @@ -230,6 +236,7 @@ public class ContainerNodeSpec { private Node.State nodeState; private String nodeType; private String nodeFlavor; + private Optional<String> wantedVespaVersion = Optional.empty(); private Optional<String> vespaVersion = Optional.empty(); private Optional<Owner> owner = Optional.empty(); private Optional<Membership> membership = Optional.empty(); @@ -250,6 +257,7 @@ public class ContainerNodeSpec { nodeFlavor(nodeSpec.nodeFlavor); nodeSpec.wantedDockerImage.ifPresent(this::wantedDockerImage); + nodeSpec.wantedVespaVersion.ifPresent(this::wantedVespaVersion); nodeSpec.vespaVersion.ifPresent(this::vespaVersion); nodeSpec.owner.ifPresent(this::owner); nodeSpec.membership.ifPresent(this::membership); @@ -286,6 +294,11 @@ public class ContainerNodeSpec { return this; } + public Builder wantedVespaVersion(String wantedVespaVersion) { + this.wantedVespaVersion = Optional.of(wantedVespaVersion); + return this; + } + public Builder vespaVersion(String vespaVersion) { this.vespaVersion = Optional.of(vespaVersion); return this; @@ -338,7 +351,7 @@ public class ContainerNodeSpec { public ContainerNodeSpec build() { return new ContainerNodeSpec(hostname, wantedDockerImage, nodeState, nodeType, nodeFlavor, - vespaVersion, owner, membership, + wantedVespaVersion, vespaVersion, owner, membership, wantedRestartGeneration, currentRestartGeneration, wantedRebootGeneration, currentRebootGeneration, minCpuCores, minMainMemoryAvailableGb, minDiskAvailableGb); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java index aa7285ec17c..c8fff58badc 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java @@ -12,7 +12,6 @@ import java.util.List; import java.util.Optional; public interface DockerOperations { - Optional<String> getVespaVersion(ContainerName containerName); void startContainer(ContainerName containerName, ContainerNodeSpec nodeSpec); 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 e23876411c2..49113ec99b3 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 @@ -36,7 +36,6 @@ import static com.yahoo.vespa.defaults.Defaults.getDefaults; */ public class DockerOperationsImpl implements DockerOperations { public static final String NODE_PROGRAM = Defaults.getDefaults().underVespaHome("bin/vespa-nodectl"); - private static final String[] GET_VESPA_VERSION_COMMAND = new String[]{NODE_PROGRAM, "vespa-version"}; private static final String[] RESUME_NODE_COMMAND = new String[]{NODE_PROGRAM, "resume"}; private static final String[] SUSPEND_NODE_COMMAND = new String[]{NODE_PROGRAM, "suspend"}; @@ -93,26 +92,6 @@ public class DockerOperationsImpl implements DockerOperations { this.environment = environment; } - @Override - public Optional<String> getVespaVersion(ContainerName containerName) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); - - ProcessResult result = docker.executeInContainer(containerName, DockerOperationsImpl.GET_VESPA_VERSION_COMMAND); - if (!result.isSuccess()) { - logger.warning("Container " + containerName.asString() + ": Command " - + Arrays.toString(DockerOperationsImpl.GET_VESPA_VERSION_COMMAND) + " failed: " + result); - return Optional.empty(); - } - Optional<String> vespaVersion = parseVespaVersion(result.getOutput()); - if (vespaVersion.isPresent()) { - return vespaVersion; - } else { - logger.warning("Container " + containerName.asString() + ": Failed to parse vespa version from " - + result.getOutput()); - return Optional.empty(); - } - } - // Returns empty if vespa version cannot be parsed. static Optional<String> parseVespaVersion(final String rawVespaVersion) { if (rawVespaVersion == null) return Optional.empty(); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java index 972cf9d56f7..0b11696ef99 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java @@ -15,13 +15,17 @@ import com.yahoo.vespa.hosted.dockerapi.metrics.CounterWrapper; import com.yahoo.vespa.hosted.dockerapi.metrics.Dimensions; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.logging.FilebeatConfigProvider; +import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl; import com.yahoo.vespa.hosted.node.admin.util.Environment; import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger; +import com.yahoo.vespa.hosted.node.admin.util.SecretAgentScheduleMaker; import java.io.IOException; import java.io.InputStreamReader; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.time.Duration; import java.time.Instant; import java.util.ArrayList; @@ -64,6 +68,56 @@ public class StorageMaintainer { numberOfNodeAdminMaintenanceFails = metricReceiver.declareCounter(MetricReceiverWrapper.APPLICATION_DOCKER, dimensions, "nodes.maintenance.fails"); } + public void writeMetricsConfig(ContainerName containerName, ContainerNodeSpec nodeSpec) { + final Path yamasAgentFolder = environment.pathInNodeAdminFromPathInNode(containerName, "/etc/yamas-agent/"); + + Path vespaCheckPath = Paths.get(getDefaults().underVespaHome("libexec/yms/yms_check_vespa")); + SecretAgentScheduleMaker scheduleMaker = new SecretAgentScheduleMaker("vespa", 60, vespaCheckPath, "all") + .withTag("namespace", "Vespa") + .withTag("role", "tenants") + .withTag("flavor", nodeSpec.nodeFlavor) + .withTag("state", nodeSpec.nodeState.toString()) + .withTag("zone", environment.getZone()) + .withTag("parentHostname", environment.getParentHostHostname()); + + nodeSpec.owner.ifPresent(owner -> + scheduleMaker + .withTag("tenantName", owner.tenant) + .withTag("app", owner.application + "." + owner.instance)); + + nodeSpec.membership.ifPresent(membership -> + scheduleMaker + .withTag("clustertype", membership.clusterType) + .withTag("clusterid", membership.clusterId)); + + nodeSpec.vespaVersion.ifPresent(version -> scheduleMaker.withTag("vespaVersion", version)); + + try { + scheduleMaker.writeTo(yamasAgentFolder); + final String[] restartYamasAgent = new String[]{"service", "yamas-agent", "restart"}; + docker.executeInContainerAsRoot(containerName, restartYamasAgent); + } catch (IOException e) { + throw new RuntimeException("Failed to write secret-agent schedules for " + containerName, e); + } + } + + public void writeFilebeatConfig(ContainerName containerName, ContainerNodeSpec nodeSpec) { + PrefixLogger logger = PrefixLogger.getNodeAgentLogger(StorageMaintainer.class, containerName); + try { + FilebeatConfigProvider filebeatConfigProvider = new FilebeatConfigProvider(environment); + Optional<String> config = filebeatConfigProvider.getConfig(nodeSpec); + if (!config.isPresent()) { + logger.error("Was not able to generate a config for filebeat, ignoring filebeat file creation." + nodeSpec.toString()); + return; + } + Path filebeatPath = environment.pathInNodeAdminFromPathInNode(containerName, "/etc/filebeat/filebeat.yml"); + Files.write(filebeatPath, config.get().getBytes()); + logger.info("Wrote filebeat config."); + } catch (Throwable t) { + logger.error("Failed writing filebeat config; " + nodeSpec, t); + } + } + public Optional<Long> updateIfNeededAndGetDiskMetricsFor(ContainerName containerName) { // Calculating disk usage is IO expensive operation and its value changes relatively slowly, we want to perform // that calculation rarely. Additionally, we spread out the calculation for different containers by adding 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 8e290725fcb..d8ee3550272 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 @@ -10,7 +10,6 @@ import com.yahoo.vespa.hosted.dockerapi.metrics.Dimensions; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; -import com.yahoo.vespa.hosted.node.admin.logging.FilebeatConfigProvider; import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer; import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer; import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository; @@ -18,13 +17,8 @@ import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorException; import com.yahoo.vespa.hosted.node.admin.util.Environment; import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger; -import com.yahoo.vespa.hosted.node.admin.util.SecretAgentScheduleMaker; import com.yahoo.vespa.hosted.provision.Node; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.time.Clock; import java.time.Duration; @@ -36,7 +30,6 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; -import static com.yahoo.vespa.defaults.Defaults.getDefaults; import static com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl.ContainerState.ABSENT; import static com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl.ContainerState.RUNNING; import static com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl.ContainerState.RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN; @@ -88,7 +81,6 @@ public class NodeAgentImpl implements NodeAgent { private NodeAttributes lastAttributesSet = null; private ContainerNodeSpec lastNodeSpec = null; private CpuUsageReporter lastCpuMetric; - private Optional<String> vespaVersion = Optional.empty(); public NodeAgentImpl( final String hostName, @@ -118,7 +110,6 @@ public class NodeAgentImpl implements NodeAgent { dockerOperations.getContainer(containerName) .ifPresent(container -> { if (container.state.isRunning()) { - vespaVersion = dockerOperations.getVespaVersion(container.name); lastCpuMetric = new CpuUsageReporter(container.created); } containerState = RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN; @@ -197,27 +188,10 @@ public class NodeAgentImpl implements NodeAgent { } } - private void experimentalWriteFile(final ContainerNodeSpec nodeSpec) { - try { - FilebeatConfigProvider filebeatConfigProvider = new FilebeatConfigProvider(environment); - Optional<String> config = filebeatConfigProvider.getConfig(nodeSpec); - if (!config.isPresent()) { - logger.error("Was not able to generate a config for filebeat, ignoring filebeat file creation." + nodeSpec.toString()); - return; - } - Path filebeatPath = environment.pathInNodeAdminFromPathInNode(containerName, "/etc/filebeat/filebeat.yml"); - Files.write(filebeatPath, config.get().getBytes()); - logger.info("Wrote filebeat config."); - } catch (Throwable t) { - logger.error("Failed writing filebeat config; " + nodeSpec, t); - } - } - private void runLocalResumeScriptIfNeeded(final ContainerNodeSpec nodeSpec) { if (containerState != RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN) { return; } - experimentalWriteFile(nodeSpec); addDebugMessage("Starting optional node program resume command"); dockerOperations.resumeNode(containerName); @@ -243,7 +217,7 @@ public class NodeAgentImpl implements NodeAgent { // want the two to be equal in node repo .withRebootGeneration(nodeSpec.wantedRebootGeneration.orElse(0L)) .withDockerImage(nodeSpec.wantedDockerImage.orElse(new DockerImage(""))) - .withVespaVersion(vespaVersion.orElse("")); + .withVespaVersion(nodeSpec.wantedVespaVersion.orElse("")); publishStateToNodeRepoIfChanged(nodeAttributes); } @@ -264,11 +238,8 @@ public class NodeAgentImpl implements NodeAgent { if (!getContainer().isPresent()) { aclMaintainer.ifPresent(AclMaintainer::run); dockerOperations.startContainer(containerName, nodeSpec); - metricReceiver.unsetMetricsForContainer(hostname); lastCpuMetric = new CpuUsageReporter(clock.instant()); - vespaVersion = dockerOperations.getVespaVersion(containerName); - configureContainerMetrics(nodeSpec); addDebugMessage("startContainerIfNeeded: containerState " + containerState + " -> " + RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN); containerState = RUNNING_HOWEVER_RESUME_SCRIPT_NOT_RUN; @@ -347,7 +318,6 @@ public class NodeAgentImpl implements NodeAgent { logger.info("Failed stopping services, ignoring", e); } } - vespaVersion = Optional.empty(); dockerOperations.removeContainer(existingContainer.get()); metricReceiver.unsetMetricsForContainer(hostname); containerState = ABSENT; @@ -437,6 +407,10 @@ public class NodeAgentImpl implements NodeAgent { // Every time the node spec changes, we should clear the metrics for this container as the dimensions // will change and we will be reporting duplicate metrics. metricReceiver.unsetMetricsForContainer(hostname); + storageMaintainer.ifPresent(maintainer -> { + maintainer.writeMetricsConfig(containerName, nodeSpec); + maintainer.writeFilebeatConfig(containerName, nodeSpec); + }); } switch (nodeSpec.nodeState) { @@ -507,7 +481,7 @@ public class NodeAgentImpl implements NodeAgent { .add("state", nodeSpec.nodeState.toString()) .add("zone", environment.getZone()) .add("parentHostname", environment.getParentHostHostname()); - vespaVersion.ifPresent(version -> dimensionsBuilder.add("vespaVersion", version)); + nodeSpec.vespaVersion.ifPresent(version -> dimensionsBuilder.add("vespaVersion", version)); nodeSpec.owner.ifPresent(owner -> dimensionsBuilder @@ -648,40 +622,6 @@ public class NodeAgentImpl implements NodeAgent { return temp; } - private void configureContainerMetrics(ContainerNodeSpec nodeSpec) { - if (!storageMaintainer.isPresent()) return; - final Path yamasAgentFolder = environment.pathInNodeAdminFromPathInNode(containerName, "/etc/yamas-agent/"); - - Path vespaCheckPath = Paths.get(getDefaults().underVespaHome("libexec/yms/yms_check_vespa")); - SecretAgentScheduleMaker scheduleMaker = new SecretAgentScheduleMaker("vespa", 60, vespaCheckPath, "all") - .withTag("namespace", "Vespa") - .withTag("role", "tenants") - .withTag("flavor", nodeSpec.nodeFlavor) - .withTag("state", nodeSpec.nodeState.toString()) - .withTag("zone", environment.getZone()) - .withTag("parentHostname", environment.getParentHostHostname()); - - nodeSpec.owner.ifPresent(owner -> - scheduleMaker - .withTag("tenantName", owner.tenant) - .withTag("app", owner.application + "." + owner.instance)); - - nodeSpec.membership.ifPresent(membership -> - scheduleMaker - .withTag("clustertype", membership.clusterType) - .withTag("clusterid", membership.clusterId)); - - vespaVersion.ifPresent(version -> scheduleMaker.withTag("vespaVersion", version)); - - try { - scheduleMaker.writeTo(yamasAgentFolder); - final String[] restartYamasAgent = new String[]{"service", "yamas-agent", "restart"}; - dockerOperations.executeCommandInContainerAsRoot(containerName, restartYamasAgent); - } catch (IOException e) { - throw new RuntimeException("Failed to write secret-agent schedules for " + containerName, e); - } - } - class CpuUsageReporter { private long totalContainerUsage = 0; private long totalSystemUsage = 0; diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java index c3755fc8d5b..b03c07717c4 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java @@ -101,6 +101,7 @@ public class NodeRepositoryImpl implements NodeRepository { Objects.requireNonNull(node.nodeState, "Unknown node state"); Node.State nodeState = Node.State.valueOf(node.nodeState); if (nodeState == Node.State.active) { + Objects.requireNonNull(node.wantedVespaVersion, "Unknown vespa version for active node"); Objects.requireNonNull(node.wantedDockerImage, "Unknown docker image for active node"); Objects.requireNonNull(node.wantedRestartGeneration, "Unknown wantedRestartGeneration for active node"); Objects.requireNonNull(node.currentRestartGeneration, "Unknown currentRestartGeneration for active node"); @@ -125,6 +126,7 @@ public class NodeRepositoryImpl implements NodeRepository { nodeState, node.nodeType, node.nodeFlavor, + Optional.ofNullable(node.wantedVespaVersion), Optional.ofNullable(node.vespaVersion), Optional.ofNullable(owner), Optional.ofNullable(membership), diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/GetNodesResponse.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/GetNodesResponse.java index a63f6f10532..d8d416b9150 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/GetNodesResponse.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/bindings/GetNodesResponse.java @@ -31,6 +31,7 @@ public class GetNodesResponse { public final String nodeState; public final String nodeType; public final String nodeFlavor; + public final String wantedVespaVersion; public final String vespaVersion; public final Owner owner; public final Membership membership; @@ -49,6 +50,7 @@ public class GetNodesResponse { @JsonProperty("state") String nodeState, @JsonProperty("type") String nodeType, @JsonProperty("flavor") String nodeFlavor, + @JsonProperty("wantedVespaVersion") String wantedVespaVersion, @JsonProperty("vespaVersion") String vespaVersion, @JsonProperty("owner") Owner owner, @JsonProperty("membership") Membership membership, @@ -65,6 +67,7 @@ public class GetNodesResponse { this.nodeState = nodeState; this.nodeType = nodeType; this.nodeFlavor = nodeFlavor; + this.wantedVespaVersion = wantedVespaVersion; this.vespaVersion = vespaVersion; this.owner = owner; this.membership = membership; @@ -85,6 +88,7 @@ public class GetNodesResponse { + " nodeState = " + nodeState + " nodeType = " + nodeType + " nodeFlavor = " + nodeFlavor + + " wantedVespaVersion = " + wantedVespaVersion + " vespaVersion = " + vespaVersion + " owner = " + owner + " membership = " + membership 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 f74f4e0af78..12479db8ba3 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 @@ -94,6 +94,7 @@ public class NodeAgentImplTest { final ContainerNodeSpec nodeSpec = nodeSpecBuilder .wantedDockerImage(dockerImage) .nodeState(Node.State.active) + .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .wantedRestartGeneration(restartGeneration) .currentRestartGeneration(restartGeneration) @@ -131,6 +132,7 @@ public class NodeAgentImplTest { final ContainerNodeSpec nodeSpec = nodeSpecBuilder .wantedDockerImage(dockerImage) .nodeState(Node.State.active) + .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .wantedRestartGeneration(restartGeneration) .currentRestartGeneration(restartGeneration) @@ -224,6 +226,7 @@ public class NodeAgentImplTest { final ContainerNodeSpec nodeSpec = nodeSpecBuilder .wantedDockerImage(dockerImage) .nodeState(Node.State.failed) + .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .wantedRestartGeneration(restartGeneration) .currentRestartGeneration(restartGeneration) @@ -285,6 +288,7 @@ public class NodeAgentImplTest { final ContainerNodeSpec nodeSpec = nodeSpecBuilder .wantedDockerImage(dockerImage) .nodeState(Node.State.inactive) + .wantedVespaVersion(vespaVersion) .vespaVersion(vespaVersion) .wantedRestartGeneration(restartGeneration) .currentRestartGeneration(restartGeneration) @@ -544,8 +548,9 @@ public class NodeAgentImplTest { Optional.empty(); when(dockerOperations.getContainerStats(any())).thenReturn(Optional.of(emptyContainerStats)); - when(dockerOperations.getVespaVersion(eq(containerName))).thenReturn(Optional.of(vespaVersion)); when(dockerOperations.getContainer(eq(containerName))).thenReturn(container); + doNothing().when(storageMaintainer).writeFilebeatConfig(any(), any()); + doNothing().when(storageMaintainer).writeMetricsConfig(any(), any()); return new NodeAgentImpl(hostName, nodeRepository, orchestrator, dockerOperations, Optional.of(storageMaintainer), metricReceiver, environment, clock, Optional.of(aclMaintainer)); |