From bacf22c1950434659874c557663a7b545cf6eea5 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Thu, 7 Jul 2022 12:06:18 +0200 Subject: Only add bundles based on enabled features for standalone container --- .../vespa/model/clients/ContainerDocumentApi.java | 9 +++++++++ .../model/container/ApplicationContainerCluster.java | 9 --------- .../yahoo/vespa/model/container/ContainerCluster.java | 18 ++++++++++++++++++ .../model/container/docproc/ContainerDocproc.java | 15 ++++++++------- .../vespa/model/container/search/ContainerSearch.java | 1 + .../model/container/xml/ContainerModelBuilder.java | 3 +++ .../java/com/yahoo/vespa/model/content/Content.java | 1 + 7 files changed, 40 insertions(+), 16 deletions(-) (limited to 'config-model') 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 15a0e060e1c..33c125dcecf 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 @@ -7,10 +7,12 @@ import com.yahoo.container.handler.threadpool.ContainerThreadpoolConfig; import com.yahoo.osgi.provider.model.ComponentModel; import com.yahoo.vespa.model.container.ContainerCluster; import com.yahoo.vespa.model.container.ContainerThreadpool; +import com.yahoo.vespa.model.container.PlatformBundles; import com.yahoo.vespa.model.container.component.Handler; import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.component.UserBindingPattern; +import java.nio.file.Path; import java.util.Collection; import java.util.Collections; @@ -21,6 +23,8 @@ import java.util.Collections; public class ContainerDocumentApi { public static final String DOCUMENT_V1_PREFIX = "/document/v1"; + public static final Path VESPACLIENT_CONTAINER_BUNDLE = + PlatformBundles.absoluteBundlePath("vespaclient-container-plugin"); private final boolean ignoreUndefinedFields; @@ -28,6 +32,11 @@ public class ContainerDocumentApi { this.ignoreUndefinedFields = ignoreUndefinedFields; addRestApiHandler(cluster, handlerOptions); addFeedHandler(cluster, handlerOptions); + addVespaClientContainerBundle(cluster); + } + + public static void addVespaClientContainerBundle(ContainerCluster c) { + c.addPlatformBundle(VESPACLIENT_CONTAINER_BUNDLE); } private static void addFeedHandler(ContainerCluster cluster, HandlerOptions handlerOptions) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java index 9785858b338..937d7cf58d3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java @@ -78,7 +78,6 @@ public final class ApplicationContainerCluster extends ContainerCluster applicationBundles = new LinkedHashSet<>(); private final Set previousHosts; @@ -116,18 +115,10 @@ public final class ApplicationContainerCluster extends ContainerCluster bundles = Set.of( - "container-search-and-docproc", "container-search-gui", "docprocs", - "linguistics-components", "vespaclient-container-plugin"); - bundles.forEach(b -> addPlatformBundle(PlatformBundles.absoluteBundlePath(b))); - } - @Override protected void doPrepare(DeployState deployState) { addAndSendApplicationBundles(deployState); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index 6b6192a04ef..2385b5b3812 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -70,6 +70,8 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.TreeSet; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Parent class for all container cluster types. @@ -126,6 +128,10 @@ public abstract class ContainerCluster public static final BindingPattern VIP_HANDLER_BINDING = SystemBindingPattern.fromHttpPath("/status.html"); + public static final Set SEARCH_AND_DOCPROC_BUNDLES = Stream.of( + PlatformBundles.searchAndDocprocBundle, "container-search-gui", "docprocs", "linguistics-components") + .map(PlatformBundles::absoluteBundlePath).collect(Collectors.toSet()); + private final String name; protected List containers = new ArrayList<>(); @@ -388,6 +394,18 @@ public abstract class ContainerCluster return Collections.unmodifiableCollection(allComponents); } + /* + Add all search/docproc/feed related platform bundles. + This is only required for configured containers as the platform bundle set is not allowed to change between config generations. + For standalone container platform bundles can be added on features enabled as an update of application package requires restart. + */ + public void addAllPlatformBundles() { + ContainerDocumentApi.addVespaClientContainerBundle(this); + addSearchAndDocprocBundles(); + } + + public void addSearchAndDocprocBundles() { SEARCH_AND_DOCPROC_BUNDLES.forEach(this::addPlatformBundle); } + private void recursivelyFindAllComponents(Collection> allComponents, AbstractConfigProducer current) { for (AbstractConfigProducer child: current.getChildren().values()) { if (child instanceof Component) diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java b/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java index f2233680e9b..fee10b965aa 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java @@ -27,29 +27,29 @@ public class ContainerDocproc extends ContainerSubsystem public final Options options; // Whether or not to prefer sending to a local node. - private boolean preferLocalNode = false; + private final boolean preferLocalNode = false; // The number of nodes to use per client. - private int numNodesPerClient = 0; + private final int numNodesPerClient = 0; - private Map, String> fieldNameSchemaMap = new HashMap<>(); + private final Map, String> fieldNameSchemaMap = new HashMap<>(); - public ContainerDocproc(ContainerCluster cluster, DocprocChains chains) { + public ContainerDocproc(ContainerCluster cluster, DocprocChains chains) { this(cluster, chains, new Options( null, null, null, null, null, null)); } - public ContainerDocproc(ContainerCluster cluster, DocprocChains chains, Options options) { + public ContainerDocproc(ContainerCluster cluster, DocprocChains chains, Options options) { this(cluster, chains, options, true); } private void addSource( - final ContainerCluster cluster, final String name, final SessionConfig.Type.Enum type) { + final ContainerCluster cluster, final String name, final SessionConfig.Type.Enum type) { final MbusClient mbusClient = new MbusClient(name, type); mbusClient.addClientBindings(SystemBindingPattern.fromPattern("mbus://*/" + mbusClient.getSessionName())); cluster.addComponent(mbusClient); } - public ContainerDocproc(ContainerCluster cluster, DocprocChains chains, Options options, boolean addSourceClientProvider) { + public ContainerDocproc(ContainerCluster cluster, DocprocChains chains, Options options, boolean addSourceClientProvider) { super(chains); assert (options != null) : "Null Options for " + this + " under cluster " + cluster.getName(); this.options = options; @@ -58,6 +58,7 @@ public class ContainerDocproc extends ContainerSubsystem addSource(cluster, "source", SessionConfig.Type.SOURCE); addSource(cluster, MbusRequestContext.internalNoThrottledSource, SessionConfig.Type.INTERNAL); } + cluster.addSearchAndDocprocBundles(); } public boolean isPreferLocalNode() { 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 58151063956..3ac12381a1f 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 @@ -59,6 +59,7 @@ public class ContainerSearch extends ContainerSubsystem owningCluster.addComponent(Component.fromClassAndBundle(QUERY_PROFILE_REGISTRY_CLASS, searchAndDocprocBundle)); owningCluster.addComponent(Component.fromClassAndBundle(com.yahoo.search.schema.SchemaInfo.class.getName(), searchAndDocprocBundle)); owningCluster.addComponent(Component.fromClassAndBundle(SearchStatusExtension.class.getName(), searchAndDocprocBundle)); + cluster.addSearchAndDocprocBundles(); } public void connectSearchClusters(Map searchClusters) { 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 7cc1109f25f..1c47f1d7c9c 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 @@ -205,6 +205,8 @@ public class ContainerModelBuilder extends ConfigModelBuilder { addServerProviders(deployState, spec, cluster); + if (!standaloneBuilder) cluster.addAllPlatformBundles(); + // Must be added after nodes: addDeploymentSpecConfig(cluster, context, deployState.getDeployLogger()); addZooKeeper(cluster, spec); @@ -595,6 +597,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder { Element processingElement = XML.getChild(spec, "processing"); if (processingElement == null) return; + cluster.addSearchAndDocprocBundles(); addIncludes(processingElement); cluster.setProcessingChains(new DomProcessingBuilder(null).build(deployState, cluster, processingElement), serverBindings(processingElement, ProcessingChains.defaultBindings).toArray(BindingPattern[]::new)); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java b/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java index d4595b3adfd..22923a724a6 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java @@ -298,6 +298,7 @@ public class Content extends ConfigModel { content.ownedIndexingCluster = Optional.of(indexingCluster); indexingCluster.addDefaultHandlersWithVip(); + indexingCluster.addAllPlatformBundles(); addDocproc(indexingCluster); List nodes = new ArrayList<>(); -- cgit v1.2.3