summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java5
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java5
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/MockModelContext.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java3
-rw-r--r--configdefinitions/src/vespa/dispatch.def3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java16
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java7
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java6
10 files changed, 42 insertions, 14 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 5021a2b3a5f..0213e753217 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
@@ -32,10 +32,10 @@ public interface ModelContext {
FileRegistry getFileRegistry();
Properties properties();
default Optional<File> appDir() { return Optional.empty();}
-
+
/** The Vespa version this model is built for */
Version modelVespaVersion();
-
+
/** The Vespa version we want nodes to become */
Version wantedNodeVespaVersion();
@@ -53,6 +53,7 @@ public interface ModelContext {
boolean isBootstrap();
boolean isFirstTimeDeployment();
boolean useDedicatedNodeForLogserver();
+ boolean useFdispatchByDefault();
}
}
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
index 83e595e1513..a6f2a205f94 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
@@ -35,6 +35,7 @@ public class TestProperties implements ModelContext.Properties {
private boolean isBootstrap = false;
private boolean isFirstTimeDeployment = false;
private boolean useDedicatedNodeForLogserver = false;
+ private boolean useFdispatchByDefault = true;
@Override public boolean multitenant() { return multitenant; }
@Override public ApplicationId applicationId() { return applicationId; }
@@ -48,6 +49,7 @@ public class TestProperties implements ModelContext.Properties {
@Override public boolean isBootstrap() { return isBootstrap; }
@Override public boolean isFirstTimeDeployment() { return isFirstTimeDeployment; }
@Override public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; }
+ @Override public boolean useFdispatchByDefault() { return useFdispatchByDefault; }
public TestProperties setApplicationId(ApplicationId applicationId) {
this.applicationId = applicationId;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
index f4754b4f958..6016bb4b710 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
@@ -137,7 +137,7 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
String clusterName, ContentSearchCluster search) {
List<ModelElement> indexedDefs = getIndexedSearchDefinitions(clusterElem);
if (!indexedDefs.isEmpty()) {
- IndexedSearchCluster isc = new IndexedSearchCluster(search, clusterName, 0);
+ IndexedSearchCluster isc = new IndexedSearchCluster(search, clusterName, 0, deployState);
isc.setRoutingSelector(clusterElem.childAsString("documents.selection"));
Double visibilityDelay = clusterElem.childAsDouble("engine.proton.visibility-delay");
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
index 80bba10276d..2662aed442b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
@@ -106,6 +106,7 @@ public class IndexedSearchCluster extends SearchCluster
private final SimpleConfigProducer dispatchParent;
private final DispatchGroup rootDispatch;
private DispatchSpec dispatchSpec;
+ private final boolean useFdispatchByDefault;
private List<SearchNode> searchNodes = new ArrayList<>();
/**
@@ -118,11 +119,12 @@ public class IndexedSearchCluster extends SearchCluster
return routingSelector;
}
- public IndexedSearchCluster(AbstractConfigProducer parent, String clusterName, int index) {
+ public IndexedSearchCluster(AbstractConfigProducer parent, String clusterName, int index, DeployState deployState) {
super(parent, clusterName, index);
unionCfg = new UnionConfiguration(this, documentDbs);
dispatchParent = new SimpleConfigProducer(this, "dispatchers");
rootDispatch = new DispatchGroup(this);
+ useFdispatchByDefault = deployState.getProperties().useFdispatchByDefault();
}
@Override
@@ -422,6 +424,7 @@ public class IndexedSearchCluster extends SearchCluster
}
builder.maxNodesDownPerGroup(rootDispatch.getMaxNodesDownPerFixedRow());
builder.useMultilevelDispatch(useMultilevelDispatchSetup());
+ builder.useFdispatchByDefault(useFdispatchByDefault);
builder.useLocalNode(tuning.dispatch.useLocalNode);
builder.searchableCopies(rootDispatch.getSearchableCopies());
if (searchCoverage != null) {
diff --git a/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java b/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java
index 948c62c2343..86b671789c8 100644
--- a/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java
+++ b/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java
@@ -75,7 +75,7 @@ public class MockModelContext implements ModelContext {
public FileRegistry getFileRegistry() {
return new MockFileRegistry();
}
-
+
@Override
public Version modelVespaVersion() { return new Version(6); }
@@ -136,6 +136,9 @@ public class MockModelContext implements ModelContext {
@Override
public boolean useDedicatedNodeForLogserver() { return false; }
- };
+
+ @Override
+ public boolean useFdispatchByDefault() { return true; }
+};
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
index e4198115b2a..cc7e2d72b5f 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
@@ -219,6 +219,9 @@ public class VespaModelFactoryTest {
@Override
public boolean useDedicatedNodeForLogserver() { return false; }
+
+ @Override
+ public boolean useFdispatchByDefault() { return true; }
};
}
};
diff --git a/configdefinitions/src/vespa/dispatch.def b/configdefinitions/src/vespa/dispatch.def
index 1108e40b3f1..f0a4b0d8419 100644
--- a/configdefinitions/src/vespa/dispatch.def
+++ b/configdefinitions/src/vespa/dispatch.def
@@ -16,6 +16,9 @@ maxNodesDownPerGroup int default=0
# Distribution policy for group selection
distributionPolicy enum { ROUNDROBIN, ADAPTIVE } default=ROUNDROBIN
+# Should fdispatch be used as the default dispatcher
+useFdispatchByDefault bool default=true
+
# Is multi-level dispatch configured for this cluster
useMultilevelDispatch bool default=false
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 0a64eca63be..68765a25581 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
@@ -40,7 +40,7 @@ public class ModelContextImpl implements ModelContext {
private final Optional<HostProvisioner> hostProvisioner;
private final ModelContext.Properties properties;
private final Optional<File> appDir;
-
+
/** The version of Vespa we are building a model for */
private final Version modelVespaVersion;
@@ -86,9 +86,9 @@ public class ModelContextImpl implements ModelContext {
@Override
public Optional<ApplicationPackage> permanentApplicationPackage() { return permanentApplicationPackage; }
- /**
- * Returns the host provisioner to use, or empty to use the default provisioner,
- * creating hosts from the application package defined hosts
+ /**
+ * Returns the host provisioner to use, or empty to use the default provisioner,
+ * creating hosts from the application package defined hosts
*/
// TODO: Don't allow empty here but create the right provisioner when this is set up instead
@Override
@@ -129,6 +129,7 @@ public class ModelContextImpl implements ModelContext {
private final boolean isBootstrap;
private final boolean isFirstTimeDeployment;
private final boolean useDedicatedNodeForLogserver;
+ private final boolean useFdispatchByDefault;
public Properties(ApplicationId applicationId,
boolean multitenantFromConfig,
@@ -155,6 +156,8 @@ public class ModelContextImpl implements ModelContext {
this.isFirstTimeDeployment = isFirstTimeDeployment;
this.useDedicatedNodeForLogserver = Flags.USE_DEDICATED_NODE_FOR_LOGSERVER.bindTo(flagSource)
.with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();
+ this.useFdispatchByDefault = Flags.USE_FDISPATCH_BY_DEFAULT.bindTo(flagSource)
+ .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();
}
@Override
@@ -196,6 +199,9 @@ public class ModelContextImpl implements ModelContext {
@Override
public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; }
- }
+
+ @Override
+ public boolean useFdispatchByDefault() { return useFdispatchByDefault; }
+}
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
index b613952b99e..1d39cffa9d2 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
@@ -36,7 +36,6 @@ import java.util.Set;
* @author ollvir
*/
public class Dispatcher extends AbstractComponent {
- private static final boolean INTERNAL_BY_DEFAULT = false;
private static final int MAX_GROUP_SELECTION_ATTEMPTS = 3;
/** If enabled, this internal dispatcher will be preferred over fdispatch whenever possible */
@@ -48,6 +47,7 @@ public class Dispatcher extends AbstractComponent {
private final LoadBalancer loadBalancer;
private final RpcResourcePool rpcResourcePool;
private final boolean multilevelDispatch;
+ private final boolean internalDispatchByDefault;
public Dispatcher(String clusterId, DispatchConfig dispatchConfig, FS4ResourcePool fs4ResourcePool, int containerClusterSize, VipStatus vipStatus) {
this(new SearchCluster(clusterId, dispatchConfig, fs4ResourcePool, containerClusterSize, vipStatus), dispatchConfig);
@@ -59,6 +59,7 @@ public class Dispatcher extends AbstractComponent {
dispatchConfig.distributionPolicy() == DispatchConfig.DistributionPolicy.ROUNDROBIN);
this.rpcResourcePool = new RpcResourcePool(dispatchConfig);
this.multilevelDispatch = dispatchConfig.useMultilevelDispatch();
+ this.internalDispatchByDefault = !dispatchConfig.useFdispatchByDefault();
}
/** Returns the search cluster this dispatches to */
@@ -77,7 +78,7 @@ public class Dispatcher extends AbstractComponent {
if (rpcInvoker.isPresent()) {
return rpcInvoker;
}
- if (result.getQuery().properties().getBoolean(dispatchInternal, INTERNAL_BY_DEFAULT)) {
+ if (result.getQuery().properties().getBoolean(dispatchInternal, internalDispatchByDefault)) {
Optional<FillInvoker> fs4Invoker = fs4InvokerFactory.getFillInvoker(result);
if (fs4Invoker.isPresent()) {
return fs4Invoker;
@@ -87,7 +88,7 @@ public class Dispatcher extends AbstractComponent {
}
public Optional<SearchInvoker> getSearchInvoker(Query query, FS4InvokerFactory fs4InvokerFactory) {
- if (multilevelDispatch || ! query.properties().getBoolean(dispatchInternal, INTERNAL_BY_DEFAULT)) {
+ if (multilevelDispatch || ! query.properties().getBoolean(dispatchInternal, internalDispatchByDefault)) {
return Optional.empty();
}
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
index 87847670ef9..2268c8eae6e 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -83,6 +83,12 @@ public class Flags {
"Takes effect on restart of Docker container",
NODE_TYPE, APPLICATION_ID, HOSTNAME);
+ public static final UnboundBooleanFlag USE_FDISPATCH_BY_DEFAULT = defineFeatureFlag(
+ "default-to-fdispatch", true,
+ "Should fdispatch be used as the default instead of the java dispatcher",
+ "Takes effect at redeployment",
+ APPLICATION_ID);
+
/** WARNING: public for testing: All flags should be defined in {@link Flags}. */
public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, String description,
String modificationEffect, FetchVector.Dimension... dimensions) {