summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2023-10-28 08:45:37 +0200
committerGitHub <noreply@github.com>2023-10-28 08:45:37 +0200
commitf9076902965b87a25827a41925edda9b9e728f77 (patch)
treeef922dfc817c1120a7186cdc7202350fa3804504
parentd1cff84a0ebb690055faac2af20574a8f5bd7c9e (diff)
parentac826159d42b662e9504496b135e2f2a1304c8bd (diff)
Merge pull request #28903 from vespa-engine/jonmv/reconfigurable-dispatcher-cleanup
Always use reconfigurable dispatcher
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java15
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaClusterTest.java125
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java5
4 files changed, 74 insertions, 73 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index e4b1d2edfa4..acf3a8278f1 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -116,7 +116,7 @@ public interface ModelContext {
@ModelFeatureFlag(owners = {"vekterli", "havardpe"}, removeAfter = "8.207") default boolean enableConditionalPutRemoveWriteRepair() { return true; }
@ModelFeatureFlag(owners = {"mortent", "olaa"}, removeAfter = "8.227") default boolean enableDataplaneProxy() { return false; }
@ModelFeatureFlag(owners = {"baldersheim"}) default boolean enableNestedMultivalueGrouping() { return false; }
- @ModelFeatureFlag(owners = {"jonmv"}) default boolean useReconfigurableDispatcher() { return false; }
+ @ModelFeatureFlag(owners = {"jonmv"}, removeAfter = "8.250") default boolean useReconfigurableDispatcher() { return true; }
@ModelFeatureFlag(owners = {"vekterli"}) default int contentLayerMetadataFeatureLevel() { return 0; }
@ModelFeatureFlag(owners = {"bjorncs"}) default boolean dynamicHeapSize() { return false; }
@ModelFeatureFlag(owners = {"hmusum"}) default String unknownConfigDefinition() { return "warn"; }
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
index ca2bc40209d..d86d117f1d2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
@@ -5,24 +5,24 @@ import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.container.QrSearchersConfig;
import com.yahoo.prelude.semantics.SemanticRulesConfig;
+import com.yahoo.schema.derived.SchemaInfo;
import com.yahoo.search.config.IndexInfoConfig;
import com.yahoo.search.config.SchemaInfoConfig;
import com.yahoo.search.dispatch.Dispatcher;
import com.yahoo.search.dispatch.ReconfigurableDispatcher;
+import com.yahoo.search.handler.observability.SearchStatusExtension;
import com.yahoo.search.pagetemplates.PageTemplatesConfig;
+import com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry;
import com.yahoo.search.query.profile.config.QueryProfilesConfig;
import com.yahoo.search.ranking.RankProfilesEvaluatorFactory;
-import com.yahoo.schema.derived.SchemaInfo;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.model.container.ApplicationContainerCluster;
import com.yahoo.vespa.model.container.component.Component;
import com.yahoo.vespa.model.container.component.ContainerSubsystem;
import com.yahoo.vespa.model.container.search.searchchain.SearchChains;
-import com.yahoo.vespa.model.search.SearchCluster;
import com.yahoo.vespa.model.search.IndexedSearchCluster;
+import com.yahoo.vespa.model.search.SearchCluster;
import com.yahoo.vespa.model.search.StreamingSearchCluster;
-import com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry;
-import com.yahoo.search.handler.observability.SearchStatusExtension;
import java.util.Collection;
import java.util.LinkedList;
@@ -52,7 +52,6 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains>
private final List<SearchCluster> searchClusters = new LinkedList<>();
private final Collection<String> schemasWithGlobalPhase;
private final boolean globalPhase;
- private final boolean useReconfigurableDispatcher;
private QueryProfiles queryProfiles;
private SemanticRules semanticRules;
@@ -62,7 +61,6 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains>
public ContainerSearch(DeployState deployState, ApplicationContainerCluster cluster, SearchChains chains) {
super(chains);
this.globalPhase = deployState.featureFlags().enableGlobalPhase();
- this.useReconfigurableDispatcher = deployState.featureFlags().useReconfigurableDispatcher();
this.schemasWithGlobalPhase = getSchemasWithGlobalPhase(deployState);
this.app = deployState.getApplicationPackage();
this.owningCluster = cluster;
@@ -88,9 +86,12 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains>
/** Adds a Dispatcher component to the owning container cluster for each search cluster */
private void initializeDispatchers(Collection<SearchCluster> searchClusters) {
- Class<? extends Dispatcher> dispatcherClass = useReconfigurableDispatcher ? ReconfigurableDispatcher.class : Dispatcher.class;
for (SearchCluster searchCluster : searchClusters) {
if (searchCluster instanceof IndexedSearchCluster indexed) {
+ // For local testing, using Application, there is no cloud config, and we need to use the static dispatcher.
+ Class<? extends Dispatcher> dispatcherClass = System.getProperty("vespa.local", "false").equals("true")
+ ? Dispatcher.class
+ : ReconfigurableDispatcher.class;
var dispatcher = new DispatcherComponent(indexed, dispatcherClass);
owningCluster.addComponent(dispatcher);
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaClusterTest.java
index d63b4586082..c8d84f24581 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaClusterTest.java
@@ -11,6 +11,7 @@ import com.yahoo.schema.ApplicationBuilder;
import com.yahoo.schema.document.Attribute;
import com.yahoo.schema.document.SDDocumentType;
import com.yahoo.schema.document.SDField;
+import com.yahoo.search.dispatch.ReconfigurableDispatcher;
import com.yahoo.vespa.config.search.DispatchNodesConfig;
import com.yahoo.vespa.indexinglanguage.expressions.AttributeExpression;
import com.yahoo.vespa.indexinglanguage.expressions.ScriptExpression;
@@ -62,68 +63,70 @@ public class SchemaClusterTest {
@Test
void search_model_is_connected_to_container_clusters_two_content_clusters() {
- String vespaHosts = "<?xml version='1.0' encoding='utf-8' ?>" +
- "<hosts>" +
- " <host name='node0host'>" +
- " <alias>node0</alias>" +
- " </host>" +
- " <host name='node1host'>" +
- " <alias>node1</alias>" +
- " </host>" +
- " <host name='node2host'>" +
- " <alias>node2</alias>" +
- " </host>" +
- "</hosts>";
+ String vespaHosts = """
+ <?xml version='1.0' encoding='utf-8' ?>
+ <hosts>
+ <host name='node0host'>
+ <alias>node0</alias>
+ </host>
+ <host name='node1host'>
+ <alias>node1</alias>
+ </host>
+ <host name='node2host'>
+ <alias>node2</alias>
+ </host>
+ </hosts>
+ """;
String services =
- "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
- "<services version=\"1.0\">" +
- " <admin version='2.0'>" +
- " <adminserver hostalias='node0' />" +
- " </admin>\n" +
- " <container version='1.0' id='j1'>\n" +
- " <search>" +
- " <chain id='s1Chain'>" +
- " <searcher id='S1ClusterSearcher'/>" +
- " </chain>" +
- " <provider cluster='normal' id='normal' type='local'/>\n" +
- " </search>" +
- " <nodes>" +
- " <node hostalias=\"node0\" />" +
- " </nodes>" +
- " </container>" +
-
- " <container version='1.0' id='j2'>" +
- " <search>" +
- " <chain id='s2Chain'>" +
- " <searcher id='S2ClusterSearcher'/>" +
- " </chain>" +
- " <provider cluster='xbulk' id='xbulk' type='local'/>" +
- " </search>" +
- " <nodes>" +
- " <node hostalias=\"node2\" />" +
- " </nodes>" +
- " </container>" +
-
- " <content id='xbulk' version=\"1.0\">" +
- " <redundancy>2</redundancy>" +
- " <documents>" +
- " <document mode='index' type=\"music\" />" +
- " </documents>" +
- " <nodes>" +
- " <node hostalias=\"node0\" distribution-key=\"0\" />" +
- " </nodes>" +
- " </content>" +
- " <content id=\"normal\" version='1.0'>" +
- " <redundancy>2</redundancy>" +
- " <documents>" +
- " <document mode='index' type=\"music\" />" +
- " </documents>" +
- " <nodes>" +
- " <node hostalias=\"node2\" distribution-key=\"0\" />" +
- " </nodes>" +
- " </content>" +
- "</services>";
+ """
+ <?xml version="1.0" encoding="utf-8" ?>
+ <services version="1.0">
+ <admin version='2.0'>
+ <adminserver hostalias='node0' />
+ </admin>
+ <container version='1.0' id='j1'>
+ <search>
+ <chain id='s1Chain'>
+ <searcher id='S1ClusterSearcher'/>
+ </chain>
+ <provider cluster='normal' id='normal' type='local'/>
+ </search>
+ <nodes>
+ <node hostalias="node0" />
+ </nodes>
+ </container>
+ <container version='1.0' id='j2'>
+ <search>
+ <chain id='s2Chain'>
+ <searcher id='S2ClusterSearcher'/>
+ </chain>
+ <provider cluster='xbulk' id='xbulk' type='local'/>
+ </search>
+ <nodes>
+ <node hostalias="node2" />
+ </nodes>
+ </container>
+ <content id='xbulk' version="1.0">
+ <redundancy>2</redundancy>
+ <documents>
+ <document mode='index' type="music" />
+ </documents>
+ <nodes>
+ <node hostalias="node0" distribution-key="0" />
+ </nodes>
+ </content>
+ <content id="normal" version='1.0'>
+ <redundancy>2</redundancy>
+ <documents>
+ <document mode='index' type="music" />
+ </documents>
+ <nodes>
+ <node hostalias="node2" distribution-key="0" />
+ </nodes>
+ </content>
+ </services>
+ """;
VespaModel model = new VespaModelCreatorWithMockPkg(vespaHosts, services, ApplicationPackageUtils.generateSchemas("music")).create();
@@ -169,7 +172,7 @@ public class SchemaClusterTest {
Component<?,?> dispatcher = (Component<?, ?>)containerCluster.getComponentsMap().get(new ComponentId("dispatcher." + cluster));
assertNotNull(dispatcher);
assertEquals("dispatcher." + cluster, dispatcher.getComponentId().stringValue());
- assertEquals("com.yahoo.search.dispatch.Dispatcher", dispatcher.getClassId().stringValue());
+ assertEquals(ReconfigurableDispatcher.class.getName(), dispatcher.getClassId().stringValue());
assertEquals("j1/component/dispatcher." + cluster, dispatcher.getConfigId());
DispatchNodesConfig.Builder dispatchConfigBuilder = new DispatchNodesConfig.Builder();
model.getConfig(dispatchConfigBuilder, dispatcher.getConfigId());
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index 7e54c5164f7..5ad8eee90e8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -205,7 +205,6 @@ public class ModelContextImpl implements ModelContext {
private final boolean enableGlobalPhase;
private final String summaryDecodePolicy;
private final boolean enableNestedMultivalueGrouping;
- private final boolean useReconfigurableDispatcher;
private final int contentLayerMetadataFeatureLevel;
private final boolean dynamicHeapSize;
private final String unknownConfigDefinition;
@@ -250,7 +249,6 @@ public class ModelContextImpl implements ModelContext {
this.enableGlobalPhase = flagValue(source, appId, version, Flags.ENABLE_GLOBAL_PHASE);
this.summaryDecodePolicy = flagValue(source, appId, version, Flags.SUMMARY_DECODE_POLICY);
this.enableNestedMultivalueGrouping = flagValue(source, appId, version, Flags.ENABLE_NESTED_MULTIVALUE_GROUPING);
- this.useReconfigurableDispatcher = flagValue(source, appId, version, Flags.USE_RECONFIGURABLE_DISPATCHER);
this.contentLayerMetadataFeatureLevel = flagValue(source, appId, version, Flags.CONTENT_LAYER_METADATA_FEATURE_LEVEL);
this.dynamicHeapSize = flagValue(source, appId, version, Flags.DYNAMIC_HEAP_SIZE);
this.unknownConfigDefinition = flagValue(source, appId, version, Flags.UNKNOWN_CONFIG_DEFINITION);
@@ -296,14 +294,13 @@ public class ModelContextImpl implements ModelContext {
@Override public int rpcEventsBeforeWakeup() { return rpc_events_before_wakeup; }
@Override public String logFileCompressionAlgorithm(String defVal) {
var fflag = this.logFileCompressionAlgorithm;
- if (fflag != null && ! fflag.equals("")) {
+ if (fflag != null && ! fflag.isEmpty()) {
return fflag;
}
return defVal;
}
@Override public boolean enableGlobalPhase() { return enableGlobalPhase; }
@Override public boolean enableNestedMultivalueGrouping() { return enableNestedMultivalueGrouping; }
- @Override public boolean useReconfigurableDispatcher() { return useReconfigurableDispatcher; }
@Override public int contentLayerMetadataFeatureLevel() { return contentLayerMetadataFeatureLevel; }
@Override public boolean dynamicHeapSize() { return dynamicHeapSize; }
@Override public String unknownConfigDefinition() { return unknownConfigDefinition; }