aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-09-25 13:09:42 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-09-25 13:11:53 +0200
commitcfa3aafbbff8c8da64bbce1df5885744b6389ab6 (patch)
tree5074a3b85097f05e89fd36249ad47298d0605187
parent7402fb06bc996ec63c478420c25e620034be7f9b (diff)
Add feature flag to enable new restapi handler
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java21
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java6
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java6
5 files changed, 36 insertions, 11 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 6a7a9ed16ae..0c78aafcf20 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
@@ -69,10 +69,10 @@ public interface ModelContext {
default int defaultNumResponseThreads() { return 2; }
- // TODO Revisit in May or June 2020
+ // TODO(bjorncs) Temporary feature flag
double threadPoolSizeFactor();
- // TODO Revisit in May or June 2020
+ // TODO(bjorncs) Temporary feature flag
double queueSizeFactor();
/// Default setting for the gc-options attribute if not specified explicit by application
@@ -95,7 +95,9 @@ public interface ModelContext {
// TODO Remove on 7.XXX when this is default on.
boolean useDirectStorageApiRpc();
- default String proxyProtocol() { return "https+proxy-protocol"; } // TODO bjorncs: Remove after end of May
+ // TODO(bjorncs) Temporary feature flag
+ default String proxyProtocol() { return "https+proxy-protocol"; }
+
default Optional<AthenzDomain> athenzDomain() { return Optional.empty(); }
// TODO(mpolden): Remove after May 2020
@@ -113,6 +115,9 @@ public interface ModelContext {
return Quota.empty();
}
+ // TODO(bjorncs): Temporary feature flag
+ default boolean useNewRestapiHandler() { return false; }
+
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java b/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java
index feaa6eb5940..9018a0231db 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java
@@ -41,13 +41,17 @@ public class ContainerDocumentApi {
private static void addRestApiHandler(ContainerCluster<?> cluster, Options options) {
- var handler = newVespaClientHandler(
- "com.yahoo.document.restapi.resource.RestApi", "/document/v1/*", options);
+ String handlerClassName = options.useNewRestapiHandler
+ ? "com.yahoo.document.restapi.resource.DocumentV1ApiHandler"
+ : "com.yahoo.document.restapi.resource.RestApi";
+ var handler = newVespaClientHandler(handlerClassName, "/document/v1/*", options);
cluster.addComponent(handler);
- var executor = new Threadpool(
- "restapi-handler", cluster, options.restApiThreadpoolOptions, options.feedThreadPoolSizeFactor);
- handler.inject(executor);
- handler.addComponent(executor);
+ if (!options.useNewRestapiHandler) {
+ var executor = new Threadpool(
+ "restapi-handler", cluster, options.restApiThreadpoolOptions, options.feedThreadPoolSizeFactor);
+ handler.inject(executor);
+ handler.addComponent(executor);
+ }
}
private static Handler<AbstractConfigProducer<?>> newVespaClientHandler(
@@ -76,15 +80,18 @@ public class ContainerDocumentApi {
private final ContainerThreadpool.UserOptions restApiThreadpoolOptions;
private final ContainerThreadpool.UserOptions feedApiThreadpoolOptions;
private final double feedThreadPoolSizeFactor;
+ private final boolean useNewRestapiHandler;
public Options(Collection<String> bindings,
ContainerThreadpool.UserOptions restApiThreadpoolOptions,
ContainerThreadpool.UserOptions feedApiThreadpoolOptions,
- double feedThreadPoolSizeFactor) {
+ double feedThreadPoolSizeFactor,
+ boolean useNewRestapiHandler) {
this.bindings = Collections.unmodifiableCollection(bindings);
this.restApiThreadpoolOptions = restApiThreadpoolOptions;
this.feedApiThreadpoolOptions = feedApiThreadpoolOptions;
this.feedThreadPoolSizeFactor = feedThreadPoolSizeFactor;
+ this.useNewRestapiHandler = useNewRestapiHandler;
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java
index 99ae6184f5c..3baf792dfba 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java
@@ -25,7 +25,8 @@ public class DocumentApiOptionsBuilder {
getBindings(spec),
threadpoolOptions(spec, "rest-api"),
threadpoolOptions(spec, "http-client-api"),
- deployState.getProperties().feedCoreThreadPoolSizeFactor());
+ deployState.getProperties().feedCoreThreadPoolSizeFactor(),
+ deployState.getProperties().useNewRestapiHandler());
}
private static ContainerThreadpool.UserOptions threadpoolOptions(Element spec, String elementName) {
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 2c6b30a2e6e..48d3fd6a176 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
@@ -168,6 +168,7 @@ public class ModelContextImpl implements ModelContext {
private final Quota quota;
private final boolean tlsUseFSync;
private final String tlsCompressionType;
+ private final boolean useNewRestapiHandler;
public Properties(ApplicationId applicationId,
boolean multitenantFromConfig,
@@ -234,6 +235,9 @@ public class ModelContextImpl implements ModelContext {
feedCoreThreadPoolSizeFactor = Flags.FEED_CORE_THREAD_POOL_SIZE_FACTOR.bindTo(flagSource)
.with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();
this.quota = maybeQuota.orElseGet(Quota::empty);
+ this.useNewRestapiHandler = Flags.USE_NEW_RESTAPI_HANDLER.bindTo(flagSource)
+ .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm())
+ .value();
}
@Override
@@ -326,6 +330,8 @@ public class ModelContextImpl implements ModelContext {
@Override public boolean tlsUseFSync() { return tlsUseFSync; }
@Override public String tlsCompressionType() { return tlsCompressionType; }
@Override public Quota quota() { return quota; }
+
+ @Override public boolean useNewRestapiHandler() { return useNewRestapiHandler; }
}
}
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 d42521e4f5e..87351e12108 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -416,6 +416,12 @@ public class Flags {
"The number of deserialized Node objects to store in-memory.",
"Takes effect on config server restart");
+ public static final UnboundBooleanFlag USE_NEW_RESTAPI_HANDLER = defineFeatureFlag(
+ "use-restapi-handler",
+ false,
+ "Whether application containers should use the new restapi handler implementation",
+ "Takes effect on next internal redeployment");
+
/** 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) {