diff options
3 files changed, 17 insertions, 6 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java index d582937cb0b..149dba41c1e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java @@ -56,6 +56,7 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -124,6 +125,9 @@ public class CuratorDb { // For each job id (path), store the ZK node version and its deserialised data - update when version changes. private final Map<Path, Pair<Integer, NavigableMap<RunId, Run>>> cachedHistoricRuns = new ConcurrentHashMap<>(); + // Store the ZK node version and its deserialised data - update when version changes. + private final AtomicReference<Pair<Integer, VersionStatus>> cachedVersionStatus = new AtomicReference<>(); + @Inject public CuratorDb(Curator curator) { this(curator, defaultTryLockTimeout); @@ -283,7 +287,13 @@ public class CuratorDb { } public VersionStatus readVersionStatus() { - return readSlime(versionStatusPath()).map(versionStatusSerializer::fromSlime).orElseGet(VersionStatus::empty); + Path path = versionStatusPath(); + return curator.getStat(path) + .map(stat -> cachedVersionStatus.updateAndGet(old -> + old != null && old.getFirst() == stat.getVersion() + ? old + : new Pair<>(stat.getVersion(), read(path, bytes -> versionStatusSerializer.fromSlime(SlimeUtils.jsonToSlime(bytes))).get())).getSecond()) + .orElseGet(VersionStatus::empty); } public void writeConfidenceOverrides(Map<Version, VespaVersion.Confidence> overrides) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java index eaa178c9727..c0f0b67926a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java @@ -379,9 +379,9 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer @Override public PreparedApplication deploy(DeploymentData deployment) { - ApplicationPackage appPackage; + byte[] appPackage; try (InputStream in = deployment.applicationPackage()) { - appPackage = new ApplicationPackage(in.readAllBytes()); + appPackage = in.readAllBytes(); } catch (IOException e) { throw new UncheckedIOException(e); @@ -562,9 +562,9 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer private final ApplicationId id; private final Version version; private boolean activated; - private final ApplicationPackage applicationPackage; + private final byte[] applicationPackage; - private Application(ApplicationId id, Version version, ApplicationPackage applicationPackage) { + private Application(ApplicationId id, Version version, byte[] applicationPackage) { this.id = id; this.version = version; this.applicationPackage = applicationPackage; @@ -583,7 +583,7 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer } public ApplicationPackage applicationPackage() { - return applicationPackage; + return new ApplicationPackage(applicationPackage); } private void activate() { diff --git a/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java b/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java index 4575ab4e8c1..761ef16c578 100644 --- a/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java +++ b/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java @@ -17,6 +17,7 @@ class DomainNameTest { DomainName.of("123"); DomainName.of("foo."); + assertThrows(IllegalArgumentException.class, () -> DomainName.of("")); assertThrows(IllegalArgumentException.class, () -> DomainName.of("_")); assertThrows(IllegalArgumentException.class, () -> DomainName.of("-")); assertThrows(IllegalArgumentException.class, () -> DomainName.of(".")); |