diff options
Diffstat (limited to 'container-disc/src/main/java/com')
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java | 17 |
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) { |