summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2020-09-20 23:13:31 +0200
committerGitHub <noreply@github.com>2020-09-20 23:13:31 +0200
commit05fe5d5d0f5a140281dc1d3d89beb7b0dcfbef98 (patch)
treecb79fbec9bd709913fbfb70532087746f8f6692c
parent2c193d74d00dd3c3fa90b347ec77fcea828cce2f (diff)
parentcd4aef9fb8485524d393ce941ab9986d48a37896 (diff)
Merge pull request #14457 from vespa-engine/bratseth/application-generation-metric
Emit the application config generation as a metric
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java2
-rw-r--r--container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java40
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java4
-rw-r--r--container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java27
4 files changed, 39 insertions, 34 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java
index f6f51ed91fb..acf9340fa7c 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java
@@ -16,7 +16,7 @@ public class AutoscalingMetrics {
private static MetricSet create() {
return new MetricSet("autoscaling",
- metrics("cpu.util", "mem_total.util", "disk.util"));
+ metrics("cpu.util", "mem_total.util", "disk.util", "application_generation"));
}
private static Set<Metric> metrics(String ... names) {
diff --git a/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java b/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java
index 25299978ecd..ec80c568489 100644
--- a/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java
+++ b/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java
@@ -50,24 +50,6 @@ public class HandlersConfigurerDi {
private static final Logger log = Logger.getLogger(HandlersConfigurerDi.class.getName());
- public static class RegistriesHack {
-
- @Inject
- public RegistriesHack(com.yahoo.container.Container vespaContainer,
- ComponentRegistry<AbstractComponent> allComponents,
- ComponentRegistry<RequestHandler> requestHandlerRegistry,
- ComponentRegistry<ClientProvider> clientProviderRegistry,
- ComponentRegistry<ServerProvider> serverProviderRegistry) {
- log.log(Level.FINE, "RegistriesHack.init " + System.identityHashCode(this));
-
- vespaContainer.setComponentRegistry(allComponents);
- vespaContainer.setRequestHandlerRegistry(requestHandlerRegistry);
- vespaContainer.setClientProviderRegistry(clientProviderRegistry);
- vespaContainer.setServerProviderRegistry(serverProviderRegistry);
- }
-
- }
-
private final com.yahoo.container.Container vespaContainer;
private final Container container;
@@ -154,7 +136,6 @@ public class HandlersConfigurerDi {
restartOnRedeploy);
}
- @SuppressWarnings("deprecation")
private Injector createFallbackInjector(com.yahoo.container.Container vespaContainer, Injector discInjector) {
return discInjector.createChildInjector(new AbstractModule() {
@Override
@@ -182,4 +163,25 @@ public class HandlersConfigurerDi {
container.shutdown(currentGraph, deconstructor);
}
+ /** Returns the currently active application configuration generation */
+ public long generation() { return currentGraph.generation(); }
+
+ public static class RegistriesHack {
+
+ @Inject
+ public RegistriesHack(com.yahoo.container.Container vespaContainer,
+ ComponentRegistry<AbstractComponent> allComponents,
+ ComponentRegistry<RequestHandler> requestHandlerRegistry,
+ ComponentRegistry<ClientProvider> clientProviderRegistry,
+ ComponentRegistry<ServerProvider> serverProviderRegistry) {
+ log.log(Level.FINE, "RegistriesHack.init " + System.identityHashCode(this));
+
+ vespaContainer.setComponentRegistry(allComponents);
+ vespaContainer.setRequestHandlerRegistry(requestHandlerRegistry);
+ vespaContainer.setClientProviderRegistry(clientProviderRegistry);
+ vespaContainer.setServerProviderRegistry(serverProviderRegistry);
+ }
+
+ }
+
}
diff --git a/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java
index a054ef5ffe0..256c965052a 100644
--- a/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java
@@ -50,8 +50,8 @@ public class ComponentGraph {
private static final Logger log = Logger.getLogger(ComponentGraph.class.getName());
- private long generation;
- private Map<ComponentId, Node> nodesById = new HashMap<>();
+ private final long generation;
+ private final Map<ComponentId, Node> nodesById = new HashMap<>();
public ComponentGraph(long generation) {
this.generation = generation;
diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java
index 226107c24b8..4614f8f9857 100644
--- a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java
+++ b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java
@@ -65,20 +65,12 @@ import static com.yahoo.collections.CollectionUtil.first;
*/
public final class ConfiguredApplication implements Application {
- public static final class ApplicationContext {
-
- final JdiscBindingsConfig discBindingsConfig;
-
- public ApplicationContext(com.yahoo.container.jdisc.JdiscBindingsConfig discBindingsConfig) {
- this.discBindingsConfig = discBindingsConfig;
- }
- }
-
private static final Logger log = Logger.getLogger(ConfiguredApplication.class.getName());
private static final Set<ClientProvider> startedClients = Collections.newSetFromMap(new WeakHashMap<>());
private static final Set<ServerProvider> startedServers = Collections.newSetFromMap(new IdentityHashMap<>());
private final SubscriberFactory subscriberFactory;
+ private final Metric metric;
private final ContainerActivator activator;
private final String configId;
private final OsgiFramework osgiFramework;
@@ -97,7 +89,6 @@ public final class ConfiguredApplication implements Application {
new ComponentRegistry<>(),
new ComponentRegistry<>());
private final OsgiFramework restrictedOsgiFramework;
- private volatile int applicationSerialNo = 0;
private HandlersConfigurerDi configurer;
private ScheduledThreadPoolExecutor shutdownDeadlineExecutor;
private Thread reconfigurerThread;
@@ -127,11 +118,13 @@ public final class ConfiguredApplication implements Application {
public ConfiguredApplication(ContainerActivator activator,
OsgiFramework osgiFramework,
com.yahoo.jdisc.Timer timer,
- SubscriberFactory subscriberFactory) {
+ SubscriberFactory subscriberFactory,
+ Metric metric) {
this.activator = activator;
this.osgiFramework = osgiFramework;
this.timerSingleton = timer;
this.subscriberFactory = subscriberFactory;
+ this.metric = metric;
this.configId = System.getProperty("config.id");
this.slobrokConfigSubscriber = (subscriberFactory instanceof CloudSubscriberFactory)
? Optional.of(new SlobrokConfigSubscriber(configId))
@@ -256,7 +249,8 @@ public final class ConfiguredApplication implements Application {
startAndStopServers();
log.info("Switching to the latest deployed set of configurations and components. " +
- "Application switch number: " + (applicationSerialNo++));
+ "Application config generation: " + configurer.generation());
+ metric.set("application_generation", configurer.generation(), metric.createContext(Map.of()));
}
private ContainerBuilder createBuilderWithGuiceBindings() {
@@ -427,4 +421,13 @@ public final class ConfiguredApplication implements Application {
}
}
+ public static final class ApplicationContext {
+
+ final JdiscBindingsConfig discBindingsConfig;
+
+ public ApplicationContext(com.yahoo.container.jdisc.JdiscBindingsConfig discBindingsConfig) {
+ this.discBindingsConfig = discBindingsConfig;
+ }
+ }
+
}