diff options
4 files changed, 20 insertions, 11 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index 799e0bd62e8..aeb6c030a49 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -166,7 +166,7 @@ public abstract class ContainerCluster<CONTAINER extends Container> private String hostClusterId = null; private String jvmGCOptions = null; - private boolean deferChangesUntilRestart = false; + private volatile boolean deferChangesUntilRestart = false; private boolean clientsLegacyMode; private List<Client> clients = List.of(); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 2102a5a04b5..64e5f80d72c 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -792,10 +792,7 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye Optional<Version> vespaVersion) { ServiceListResponse response = convergeChecker.checkConvergenceForAllServices(getApplication(applicationId, vespaVersion), timeoutPerService); if (response.converged && ! getPendingRestarts(applicationId).isEmpty()) - return new ServiceListResponse(response.services.stream().collect(toMap(service -> service.serviceInfo, - service -> service.currentGeneration)), - response.wantedGeneration, - response.currentGeneration); + response = response.unconverged(); return response; } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabase.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabase.java index b2dbea569b6..0493a8b3c37 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabase.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabase.java @@ -200,9 +200,11 @@ public class ApplicationCuratorDatabase { } public PendingRestarts readPendingRestarts(ApplicationId id) { - return curator.getData(pendingRestartsPath(id)) - .map(PendingRestartsSerializer::fromBytes) - .orElse(PendingRestarts.empty()); + try (Lock lock = curator.lock(restartsLockPath(id), Duration.ofMinutes(1))) { + return curator.getData(pendingRestartsPath(id)) + .map(PendingRestartsSerializer::fromBytes) + .orElse(PendingRestarts.empty()); + } } public void modifyPendingRestarts(ApplicationId id, UnaryOperator<PendingRestarts> modification) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java index 8b83055e1d0..c03cb7ade8c 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java @@ -360,11 +360,21 @@ public class ConfigConvergenceChecker extends AbstractComponent { public final long currentGeneration; public final boolean converged; - public ServiceListResponse(Map<ServiceInfo, Long> services, long wantedGeneration, long currentGeneration) { - services.forEach((key, value) -> this.services.add(new Service(key, value))); + private ServiceListResponse(List<Service> services, long wantedGeneration, long currentGeneration, boolean converged) { + this.services.addAll(services); this.wantedGeneration = wantedGeneration; this.currentGeneration = currentGeneration; - this.converged = currentGeneration >= wantedGeneration; + this.converged = converged; + } + public ServiceListResponse(Map<ServiceInfo, Long> services, long wantedGeneration, long currentGeneration) { + this(services.entrySet().stream().map(entry -> new Service(entry.getKey(), entry.getValue())).toList(), + wantedGeneration, + currentGeneration, + currentGeneration >= wantedGeneration); + } + + public ServiceListResponse unconverged() { + return new ServiceListResponse(services, wantedGeneration, currentGeneration, false); } public List<Service> services() { return services; } |