aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-05-13 13:55:26 +0200
committerMartin Polden <mpolden@mpolden.no>2020-05-13 14:32:02 +0200
commit4561152fdf4fcc97f2c239ee90b7f5e74a9bcc59 (patch)
tree80bf121fe03f9c1b5da09dc5641d4ad61073f12e /configserver
parent2e0762cfcd363373d5f1bceeec22b2557aa94cf5 (diff)
Test old behaviour
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java26
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/ContainerEndpointsCache.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java10
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