summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java15
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java25
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/CapacityPolicies.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicAllocationTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java2
-rw-r--r--parent/pom.xml3
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp27
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/match_thread.h1
8 files changed, 70 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
index 531dc8f0fcf..cc570d47907 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java
@@ -315,16 +315,25 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
public void getConfig(QrStartConfig.Builder builder) {
super.getConfig(builder);
var memoryPct = getMemoryPercentage().orElse(null);
- int heapsize = memoryPct != null && memoryPct.asAbsoluteGb().isPresent()
- ? (int) (memoryPct.asAbsoluteGb().getAsDouble() * 1024) : 1536;
+ int heapsize = truncateTo4SignificantBits(memoryPct != null && memoryPct.asAbsoluteGb().isPresent()
+ ? (int) (memoryPct.asAbsoluteGb().getAsDouble() * 1024) : 1536);
builder.jvm.verbosegc(true)
.availableProcessors(0)
.compressedClassSpaceSize(0)
- .minHeapsize(heapsize)
+ .minHeapsize(heapsize) // These cause restarts when changed, so we try to keep them stable.
.heapsize(heapsize);
if (memoryPct != null) builder.jvm.heapSizeAsPercentageOfPhysicalMemory(memoryPct.ofContainerAvailable());
}
+ static int truncateTo4SignificantBits(int i) {
+ if (i == Integer.MIN_VALUE) return i;
+ if (i < 0) return -truncateTo4SignificantBits(-i);
+ if (i <= 16) return i;
+ int mask = Integer.highestOneBit(i);
+ mask += mask - (mask >> 3);
+ return i & mask;
+ }
+
@Override
public void getConfig(ZookeeperServerConfig.Builder builder) {
if (getParent() instanceof ConfigserverCluster) return; // Produces its own config
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
index 9cf34b55ebf..93362e144a6 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
@@ -49,6 +49,7 @@ import static com.yahoo.config.model.api.ApplicationClusterEndpoint.Scope.zone;
import static com.yahoo.config.provision.SystemName.main;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
@@ -498,4 +499,28 @@ public class ContainerClusterTest {
(extra.isEmpty() ? "" : " " + extra);
}
+ @Test
+ void testTruncationTo4Bits() {
+ assertEquals(0, ApplicationContainerCluster.truncateTo4SignificantBits(0));
+ assertEquals(1, ApplicationContainerCluster.truncateTo4SignificantBits(1));
+ assertEquals(15, ApplicationContainerCluster.truncateTo4SignificantBits(15));
+ assertEquals(16, ApplicationContainerCluster.truncateTo4SignificantBits(16));
+ assertEquals(16, ApplicationContainerCluster.truncateTo4SignificantBits(17));
+ assertEquals(18, ApplicationContainerCluster.truncateTo4SignificantBits(18));
+ assertEquals(18, ApplicationContainerCluster.truncateTo4SignificantBits(19));
+ assertEquals(30, ApplicationContainerCluster.truncateTo4SignificantBits(30));
+ assertEquals(30, ApplicationContainerCluster.truncateTo4SignificantBits(31));
+ assertEquals(32, ApplicationContainerCluster.truncateTo4SignificantBits(32));
+ assertEquals(32, ApplicationContainerCluster.truncateTo4SignificantBits(33));
+ assertEquals(32, ApplicationContainerCluster.truncateTo4SignificantBits(34));
+ assertEquals(32, ApplicationContainerCluster.truncateTo4SignificantBits(35));
+ assertEquals(36, ApplicationContainerCluster.truncateTo4SignificantBits(36));
+ assertEquals(0x78000000, ApplicationContainerCluster.truncateTo4SignificantBits(0x78000000));
+ assertEquals(0x78000000, ApplicationContainerCluster.truncateTo4SignificantBits(0x7fffffff));
+ assertEquals(0x80000000, ApplicationContainerCluster.truncateTo4SignificantBits(0x80000000));
+ assertEquals(0b10001000000000000000000000000000, ApplicationContainerCluster.truncateTo4SignificantBits(0b10000000000000000000000000000001));
+ assertEquals(0b11000100000000000000000000000000, ApplicationContainerCluster.truncateTo4SignificantBits(0b11000000000000000000000000000001));
+ assertEquals(0b11111111111111111111111111100010, ApplicationContainerCluster.truncateTo4SignificantBits(0b11111111111111111111111111100001));
+ }
+
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/CapacityPolicies.java b/config-provisioning/src/main/java/com/yahoo/config/provision/CapacityPolicies.java
index 818a448187c..7d44c4bb8e1 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/CapacityPolicies.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/CapacityPolicies.java
@@ -51,7 +51,7 @@ public class CapacityPolicies {
return switch (zone.environment()) {
case dev, test -> 1;
case perf -> Math.min(requested, 3);
- case staging -> requested <= 1 ? requested : Math.max(2, requested / 10);
+ case staging -> requested <= 1 ? requested : Math.max(2, (int)(0.05 * requested));
case prod -> requested;
};
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicAllocationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicAllocationTest.java
index a91902c8eba..ac141a81d58 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicAllocationTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicAllocationTest.java
@@ -428,7 +428,7 @@ public class DynamicAllocationTest {
ApplicationId application = ProvisioningTester.applicationId();
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("1").build();
- List<HostSpec> hosts = tester.prepare(application, cluster, 36, 2, resources);
+ List<HostSpec> hosts = tester.prepare(application, cluster, 66, 2, resources);
tester.activate(application, hosts);
assertEquals(3, hosts.size());
assertEquals(1, hosts.stream().map(host -> host.membership().get().cluster().group().get()).distinct().count());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
index 9e6ae9f010c..0f8292bb310 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
@@ -638,7 +638,7 @@ public class ProvisioningTest {
ApplicationId application = ProvisioningTester.applicationId();
tester.makeReadyHosts(14, defaultResources).activateTenantHosts();
SystemState state = prepare(application, 1, 1, 1, 64, defaultResources, tester); // becomes 1, 1, 1, 1, 6
- assertEquals(9, state.allHosts.size());
+ assertEquals(6, state.allHosts.size());
tester.activate(application, state.allHosts);
}
diff --git a/parent/pom.xml b/parent/pom.xml
index 2f7eabab3e4..7aab11a2d4a 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -64,6 +64,9 @@
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${maven-bundle-plugin.vespa.version}</version>
+ <configuration>
+ <obrRepository>NONE</obrRepository>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp b/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
index 81a4b443208..7ccc120d047 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
@@ -381,7 +381,32 @@ MatchThread::findMatches(MatchTools &tools)
secondPhase(tools, hits);
}
trace->addEvent(4, "Create result set");
- return hits.getResultSet();
+ if (tools.has_second_phase_rank() && matchParams.second_phase_rank_score_drop_limit.has_value()) {
+ return get_matches_after_second_phase_rank_score_drop(hits);
+ } else {
+ return hits.getResultSet();
+ }
+}
+
+std::unique_ptr<search::ResultSet>
+MatchThread::get_matches_after_second_phase_rank_score_drop(HitCollector& hits)
+{
+ std::vector<uint32_t> dropped;
+ auto result = hits.get_result_set(matchParams.second_phase_rank_score_drop_limit, &dropped);
+ if (!dropped.empty()) {
+ /*
+ * Hits dropped due to second phase rank score drop limit are
+ * not present in the result. Schedule extra tasks to update
+ * mutable attributes for earlier match phases.
+ */
+ if (auto task = matchToolsFactory.createOnMatchTask()) {
+ task->run(dropped);
+ }
+ if (auto task = matchToolsFactory.createOnFirstPhaseTask()) {
+ task->run(std::move(dropped));
+ }
+ }
+ return result;
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_thread.h b/searchcore/src/vespa/searchcore/proton/matching/match_thread.h
index b267e7b799c..e017dc53c5c 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/match_thread.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/match_thread.h
@@ -113,6 +113,7 @@ private:
void match_loop_helper(MatchTools &tools, HitCollector &hits);
search::ResultSet::UP findMatches(MatchTools &tools);
+ std::unique_ptr<search::ResultSet> get_matches_after_second_phase_rank_score_drop(HitCollector& hits);
void secondPhase(MatchTools & tools, HitCollector & hits);
void processResult(const Doom & doom, search::ResultSet::UP result, ResultProcessor::Context &context);