aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-03 11:20:29 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-03 11:20:29 +0100
commit7adc1225e6494e8b5b23dcf8800c4a752ff6a7cc (patch)
treef05c2d5ca6bcd5a1c32b5fcd628332062dd26e26
parentc56b3b30489a279223c9b06760f34da124b7e587 (diff)
Use new restapi handler implementation by default
Remove feature flag for enabling the new handler. Cleanup wiring of old and new handler in model.
-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/clients/ContainerDocumentApi.java47
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java10
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java8
-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.java7
6 files changed, 28 insertions, 52 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 7ab1a6ab0cb..1973c1b52d0 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
@@ -121,7 +121,7 @@ public interface ModelContext {
}
// TODO(bjorncs): Temporary feature flag
- default boolean useNewRestapiHandler() { return false; }
+ default boolean useNewRestapiHandler() { return true; }
// TODO(mortent): Temporary feature flag
default boolean useAccessControlTlsHandshakeClientAuth() { 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 6ad81c90107..05502daf10e 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
@@ -30,42 +30,34 @@ public class ContainerDocumentApi {
private static void addFeedHandler(ContainerCluster<?> cluster, Options options) {
String bindingSuffix = ContainerCluster.RESERVED_URI_PREFIX + "/feedapi";
- var handler = newVespaClientHandler(
- "com.yahoo.vespa.http.server.FeedHandler", bindingSuffix, options);
+ var handler = newVespaClientHandler("com.yahoo.vespa.http.server.FeedHandler", bindingSuffix, options);
cluster.addComponent(handler);
- var executor = new Threadpool(
- "feedapi-handler", cluster, options.feedApiThreadpoolOptions);
+ var executor = new Threadpool("feedapi-handler", cluster, options.feedApiThreadpoolOptions);
handler.inject(executor);
handler.addComponent(executor);
}
private static void addRestApiHandler(ContainerCluster<?> cluster, Options options) {
- // TODO(bjorncs,jonmv) Cleanup once old restapi handler is gone
- // We need to include the old handler implementation even when the new handler is enabled
- // The internal legacy test framework requires that the name of the old handler is listed in /ApplicationStatus
- String oldHandlerName = "com.yahoo.document.restapi.resource.RestApi";
- String bindingSuffix = "/document/v1/*";
- var oldHandler = newVespaClientHandler(oldHandlerName, options.useNewRestapiHandler ? null : bindingSuffix, options);
- cluster.addComponent(oldHandler);
- var executor = new Threadpool("restapi-handler", cluster, /*userOptions*/null);
- oldHandler.inject(executor);
- oldHandler.addComponent(executor);
+ var handler = newVespaClientHandler("com.yahoo.document.restapi.resource.DocumentV1ApiHandler", "/document/v1/*", options);
+ cluster.addComponent(handler);
- if (options.useNewRestapiHandler) {
- String newHandlerName = "com.yahoo.document.restapi.resource.DocumentV1ApiHandler";
- var newHandler = newVespaClientHandler(newHandlerName, bindingSuffix, options);
- cluster.addComponent(newHandler);
- }
+ // We need to include a dummy implementation of the previous restapi handler (using the same class name).
+ // The internal legacy test framework requires that the name of the old handler is listed in /ApplicationStatus.
+ var oldHandlerDummy = handlerComponentSpecification("com.yahoo.document.restapi.resource.RestApi");
+ cluster.addComponent(oldHandlerDummy);
+
+ // TODO(bjorncs,jonmv) Remove threadpool once RestApi handler is reduced to a dummy
+ var executor = new Threadpool("restapi-handler", cluster, /*userOptions*/null);
+ oldHandlerDummy.inject(executor);
+ oldHandlerDummy.addComponent(executor);
}
private static Handler<AbstractConfigProducer<?>> newVespaClientHandler(
String componentId,
String bindingSuffix,
Options options) {
- Handler<AbstractConfigProducer<?>> handler = new Handler<>(new ComponentModel(
- BundleInstantiationSpecification.getFromStrings(componentId, null, "vespaclient-container-plugin"), ""));
- if (bindingSuffix == null) return handler; // TODO(bjorncs,jonmv) Cleanup once old restapi handler is gone
+ Handler<AbstractConfigProducer<?>> handler = handlerComponentSpecification(componentId);
if (options.bindings.isEmpty()) {
handler.addServerBindings(
SystemBindingPattern.fromHttpPath(bindingSuffix),
@@ -81,17 +73,18 @@ public class ContainerDocumentApi {
return handler;
}
+ private static Handler<AbstractConfigProducer<?>> handlerComponentSpecification(String className) {
+ return new Handler<>(new ComponentModel(
+ BundleInstantiationSpecification.getFromStrings(className, null, "vespaclient-container-plugin"), ""));
+ }
+
public static final class Options {
private final Collection<String> bindings;
private final ContainerThreadpool.UserOptions feedApiThreadpoolOptions;
- private final boolean useNewRestapiHandler;
- public Options(Collection<String> bindings,
- ContainerThreadpool.UserOptions feedApiThreadpoolOptions,
- boolean useNewRestapiHandler) {
+ public Options(Collection<String> bindings, ContainerThreadpool.UserOptions feedApiThreadpoolOptions) {
this.bindings = Collections.unmodifiableCollection(bindings);
this.feedApiThreadpoolOptions = feedApiThreadpoolOptions;
- this.useNewRestapiHandler = useNewRestapiHandler;
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index 37dd97a49b1..d76d177fd21 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -180,7 +180,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
addProcessing(deployState, spec, cluster);
addSearch(deployState, spec, cluster);
addDocproc(deployState, spec, cluster);
- addDocumentApi(deployState, spec, cluster); // NOTE: Must be done after addSearch
+ addDocumentApi(spec, cluster); // NOTE: Must be done after addSearch
cluster.addDefaultHandlersExceptStatus();
addStatusHandlers(cluster, context.getDeployState().isHosted());
@@ -401,8 +401,8 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
cluster.addServlet(new ServletBuilder().build(deployState, cluster, servletElem));
}
- private void addDocumentApi(DeployState deployState, Element spec, ApplicationContainerCluster cluster) {
- ContainerDocumentApi containerDocumentApi = buildDocumentApi(deployState, cluster, spec);
+ private void addDocumentApi(Element spec, ApplicationContainerCluster cluster) {
+ ContainerDocumentApi containerDocumentApi = buildDocumentApi(cluster, spec);
if (containerDocumentApi == null) return;
cluster.setDocumentApi(containerDocumentApi);
@@ -829,11 +829,11 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
return result;
}
- private ContainerDocumentApi buildDocumentApi(DeployState deployState, ApplicationContainerCluster cluster, Element spec) {
+ private ContainerDocumentApi buildDocumentApi(ApplicationContainerCluster cluster, Element spec) {
Element documentApiElement = XML.getChild(spec, "document-api");
if (documentApiElement == null) return null;
- ContainerDocumentApi.Options documentApiOptions = DocumentApiOptionsBuilder.build(deployState, documentApiElement);
+ ContainerDocumentApi.Options documentApiOptions = DocumentApiOptionsBuilder.build(documentApiElement);
return new ContainerDocumentApi(cluster, documentApiOptions);
}
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 b5f77157be1..b991608eb48 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
@@ -1,7 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.container.xml;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.text.XML;
import com.yahoo.vespa.model.clients.ContainerDocumentApi;
import com.yahoo.vespa.model.container.ContainerThreadpool;
@@ -20,11 +19,8 @@ public class DocumentApiOptionsBuilder {
private static final Logger log = Logger.getLogger(DocumentApiOptionsBuilder.class.getName());
- public static ContainerDocumentApi.Options build(DeployState deployState, Element spec) {
- return new ContainerDocumentApi.Options(
- getBindings(spec),
- threadpoolOptions(spec, "http-client-api"),
- deployState.getProperties().useNewRestapiHandler());
+ public static ContainerDocumentApi.Options build(Element spec) {
+ return new ContainerDocumentApi.Options(getBindings(spec), threadpoolOptions(spec, "http-client-api"));
}
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 c5b2920babe..6bf00ba48d3 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
@@ -162,7 +162,6 @@ public class ModelContextImpl implements ModelContext {
private final Optional<AthenzDomain> athenzDomain;
private final Optional<ApplicationRoles> applicationRoles;
private final Quota quota;
- private final boolean useNewRestapiHandler;
private final boolean useAccessControlTlsHandshakeClientAuth;
private final double jettyThreadpoolSizeFactor;
@@ -219,9 +218,6 @@ public class ModelContextImpl implements ModelContext {
this.athenzDomain = athenzDomain;
this.applicationRoles = applicationRoles;
this.quota = maybeQuota.orElseGet(Quota::unlimited);
- this.useNewRestapiHandler = Flags.USE_NEW_RESTAPI_HANDLER.bindTo(flagSource)
- .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm())
- .value();
this.useAccessControlTlsHandshakeClientAuth =
Flags.USE_ACCESS_CONTROL_CLIENT_AUTHENTICATION.bindTo(flagSource)
.with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm())
@@ -308,8 +304,6 @@ public class ModelContextImpl implements ModelContext {
@Override public boolean skipMbusReplyThread() { return skipMbusReplyThread; }
@Override public Quota quota() { return quota; }
- @Override public boolean useNewRestapiHandler() { return useNewRestapiHandler; }
-
@Override public boolean useAccessControlTlsHandshakeClientAuth() { return useAccessControlTlsHandshakeClientAuth; }
@Override public double jettyThreadpoolSizeFactor() { return jettyThreadpoolSizeFactor; }
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 bf3b497bc3f..ab12558bec7 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -6,7 +6,6 @@ import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.flags.custom.HostCapacity;
import com.yahoo.vespa.flags.custom.SharedHost;
-import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.TreeMap;
@@ -303,12 +302,6 @@ public class Flags {
"Takes effect at next run of maintainer",
APPLICATION_ID);
- public static final UnboundBooleanFlag USE_NEW_RESTAPI_HANDLER = defineFeatureFlag(
- "use-new-restapi-handler",
- false,
- "Whether application containers should use the new restapi handler implementation",
- "Takes effect on next internal redeployment");
-
public static final UnboundBooleanFlag USE_ACCESS_CONTROL_CLIENT_AUTHENTICATION = defineFeatureFlag(
"use-access-control-client-authentication",
false,