summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/AdaptiveTimeoutHandler.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java12
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/SimpleTimeoutHandler.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/TimeoutHandler.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java36
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java21
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java29
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackage.java17
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntries.java1
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersion.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java8
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java9
-rw-r--r--controller-server/src/test/resources/test_runner_services.xml-cd1
-rw-r--r--controller-server/src/test/resources/test_runner_services_with_legacy_tests.xml-cd40
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/match_tools.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/query.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/global_filter.h1
-rw-r--r--searchsummary/src/vespa/juniper/query.h5
-rwxr-xr-xstorage/src/tests/pstack_testrunner20
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h2
24 files changed, 126 insertions, 113 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/AdaptiveTimeoutHandler.java b/container-search/src/main/java/com/yahoo/search/dispatch/AdaptiveTimeoutHandler.java
index e725a152f09..fbc179a10fa 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/AdaptiveTimeoutHandler.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/AdaptiveTimeoutHandler.java
@@ -35,7 +35,7 @@ class AdaptiveTimeoutHandler implements TimeoutHandler {
}
@Override
- public long nextTimeout(int answeredNodes) {
+ public long nextTimeoutMS(int answeredNodes) {
if (askedNodes == answeredNodes) return query.getTimeLeft(); // All nodes have responded - done
if (answeredNodes < minimumResponses) return query.getTimeLeft(); // Minimum responses have not been received yet
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java b/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java
index 6d4b321d861..877412d2e9b 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java
@@ -45,13 +45,13 @@ public class CoverageAggregator {
public int getAskedNodes() {
return askedNodes;
}
- public int getAnswerdNodes() {
+ public int getAnsweredNodes() {
return answeredNodes;
}
public boolean hasNoAnswers() { return answeredNodes == 0; }
public void setTimedOut() { timedOut = true; }
public void setFailedNodes(int failedNodes) {
- this.failedNodes += failedNodes;
+ this.failedNodes = failedNodes;
}
public Coverage createCoverage(TimeoutHandler timeoutHandler) {
@@ -68,7 +68,7 @@ public class CoverageAggregator {
coverage.setDegradedReason(degradedReason);
return coverage;
}
- public CoverageAggregator adjustDegradedCoverage(int searchableCopies, TimeoutHandler timeoutHandler) {
+ public CoverageAggregator adjustedDegradedCoverage(int searchableCopies, TimeoutHandler timeoutHandler) {
int askedAndFailed = askedNodes + failedNodes;
if (askedAndFailed == answeredNodesParticipated) {
return this;
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java b/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java
index 5dace0bbff8..dcf9b56aa33 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java
@@ -45,7 +45,7 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
private final CoverageAggregator coverageAggregator;
private Query query;
- TimeoutHandler timeoutHandler;
+ private TimeoutHandler timeoutHandler;
public InterleavedSearchInvoker(Timer timer, Collection<SearchInvoker> invokers,
SearchCluster searchCluster,
Group group,
@@ -61,7 +61,7 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
coverageAggregator = new CoverageAggregator(invokers.size());
}
- TimeoutHandler create(DispatchConfig config, int askedNodes, Query query) {
+ private TimeoutHandler createTimeoutHandler(DispatchConfig config, int askedNodes, Query query) {
return (config.minSearchCoverage() < 100.0D)
? new AdaptiveTimeoutHandler(timer, config, askedNodes, query)
: new SimpleTimeoutHandler(query);
@@ -94,7 +94,7 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
for (SearchInvoker invoker : invokers) {
context = invoker.sendSearchRequest(query, context);
}
- timeoutHandler = create(searchCluster.dispatchConfig(), invokers.size(), query);
+ timeoutHandler = createTimeoutHandler(searchCluster.dispatchConfig(), invokers.size(), query);
query.setHits(originalHits);
query.setOffset(originalOffset);
@@ -112,14 +112,14 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
SearchInvoker invoker = availableForProcessing.poll(nextTimeout, TimeUnit.MILLISECONDS);
if (invoker == null) {
log.fine(() -> "Search timed out with " + coverageAggregator.getAskedNodes() + " requests made, " +
- coverageAggregator.getAnswerdNodes() + " responses received");
+ coverageAggregator.getAnsweredNodes() + " responses received");
break;
} else {
InvokerResult toMerge = invoker.getSearchResult(execution);
merged = mergeResult(result.getResult(), toMerge, merged, groupingResultAggregator);
ejectInvoker(invoker);
}
- nextTimeout = timeoutHandler.nextTimeout(coverageAggregator.getAnswerdNodes());
+ nextTimeout = timeoutHandler.nextTimeoutMS(coverageAggregator.getAnsweredNodes());
}
} catch (InterruptedException e) {
throw new RuntimeException("Interrupted while waiting for search results", e);
@@ -127,7 +127,7 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
groupingResultAggregator.toAggregatedHit().ifPresent(h -> result.getResult().hits().add(h));
insertNetworkErrors(result.getResult());
- CoverageAggregator adjusted = coverageAggregator.adjustDegradedCoverage((int)searchCluster.dispatchConfig().searchableCopies(), timeoutHandler);
+ CoverageAggregator adjusted = coverageAggregator.adjustedDegradedCoverage((int)searchCluster.dispatchConfig().searchableCopies(), timeoutHandler);
result.getResult().setCoverage(adjusted.createCoverage(timeoutHandler));
int needed = query.getOffset() + query.getHits();
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/SimpleTimeoutHandler.java b/container-search/src/main/java/com/yahoo/search/dispatch/SimpleTimeoutHandler.java
index 8732cee7652..90b6bf87a0b 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/SimpleTimeoutHandler.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/SimpleTimeoutHandler.java
@@ -15,7 +15,7 @@ public class SimpleTimeoutHandler implements TimeoutHandler {
this.query = query;
}
@Override
- public long nextTimeout(int answeredNodes) {
+ public long nextTimeoutMS(int answeredNodes) {
return query.getTimeLeft();
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/TimeoutHandler.java b/container-search/src/main/java/com/yahoo/search/dispatch/TimeoutHandler.java
index 7c86b02d368..a8ac0d14ddc 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/TimeoutHandler.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/TimeoutHandler.java
@@ -1,11 +1,15 @@
package com.yahoo.search.dispatch;
/**
- * Computes next timeout
+ * Computes next timeout in milliseconds
*
* @author baldersheim
*/
public interface TimeoutHandler {
- long nextTimeout(int answeredNodes);
+ long nextTimeoutMS(int answeredNodes);
+
+ /**
+ * Return a bitmask from com.yahoo.container.handler.Coverage.DEGRADED.... set
+ */
int reason();
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java
index 8c6decd6158..2f9312b2f89 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java
@@ -10,22 +10,20 @@ import java.util.Objects;
*
* @author mpolden
*/
-public class Record implements Comparable<Record> {
+public record Record(Type type,
+ Duration ttl,
+ RecordName name,
+ RecordData data) implements Comparable<Record> {
private static final Comparator<Record> comparator = Comparator.comparing(Record::type)
.thenComparing(Record::name)
.thenComparing(Record::data);
- private final Type type;
- private final Duration ttl;
- private final RecordName name;
- private final RecordData data;
-
- public Record(Type type, Duration ttl, RecordName name, RecordData data) {
- this.type = Objects.requireNonNull(type, "type cannot be null");
- this.ttl = Objects.requireNonNull(ttl, "ttl cannot be null");
- this.name = Objects.requireNonNull(name, "name cannot be null");
- this.data = Objects.requireNonNull(data, "data cannot be null");
+ public Record {
+ Objects.requireNonNull(type, "type cannot be null");
+ Objects.requireNonNull(ttl, "ttl cannot be null");
+ Objects.requireNonNull(name, "name cannot be null");
+ Objects.requireNonNull(data, "data cannot be null");
}
public Record(Type type, RecordName name, RecordData data) {
@@ -74,22 +72,6 @@ public class Record implements Comparable<Record> {
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Record record = (Record) o;
- return type == record.type &&
- ttl.equals(record.ttl) &&
- name.equals(record.name) &&
- data.equals(record.data);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(type, ttl, name, data);
- }
-
- @Override
public int compareTo(Record that) {
return comparator.compare(this, that);
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java
index 90759d911dd..e2d142b10f8 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java
@@ -10,12 +10,10 @@ import java.util.Objects;
*
* @author mpolden
*/
-public class RecordData implements Comparable<RecordData> {
+public record RecordData(String data) implements Comparable<RecordData> {
- private final String data;
-
- private RecordData(String data) {
- this.data = Objects.requireNonNull(data, "data cannot be null");
+ public RecordData {
+ Objects.requireNonNull(data, "data cannot be null");
}
public String asString() {
@@ -23,19 +21,6 @@ public class RecordData implements Comparable<RecordData> {
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- RecordData that = (RecordData) o;
- return Objects.equals(data, that.data);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(data);
- }
-
- @Override
public String toString() {
return data;
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java
index 72f0933896d..e2548a7f283 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java
@@ -8,12 +8,10 @@ import java.util.Objects;
*
* @author mpolden
*/
-public class RecordName implements Comparable<RecordName> {
+public record RecordName(String name) implements Comparable<RecordName> {
- private final String name;
-
- private RecordName(String name) {
- this.name = Objects.requireNonNull(name, "name cannot be null");
+ public RecordName {
+ Objects.requireNonNull(name, "name cannot be null");
}
public String asString() {
@@ -31,21 +29,13 @@ public class RecordName implements Comparable<RecordName> {
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- RecordName that = (RecordName) o;
- return Objects.equals(name, that.name);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(name);
+ public String toString() {
+ return name;
}
@Override
- public String toString() {
- return name;
+ public int compareTo(RecordName that) {
+ return this.name.compareTo(that.name);
}
public static RecordName from(String name) {
@@ -56,9 +46,4 @@ public class RecordName implements Comparable<RecordName> {
return from(name).asFqdn();
}
- @Override
- public int compareTo(RecordName that) {
- return this.name.compareTo(that.name);
- }
-
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackage.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackage.java
index 0c9ff7863bd..5b20c57fcca 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackage.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackage.java
@@ -25,6 +25,8 @@ import com.yahoo.yolean.Exceptions;
import javax.security.auth.x500.X500Principal;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UncheckedIOException;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.cert.X509Certificate;
@@ -81,8 +83,9 @@ public class TestPackage {
entries.put("tests/.ignore-" + UUID.randomUUID(), new byte[0]);
entries.put(servicesFile,
- servicesXml( ! isPublicSystem,
+ servicesXml(! isPublicSystem,
certificateValidFrom != null,
+ hasLegacyTests(testPackage),
testerResourcesFor(id.type().zone(), spec.requireInstance(id.application().instance())),
testerApp));
@@ -114,6 +117,12 @@ public class TestPackage {
this.applicationPackage = new ApplicationPackage(buffer.toByteArray());
}
+ static boolean hasLegacyTests(byte[] testPackage) {
+ return ZipEntries.from(testPackage, __ -> true, 0, false).asList().stream()
+ .anyMatch(file -> file.name().startsWith("artifacts/") && file.name().endsWith("-tests.jar"));
+
+ }
+
public ApplicationPackage asApplicationPackage() {
return applicationPackage;
}
@@ -210,9 +219,9 @@ public class TestPackage {
}
/** Returns the generated services.xml content for the tester application. */
- public static byte[] servicesXml(boolean systemUsesAthenz, boolean useTesterCertificate,
+ public static byte[] servicesXml(boolean systemUsesAthenz, boolean useTesterCertificate, boolean hasLegacyTests,
NodeResources resources, ControllerConfig.Steprunner.Testerapp config) {
- int jdiscMemoryGb = 2; // 2Gb memory for tester application (excessive?).
+ int jdiscMemoryGb = 2; // 2Gb memory for tester application which uses Maven.
int jdiscMemoryPct = (int) Math.ceil(100 * jdiscMemoryGb / resources.memoryGb());
// Of the remaining memory, split 50/50 between Surefire running the tests and the rest
@@ -260,7 +269,7 @@ public class TestPackage {
" </component>\n" +
"\n" +
" <nodes count=\"1\">\n" +
- " <jvm allocated-memory=\"" + jdiscMemoryPct + "%\"/>\n" +
+ (hasLegacyTests ? " <jvm allocated-memory=\"" + jdiscMemoryPct + "%\"/>\n" : "" ) +
" " + resourceString + "\n" +
" </nodes>\n" +
" </container>\n" +
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntries.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntries.java
index 8392a77bad5..6bbcd551924 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntries.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntries.java
@@ -67,6 +67,7 @@ public class ZipEntries {
/** Read ZIP entries from inputStream */
public static ZipEntries from(byte[] zip, Predicate<String> entryNameMatcher, int maxEntrySizeInBytes, boolean throwIfEntryExceedsMaxSize) {
+
Options options = Options.standard()
.pathPredicate(entryNameMatcher)
.maxSize(2 * (long) Math.pow(1024, 3)) // 2 GB
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java
index 3a6a8e67a75..52eeaae1297 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java
@@ -542,7 +542,10 @@ public class DeploymentStatus {
existingRevision = Optional.of(target.targetRevision());
}
List<Job> toRun = new ArrayList<>();
- List<Change> changes = deployingCompatibilityChange ? List.of(change) : changes(job, step, change);
+ List<Change> changes = deployingCompatibilityChange
+ || allJobs.get(job).flatMap(status -> status.lastCompleted()).isEmpty()
+ ? List.of(change)
+ : changes(job, step, change);
for (Change partial : changes) {
Job jobToRun = new Job(job.type(),
Versions.from(partial, application, existingPlatform, existingRevision, fallbackPlatform(partial, job)),
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java
index 078a0dfc685..19616f862ab 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java
@@ -31,7 +31,9 @@ public class NameServiceDispatcher extends ControllerMaintainer {
@Override
protected double maintain() {
- int requestCount = trueIntervalInSeconds(); // Dispatch 1 request per second
+ // Dispatch 1 request per second on average. Note that this is not entirely accurate because a NameService
+ // implementation may need to perform multiple API-specific requests to execute a single NameServiceRequest
+ int requestCount = trueIntervalInSeconds();
try (var lock = db.lockNameServiceQueue()) {
var queue = db.readNameServiceQueue();
var instant = clock.instant();
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java
index 04f5d9866f8..707fa85b6b6 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java
@@ -38,7 +38,9 @@ public record NodeVersion(HostName hostname,
@Override
public String toString() {
- return hostname + ": " + currentVersion + " -> " + wantedVersion + " [zone=" + zone + ", suspendedAt=" + suspendedAt.map(Instant::toString).orElse("<not suspended>") + "]";
+ return hostname + ": " + currentVersion.toFullString() + " -> " + wantedVersion.toFullString() +
+ " [zone=" + zone + ", suspendedAt=" + suspendedAt.map(Instant::toString)
+ .orElse("<not suspended>") + "]";
}
/** Returns whether this is upgrading */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersion.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersion.java
index 30a88733ed3..6ed716bb4bf 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersion.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersion.java
@@ -24,7 +24,7 @@ public record OsVersion(Version version, CloudName cloud) implements Comparable<
@Override
public String toString() {
- return "version " + version + " for " + cloud + " cloud";
+ return "version " + version.toFullString() + " for " + cloud + " cloud";
}
@Override
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
index b0a37474af7..95cb7de3443 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
@@ -1,8 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.versions;
-import ai.vespa.validation.Validation;
-import com.yahoo.collections.Iterables;
import com.yahoo.component.Version;
import com.yahoo.config.provision.HostName;
import com.yahoo.vespa.hosted.controller.Controller;
@@ -122,10 +120,10 @@ public record VersionStatus(List<VespaVersion> versions) {
.orElse(newSystemVersion);
if (newSystemVersion.isBefore(systemVersion)) {
log.warning("Refusing to lower system version from " +
- systemVersion +
+ systemVersion.toFullString() +
" to " +
- newSystemVersion +
- ", nodes on " + newSystemVersion + ": " +
+ newSystemVersion.toFullString() +
+ ", nodes on " + newSystemVersion.toFullString() + ": " +
infrastructureVersions.get(newSystemVersion).stream()
.map(HostName::value)
.collect(Collectors.joining(", ")));
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java
index 5bc1c386134..bff0ccc8ae1 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java
@@ -147,8 +147,17 @@ public class TestPackageTest {
@Test
void generates_correct_services_xml() throws IOException {
assertEquals(Files.readString(Paths.get("src/test/resources/test_runner_services.xml-cd")),
+ new String(TestPackage.servicesXml(true,
+ false,
+ false,
+ new NodeResources(2, 12, 75, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.local),
+ new ControllerConfig.Steprunner.Testerapp.Builder().build()),
+ UTF_8));
+
+ assertEquals(Files.readString(Paths.get("src/test/resources/test_runner_services_with_legacy_tests.xml-cd")),
new String(TestPackage.servicesXml(true,
false,
+ true,
new NodeResources(2, 12, 75, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.local),
new ControllerConfig.Steprunner.Testerapp.Builder().build()),
UTF_8));
diff --git a/controller-server/src/test/resources/test_runner_services.xml-cd b/controller-server/src/test/resources/test_runner_services.xml-cd
index 526fd12965b..4bf3a78801d 100644
--- a/controller-server/src/test/resources/test_runner_services.xml-cd
+++ b/controller-server/src/test/resources/test_runner_services.xml-cd
@@ -33,7 +33,6 @@
</component>
<nodes count="1">
- <jvm allocated-memory="17%"/>
<resources vcpu="2.00" memory="12.00Gb" disk="75.00Gb" disk-speed="fast" storage-type="local"/>
</nodes>
</container>
diff --git a/controller-server/src/test/resources/test_runner_services_with_legacy_tests.xml-cd b/controller-server/src/test/resources/test_runner_services_with_legacy_tests.xml-cd
new file mode 100644
index 00000000000..526fd12965b
--- /dev/null
+++ b/controller-server/src/test/resources/test_runner_services_with_legacy_tests.xml-cd
@@ -0,0 +1,40 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<services xmlns:deploy='vespa' version='1.0'>
+ <container version='1.0' id='tester'>
+
+ <component id="com.yahoo.vespa.hosted.testrunner.TestRunner" bundle="vespa-testrunner-components">
+ <config name="com.yahoo.vespa.hosted.testrunner.test-runner">
+ <artifactsPath>artifacts</artifactsPath>
+ <surefireMemoryMb>5120</surefireMemoryMb>
+ <useAthenzCredentials>true</useAthenzCredentials>
+ <useTesterCertificate>false</useTesterCertificate>
+ </config>
+ </component>
+
+ <handler id="com.yahoo.vespa.testrunner.TestRunnerHandler" bundle="vespa-osgi-testrunner">
+ <binding>http://*/tester/v1/*</binding>
+ </handler>
+
+ <component id="ai.vespa.hosted.cd.cloud.impl.VespaTestRuntimeProvider" bundle="cloud-tenant-cd" />
+
+ <component id="com.yahoo.vespa.testrunner.JunitRunner" bundle="vespa-osgi-testrunner">
+ <config name="com.yahoo.vespa.testrunner.junit-test-runner">
+ <artifactsPath>artifacts</artifactsPath>
+ <useAthenzCredentials>true</useAthenzCredentials>
+ </config>
+ </component>
+
+ <component id="com.yahoo.vespa.testrunner.VespaCliTestRunner" bundle="vespa-osgi-testrunner">
+ <config name="com.yahoo.vespa.testrunner.vespa-cli-test-runner">
+ <artifactsPath>artifacts</artifactsPath>
+ <testsPath>tests</testsPath>
+ <useAthenzCredentials>true</useAthenzCredentials>
+ </config>
+ </component>
+
+ <nodes count="1">
+ <jvm allocated-memory="17%"/>
+ <resources vcpu="2.00" memory="12.00Gb" disk="75.00Gb" disk-speed="fast" storage-type="local"/>
+ </nodes>
+ </container>
+</services>
diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_tools.h b/searchcore/src/vespa/searchcore/proton/matching/match_tools.h
index 8012d7b1ec5..bc147e9c787 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/match_tools.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/match_tools.h
@@ -19,7 +19,7 @@
#include <vespa/vespalib/util/clock.h>
namespace vespalib { class ExecutionProfiler; }
-namespace vespalib { class ThreadBundle; }
+namespace vespalib { struct ThreadBundle; }
namespace search::engine { class Trace; }
diff --git a/searchcore/src/vespa/searchcore/proton/matching/query.h b/searchcore/src/vespa/searchcore/proton/matching/query.h
index 8517ec2153f..1f9499b02d8 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/query.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/query.h
@@ -10,7 +10,7 @@
#include <vespa/searchlib/queryeval/blueprint.h>
#include <vespa/searchlib/queryeval/irequestcontext.h>
-namespace vespalib { class ThreadBundle; }
+namespace vespalib { struct ThreadBundle; }
namespace search::engine { class Trace; }
namespace proton::matching {
diff --git a/searchlib/src/vespa/searchlib/queryeval/global_filter.h b/searchlib/src/vespa/searchlib/queryeval/global_filter.h
index 8504367e5b7..e93864db2c8 100644
--- a/searchlib/src/vespa/searchlib/queryeval/global_filter.h
+++ b/searchlib/src/vespa/searchlib/queryeval/global_filter.h
@@ -4,6 +4,7 @@
#include <memory>
#include <vespa/searchlib/common/bitvector.h>
+#include <vector>
namespace search::queryeval {
diff --git a/searchsummary/src/vespa/juniper/query.h b/searchsummary/src/vespa/juniper/query.h
index 2b45909e0ac..f75949c6d06 100644
--- a/searchsummary/src/vespa/juniper/query.h
+++ b/searchsummary/src/vespa/juniper/query.h
@@ -35,9 +35,8 @@ const char* creator_text(ItemCreator);
class IQueryVisitor;
-/** Opaque datatype implemented by provider
- */
-struct QueryItem;
+// Interface class for juniper query items
+class QueryItem;
/** This is the basic query type, implemented by the query provider
*/
diff --git a/storage/src/tests/pstack_testrunner b/storage/src/tests/pstack_testrunner
index 151aaec7e1a..4d4d5105d5a 100755
--- a/storage/src/tests/pstack_testrunner
+++ b/storage/src/tests/pstack_testrunner
@@ -1,15 +1,9 @@
-#!/usr/bin/perl -w
+#!/bin/sh
# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-use strict;
-
-my @pids = `ps auxww | grep "./testrunner" | grep -v grep`;
-foreach (@pids) {
- s/^\S+\s+(\d+)\s+.*$/$1/;
- chomp;
-}
-
-foreach my $pid (@pids) {
- my $cmd = "pstack $pid";
- system($cmd) == 0 or die "Failed to run '$cmd'";
-}
+ps auxww | grep "./testrunner" | grep -v grep | while read username pid restofline; do
+ if pstack $pid; then :; else
+ echo "Failed to run 'pstack $pid'"
+ exit 1
+ fi
+done
diff --git a/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h b/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h
index 0907783feaf..9f72e4f3687 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h
+++ b/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h
@@ -5,7 +5,7 @@
#include <vespa/vsm/common/storagedocument.h>
#include <vespa/document/fieldvalue/fieldvalues.h>
-namespace vespalib::slime { class Inserter; }
+namespace vespalib::slime { struct Inserter; }
namespace vsm {