diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-25 13:09:42 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-25 13:11:53 +0200 |
commit | cfa3aafbbff8c8da64bbce1df5885744b6389ab6 (patch) | |
tree | 5074a3b85097f05e89fd36249ad47298d0605187 | |
parent | 7402fb06bc996ec63c478420c25e620034be7f9b (diff) |
Add feature flag to enable new restapi handler
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) { |