diff options
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 { |