summaryrefslogtreecommitdiffstats
path: root/container-disc
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-12-09 16:57:41 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-12-09 16:57:41 +0100
commit46696ca0131888d1db904f6b321a3571906c7585 (patch)
tree46822ed73edad2a4b187a4b4ae943608b6e0b782 /container-disc
parentb340d5e7985ad8604a15103e6e30d4a36caa2732 (diff)
Add metric for failed construction of component graph
Diffstat (limited to 'container-disc')
-rw-r--r--container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java17
1 files changed, 14 insertions, 3 deletions
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 f32d7dfbb02..835326e0904 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
@@ -9,7 +9,6 @@ import com.yahoo.component.provider.ComponentRegistry;
import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.subscription.ConfigInterruptedException;
-import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.container.Container;
import com.yahoo.container.QrConfig;
import com.yahoo.container.core.ChainsConfig;
@@ -38,7 +37,6 @@ import com.yahoo.jrt.Supervisor;
import com.yahoo.jrt.Transport;
import com.yahoo.jrt.slobrok.api.Register;
import com.yahoo.jrt.slobrok.api.SlobrokList;
-import java.util.logging.Level;
import com.yahoo.log.LogSetup;
import com.yahoo.messagebus.network.rpc.SlobrokConfigSubscriber;
import com.yahoo.net.HostName;
@@ -271,11 +269,12 @@ public final class ConfiguredApplication implements Application {
} catch (ConfigInterruptedException e) {
break;
} catch (Exception | LinkageError e) { // LinkageError: OSGi problems
+ tryReportFailedComponentGraphConstructionMetric(configurer, e);
log.log(Level.SEVERE,
"Reconfiguration failed, your application package must be fixed, unless this is a " +
"JNI reload issue: " + Exceptions.toMessageString(e), e);
} catch (Error e) {
- com.yahoo.protect.Process.logAndDie("java.lang.Error on reconfiguration: We are probably in " +
+ com.yahoo.protect.Process.logAndDie("java.lang.Error on reconfiguration: We are probably in " +
"a bad state and will terminate", e);
}
}
@@ -284,6 +283,18 @@ public final class ConfiguredApplication implements Application {
reconfigurerThread.start();
}
+ private static void tryReportFailedComponentGraphConstructionMetric(HandlersConfigurerDi configurer, Throwable error) {
+ try {
+ // We need the Metric instance from previous component graph to report metric values
+ // Metric may not be available if this is the initial component graph (since metric wiring is done through the config model)
+ Metric metric = configurer.getComponent(Metric.class);
+ Metric.Context metricContext = metric.createContext(Map.of("exception", error.getClass().getSimpleName()));
+ metric.add("jdisc.application.failed_component_graphs", 1L, metricContext);
+ } catch (Exception e) {
+ log.log(Level.WARNING, "Failed to report metric for failed component graph: " + e.getMessage(), e);
+ }
+ }
+
private static void installServerProviders(ContainerBuilder builder) {
List<ServerProvider> serverProviders = Container.get().getServerProviderRegistry().allComponents();
for (ServerProvider server : serverProviders) {