From b63e8fcf5afcc0cc00ee07f2155c62d318849258 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Wed, 7 Dec 2022 13:49:39 +0000 Subject: add logctl override --- .../main/java/com/yahoo/vespa/model/ConfigSentinel.java | 3 +++ .../src/main/java/com/yahoo/vespa/model/Service.java | 3 +++ .../main/java/com/yahoo/vespa/model/admin/Admin.java | 9 +++++++++ .../model/builder/xml/dom/DomAdminBuilderBase.java | 17 +++++++++++++++++ .../vespa/model/builder/xml/dom/DomAdminV2Builder.java | 1 + .../vespa/model/builder/xml/dom/DomAdminV4Builder.java | 1 + .../vespa/model/container/ApplicationContainer.java | 11 +++++++++++ .../model/container/ApplicationContainerCluster.java | 17 +++++++++++++++++ config-model/src/main/resources/schema/admin.rnc | 16 ++++++++++++++++ 9 files changed, 78 insertions(+) (limited to 'config-model/src') diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java b/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java index 43b59abd5b5..dfb5b1d3e22 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java @@ -100,6 +100,9 @@ public class ConfigSentinel extends AbstractService implements SentinelConfig.Pr for (var entry : s.getEnvVars().entrySet()) { serviceBuilder.environ(b -> b.varname(entry.getKey()).varvalue(entry.getValue().toString())); } + for (var entry : s.getLogctlSpecs()) { + serviceBuilder.logctl(b -> b.componentSpec(entry.componentSpec).levelsModSpec(entry.levelsModSpec)); + } setPreShutdownCommand(serviceBuilder, s); return serviceBuilder; } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/Service.java b/config-model/src/main/java/com/yahoo/vespa/model/Service.java index f529b22cc45..2daa6ff66ba 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/Service.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/Service.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model; import com.yahoo.config.model.api.ServiceInfo; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -24,6 +25,8 @@ public interface Service extends ConfigProducer, NetworkPortRequestor { // environment variables specific for this service: Map getEnvVars(); + default List getLogctlSpecs() { return List.of(); } + /** * Services that wish that a command should be run before shutdown * should return the command here. The command will be executed diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java index 79f65264249..e29615b7fb3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java @@ -15,6 +15,7 @@ import com.yahoo.vespa.model.AbstractService; import com.yahoo.vespa.model.ConfigProxy; import com.yahoo.vespa.model.ConfigSentinel; import com.yahoo.vespa.model.HostResource; +import com.yahoo.vespa.model.LogctlSpec; import com.yahoo.vespa.model.Logd; import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainer; import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainerCluster; @@ -68,6 +69,14 @@ public class Admin extends AbstractConfigProducer implements Serializable this.logForwarderIncludeAdmin = includeAdmin; } + private final List logctlSpecs = new ArrayList<>(); + public List getLogctlSpecs() { + return logctlSpecs; + } + public void addLogctlCommand(String componentSpec, String levelsModSpec) { + logctlSpecs.add(new LogctlSpec(componentSpec, levelsModSpec)); + } + /** * The single cluster controller cluster shared by all content clusters by default when not multitenant. * If multitenant, this is null. diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java index 06453bffaaf..ecd4baf6b5e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java @@ -110,4 +110,21 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu } } + private void addLoggingSpec(ModelElement loggingSpec, Admin admin) { + if (loggingSpec == null) return; + String componentSpec = loggingSpec.requiredStringAttribute("name"); + String levelsModSpec = loggingSpec.requiredStringAttribute("levels"); + admin.addLogctlCommand(componentSpec, levelsModSpec); + } + + void addLoggingSpecs(ModelElement loggingElement, Admin admin) { + if (loggingElement == null) return; + for (ModelElement e : loggingElement.children("class")) { + addLoggingSpec(e, admin); + } + for (ModelElement e : loggingElement.children("package")) { + addLoggingSpec(e, admin); + } + } + } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java index ac5633a1461..10a9688d52d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java @@ -47,6 +47,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { admin.setClusterControllers(addConfiguredClusterControllers(deployState, admin, adminE), deployState); addLogForwarders(new ModelElement(adminE).child("logforwarding"), admin); + addLoggingSpecs(new ModelElement(adminE).child("logging"), admin); } private List parseConfigservers(DeployState deployState, Admin admin, Element adminE) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java index d27f78f6a8a..567ccbfa88b 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java @@ -56,6 +56,7 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { assignLogserver(deployState, requestedLogservers.orElse(createNodesSpecificationForLogserver()), admin); addLogForwarders(adminElement.child("logforwarding"), admin); + addLoggingSpecs(adminElement.child("logging"), admin); } private void assignSlobroks(DeployState deployState, NodesSpecification nodesSpecification, Admin admin) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainer.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainer.java index 1971ccc3035..53858f8cc0e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainer.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainer.java @@ -9,8 +9,10 @@ import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.search.config.QrStartConfig; +import com.yahoo.vespa.model.LogctlSpec; import com.yahoo.vespa.model.container.component.SimpleComponent; +import java.util.List; import java.util.Optional; import static com.yahoo.vespa.defaults.Defaults.getDefaults; @@ -42,6 +44,15 @@ public final class ApplicationContainer extends Container implements addComponent(new SimpleComponent("com.yahoo.container.jdisc.ClusterInfoProvider")); } + private List logctlSpecs = List.of(); + void setLogctlSpecs(List logctlSpecs) { + this.logctlSpecs = logctlSpecs; + } + @Override + public List getLogctlSpecs() { + return logctlSpecs; + } + @Override public void getConfig(QrStartConfig.Builder builder) { if (getHostResource() != null) { 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 c097f856da2..db43dfc0beb 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 @@ -31,6 +31,7 @@ import com.yahoo.vespa.config.search.core.OnnxModelsConfig; import com.yahoo.vespa.config.search.core.RankingConstantsConfig; import com.yahoo.vespa.config.search.core.RankingExpressionsConfig; import com.yahoo.vespa.model.AbstractService; +import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainer; import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Component; @@ -125,11 +126,27 @@ public final class ApplicationContainerCluster extends ContainerCluster