diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-05-13 13:55:26 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-05-13 14:32:02 +0200 |
commit | 4561152fdf4fcc97f2c239ee90b7f5e74a9bcc59 (patch) | |
tree | 80bf121fe03f9c1b5da09dc5641d4ad61073f12e /configserver | |
parent | 2e0762cfcd363373d5f1bceeec22b2557aa94cf5 (diff) |
Test old behaviour
Diffstat (limited to 'configserver')
4 files changed, 21 insertions, 20 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java index e5d4cf9b1ff..ea84dee9fe7 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java @@ -80,7 +80,7 @@ public final class PrepareParams { private ApplicationId applicationId = ApplicationId.defaultId(); private TimeoutBudget timeoutBudget = new TimeoutBudget(Clock.systemUTC(), Duration.ofSeconds(30)); private Optional<Version> vespaVersion = Optional.empty(); - private List<ContainerEndpoint> containerEndpoints = List.of(); + private List<ContainerEndpoint> containerEndpoints = null; private Optional<String> tlsSecretsKeyName = Optional.empty(); private Optional<EndpointCertificateMetadata> endpointCertificateMetadata = Optional.empty(); private Optional<DockerImage> dockerImageRepository = Optional.empty(); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java index cfacabb8cc9..60017e75360 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java @@ -2,7 +2,6 @@ package com.yahoo.vespa.config.server.session; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.component.Version; @@ -14,9 +13,9 @@ import com.yahoo.config.application.api.FileRegistry; import com.yahoo.config.model.api.ConfigDefinitionRepo; import com.yahoo.config.model.api.ContainerEndpoint; import com.yahoo.config.model.api.EndpointCertificateMetadata; +import com.yahoo.config.model.api.EndpointCertificateSecrets; import com.yahoo.config.model.api.FileDistribution; import com.yahoo.config.model.api.ModelContext; -import com.yahoo.config.model.api.EndpointCertificateSecrets; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.AthenzDomain; @@ -25,8 +24,6 @@ import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.secretstore.SecretStore; import com.yahoo.lang.SettableOptional; - -import java.util.logging.Level; import com.yahoo.path.Path; import com.yahoo.vespa.config.server.ConfigServerSpec; import com.yahoo.vespa.config.server.application.ApplicationSet; @@ -58,6 +55,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -156,8 +154,8 @@ public class SessionPreparer { /** The version of Vespa the application to be prepared specifies for its nodes */ final Version vespaVersion; - final ContainerEndpointsCache containerEndpoints; - final Set<ContainerEndpoint> endpointsSet; + final ContainerEndpointsCache containerEndpointsCache; + final List<ContainerEndpoint> containerEndpoints; final ModelContext.Properties properties; private final EndpointCertificateMetadataStore endpointCertificateMetadataStore; private final EndpointCertificateRetriever endpointCertificateRetriever; @@ -182,7 +180,7 @@ public class SessionPreparer { this.applicationId = params.getApplicationId(); this.dockerImageRepository = params.dockerImageRepository(); this.vespaVersion = params.vespaVersion().orElse(Vtag.currentVersion); - this.containerEndpoints = new ContainerEndpointsCache(tenantPath, curator); + this.containerEndpointsCache = new ContainerEndpointsCache(tenantPath, curator); this.endpointCertificateMetadataStore = new EndpointCertificateMetadataStore(curator, tenantPath); this.endpointCertificateRetriever = new EndpointCertificateRetriever(secretStore); this.endpointCertificateMetadata = params.endpointCertificateMetadata() @@ -190,7 +188,7 @@ public class SessionPreparer { endpointCertificateSecrets = endpointCertificateMetadata .or(() -> endpointCertificateMetadataStore.readEndpointCertificateMetadata(applicationId)) .flatMap(endpointCertificateRetriever::readEndpointCertificateSecrets); - this.endpointsSet = getEndpoints(params.containerEndpoints()); + this.containerEndpoints = getEndpoints(params.containerEndpoints()); this.athenzDomain = params.athenzDomain(); this.properties = new ModelContextImpl.Properties(params.getApplicationId(), configserverConfig.multitenant(), @@ -200,7 +198,7 @@ public class SessionPreparer { configserverConfig.athenzDnsSuffix(), configserverConfig.hostedVespa(), zone, - endpointsSet, + Set.copyOf(containerEndpoints), params.isBootstrap(), currentActiveApplicationSet.isEmpty(), context.getFlagSource(), @@ -282,8 +280,8 @@ public class SessionPreparer { } void writeContainerEndpointsZK() { - if (!params.containerEndpoints().isEmpty()) { // Use endpoints from parameter when explicitly given - containerEndpoints.write(applicationId, params.containerEndpoints()); + if (!containerEndpoints.isEmpty()) { + containerEndpointsCache.write(applicationId, containerEndpoints); } checkTimeout("write container endpoints to zookeeper"); } @@ -298,11 +296,11 @@ public class SessionPreparer { return prepareResult.getConfigChangeActions(); } - private Set<ContainerEndpoint> getEndpoints(List<ContainerEndpoint> endpoints) { + private List<ContainerEndpoint> getEndpoints(List<ContainerEndpoint> endpoints) { if (endpoints == null || endpoints.isEmpty()) { - endpoints = this.containerEndpoints.read(applicationId); + endpoints = this.containerEndpointsCache.read(applicationId); } - return ImmutableSet.copyOf(endpoints); + return List.copyOf(endpoints); } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/ContainerEndpointsCache.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/ContainerEndpointsCache.java index 97179e5234b..0d277eeb1d1 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/ContainerEndpointsCache.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/ContainerEndpointsCache.java @@ -41,10 +41,7 @@ public class ContainerEndpointsCache { } public void write(ApplicationId applicationId, List<ContainerEndpoint> endpoints) { - if (endpoints.isEmpty()) return; - var slime = ContainerEndpointSerializer.endpointListToSlime(endpoints); - try { var bytes = SlimeUtils.toJsonBytes(slime); curator.set(containerEndpointsPath(applicationId), bytes); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java index 9cf8ee73033..ca0f7a8d488 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java @@ -20,7 +20,6 @@ import com.yahoo.config.provision.Provisioner; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.exception.LoadBalancerServiceException; import com.yahoo.io.IOUtils; -import java.util.logging.Level; import com.yahoo.path.Path; import com.yahoo.security.KeyAlgorithm; import com.yahoo.security.KeyUtils; @@ -66,6 +65,7 @@ import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.logging.Level; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; @@ -234,10 +234,16 @@ public class SessionPreparerTest { var containerEndpointsFromModel = modelContext.properties().endpoints(); assertEquals(Set.copyOf(expected), containerEndpointsFromModel); - // Writing empty container endpoints keeps old value + // Preparing with null container endpoints keeps old value. This is what happens when deployments happen from + // an existing session (e.g. internal redeployment). params = new PrepareParams.Builder().applicationId(applicationId).build(); prepare(new File("src/test/resources/deploy/hosted-app"), params); assertEquals(expected, readContainerEndpoints(applicationId)); + + // Preparing with empty container endpoints keeps old value + params = new PrepareParams.Builder().applicationId(applicationId).containerEndpoints("[]").build(); + prepare(new File("src/test/resources/deploy/hosted-app"), params); + assertEquals(expected, readContainerEndpoints(applicationId)); } @Test |