diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2023-10-28 08:45:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-28 08:45:37 +0200 |
commit | f9076902965b87a25827a41925edda9b9e728f77 (patch) | |
tree | ef922dfc817c1120a7186cdc7202350fa3804504 | |
parent | d1cff84a0ebb690055faac2af20574a8f5bd7c9e (diff) | |
parent | ac826159d42b662e9504496b135e2f2a1304c8bd (diff) |
Merge pull request #28903 from vespa-engine/jonmv/reconfigurable-dispatcher-cleanup
Always use reconfigurable dispatcher
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; } |