summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-11-25 14:29:23 +0100
committerGitHub <noreply@github.com>2022-11-25 14:29:23 +0100
commitaa8d7950f9c1c52b4121ad1fc10b742c5d0ebb61 (patch)
treeccf8f69897d8adf8a1f3e5a0917eaf57b397b12b
parentd8bd9fdf82cdf63ab00a1b4ff6e7e88fa38fb450 (diff)
parenteef14e9c97c6c5e0c22ea39e36166f5cb3a74e87 (diff)
Merge pull request #24996 from vespa-engine/jonmv/faster-unit-tests
Faster controller-server unit tests
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java12
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java10
-rw-r--r--vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java1
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("."));