diff options
Diffstat (limited to 'config-model/src/main/java')
11 files changed, 83 insertions, 10 deletions
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/LogctlSpec.java b/config-model/src/main/java/com/yahoo/vespa/model/LogctlSpec.java new file mode 100644 index 00000000000..fd959943eab --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/LogctlSpec.java @@ -0,0 +1,11 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.model; + +public class LogctlSpec { + public final String componentSpec; + public final String levelsModSpec; + public LogctlSpec(String componentSpec, String levelsModSpec) { + this.componentSpec = componentSpec; + this.levelsModSpec = levelsModSpec; + } +} 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<String, Object> getEnvVars(); + default List<LogctlSpec> 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<Admin> implements Serializable this.logForwarderIncludeAdmin = includeAdmin; } + private final List<LogctlSpec> logctlSpecs = new ArrayList<>(); + public List<LogctlSpec> 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/admin/metricsproxy/MetricsProxyContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java index 93b67407933..ab748dc1fd1 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java @@ -223,16 +223,6 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC .orElse(Collections.emptyMap()); } - private Optional<Admin> getAdmin() { - if (parent != null) { - AbstractConfigProducerRoot r = parent.getRoot(); - if (r instanceof VespaModel model) { - return Optional.ofNullable(model.getAdmin()); - } - } - return Optional.empty(); - } - private Optional<String> getSystemName() { Monitoring monitoring = getMonitoringService(); return monitoring != null && ! monitoring.getClustername().equals("") ? 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..ba4a915e255 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 @@ -5,6 +5,7 @@ import com.yahoo.config.model.ConfigModelContext.ApplicationType; import com.yahoo.config.model.api.ConfigServerSpec; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; +import com.yahoo.log.internal.LevelsModSpec; import com.yahoo.text.XML; import com.yahoo.vespa.model.Host; import com.yahoo.vespa.model.HostResource; @@ -21,7 +22,9 @@ import com.yahoo.vespa.model.admin.monitoring.builder.xml.MetricsBuilder; import org.w3c.dom.Element; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; /** @@ -110,4 +113,23 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu } } + private void addLoggingSpec(ModelElement loggingSpec, Admin admin) { + if (loggingSpec == null) return; + String componentSpec = loggingSpec.requiredStringAttribute("name"); + String levels = loggingSpec.requiredStringAttribute("levels"); + var levelSpec = new LevelsModSpec(); + levelSpec.setLevels(levels); + admin.addLogctlCommand(componentSpec, levelSpec.toLogctlModSpec()); + } + + 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<Configserver> 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<LogctlSpec> logctlSpecs = List.of(); + void setLogctlSpecs(List<LogctlSpec> logctlSpecs) { + this.logctlSpecs = logctlSpecs; + } + @Override + public List<LogctlSpec> 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..ec1776730b8 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,19 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat : defaultHeapSizePercentageOfTotalNodeMemory; } + private void wireLogctlSpecs() { + getAdmin().ifPresent(admin -> { + for (var c : getContainers()) { + c.setLogctlSpecs(admin.getLogctlSpecs()); + }}); + } + @Override protected void doPrepare(DeployState deployState) { addAndSendApplicationBundles(deployState); sendUserConfiguredFiles(deployState); createEndpointList(deployState); + wireLogctlSpecs(); } private void addAndSendApplicationBundles(DeployState 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 f1b3c74a55d..f94c3be25bb 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 @@ -36,6 +36,8 @@ import com.yahoo.search.query.profile.config.QueryProfilesConfig; import com.yahoo.vespa.configdefinition.IlscriptsConfig; import com.yahoo.vespa.model.PortsMeta; import com.yahoo.vespa.model.Service; +import com.yahoo.vespa.model.VespaModel; +import com.yahoo.vespa.model.admin.Admin; import com.yahoo.vespa.model.admin.monitoring.Monitoring; import com.yahoo.vespa.model.clients.ContainerDocumentApi; import com.yahoo.vespa.model.container.component.AccessLogComponent; @@ -208,6 +210,17 @@ public abstract class ContainerCluster<CONTAINER extends Container> return zone; } + protected Optional<Admin> getAdmin() { + var parent = getParent(); + if (parent != null) { + var r = parent.getRoot(); + if (r instanceof VespaModel model) { + return Optional.ofNullable(model.getAdmin()); + } + } + return Optional.empty(); + } + public void addDefaultHandlersWithVip() { addDefaultHandlersExceptStatus(); addVipHandler(); |