From d4b3af45dd2b4efb813b4469e2be1b67c2d2abea Mon Sep 17 00:00:00 2001 From: Nikita Kudrin Date: Fri, 18 Aug 2023 17:12:27 +0300 Subject: [PATCH] [ide driver] Using lazy tracer initialization for JMX Invoker since too early init led to NoopOpenTelemetryManager init GitOrigin-RevId: c0bbe665073a7345050d33ae16fb378993ff93d4 --- .../telemetry-impl/src/TelemetryManagerImpl.kt | 4 ++-- .../src/com/intellij/driver/impl/Invoker.java | 15 +++++++++++---- .../com/intellij/driver/impl/InvokerMBean.java | 4 ++-- .../jetbrains/performancePlugin/ProjectLoaded.kt | 2 +- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/platform/diagnostic/telemetry-impl/src/TelemetryManagerImpl.kt b/platform/diagnostic/telemetry-impl/src/TelemetryManagerImpl.kt index a3fc816c9b1b..2a35b52feab3 100644 --- a/platform/diagnostic/telemetry-impl/src/TelemetryManagerImpl.kt +++ b/platform/diagnostic/telemetry-impl/src/TelemetryManagerImpl.kt @@ -84,7 +84,7 @@ class TelemetryManagerImpl(app: Application) : TelemetryManager { } override fun forceFlushMetrics() { - logger().info("Forcing metrics flushing ...") + logger().info("Forcing flushing OpenTelemetry metrics ...") listOf( sdk.sdkMeterProvider.forceFlush(), @@ -93,7 +93,7 @@ class TelemetryManagerImpl(app: Application) : TelemetryManager { aggregatedMetricExporter.flush().join(10, TimeUnit.SECONDS) - logger().info("Metrics are flushed") + logger().info("OpenTelemetry metrics were flushed") } } diff --git a/platform/remote-driver/core/src/com/intellij/driver/impl/Invoker.java b/platform/remote-driver/core/src/com/intellij/driver/impl/Invoker.java index 5b6821697573..f3d99a6721ac 100644 --- a/platform/remote-driver/core/src/com/intellij/driver/impl/Invoker.java +++ b/platform/remote-driver/core/src/com/intellij/driver/impl/Invoker.java @@ -15,8 +15,10 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.BuildNumber; +import com.intellij.openapi.util.ClearableLazyValue; import com.intellij.platform.diagnostic.telemetry.IJTracer; import com.intellij.util.ExceptionUtil; +import com.intellij.util.containers.ContainerUtil; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanBuilder; import io.opentelemetry.context.Context; @@ -47,12 +49,17 @@ public class Invoker implements InvokerMBean { private final Map> adhocReferenceMap = new ConcurrentHashMap<>(); - private final IJTracer tracer; + private final ClearableLazyValue tracer; private final Supplier timedContextSupplier; - public Invoker(@NotNull IJTracer tracer, @NotNull Supplier timedContextSupplier) { + public Invoker(@NotNull Supplier tracerSupplier, @NotNull Supplier timedContextSupplier) { this.timedContextSupplier = timedContextSupplier; - this.tracer = tracer; + this.tracer = new ClearableLazyValue<>() { + @Override + protected @NotNull IJTracer compute() { + return tracerSupplier.get(); + } + }; } @Override @@ -269,7 +276,7 @@ public class Invoker implements InvokerMBean { } } else { - SpanBuilder spanBuilder = tracer.spanBuilder(call.getTimedSpan()) + SpanBuilder spanBuilder = tracer.getValue().spanBuilder(call.getTimedSpan()) .setParent(timedContextSupplier.get()); Span span = spanBuilder.startSpan(); diff --git a/platform/remote-driver/core/src/com/intellij/driver/impl/InvokerMBean.java b/platform/remote-driver/core/src/com/intellij/driver/impl/InvokerMBean.java index 4c95b73f7320..bd2f8ff3de8a 100644 --- a/platform/remote-driver/core/src/com/intellij/driver/impl/InvokerMBean.java +++ b/platform/remote-driver/core/src/com/intellij/driver/impl/InvokerMBean.java @@ -22,9 +22,9 @@ public interface InvokerMBean { void cleanup(int sessionId); - static void register(IJTracer tracer, Supplier timedContextSupplier) throws JMException { + static void register(Supplier tracerSupplier, Supplier timedContextSupplier) throws JMException { ObjectName objectName = new ObjectName("com.intellij.driver:type=Invoker"); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); - server.registerMBean(new Invoker(tracer, timedContextSupplier), objectName); + server.registerMBean(new Invoker(tracerSupplier, timedContextSupplier), objectName); } } diff --git a/plugins/performanceTesting/src/com/jetbrains/performancePlugin/ProjectLoaded.kt b/plugins/performanceTesting/src/com/jetbrains/performancePlugin/ProjectLoaded.kt index f5491d7f5e87..aef8d2ac7573 100644 --- a/plugins/performanceTesting/src/com/jetbrains/performancePlugin/ProjectLoaded.kt +++ b/plugins/performanceTesting/src/com/jetbrains/performancePlugin/ProjectLoaded.kt @@ -125,7 +125,7 @@ class ProjectLoaded : InitProjectActivityJavaShim(), ApplicationInitializedListe override suspend fun execute(asyncScope: CoroutineScope) { if (System.getProperty("com.sun.management.jmxremote") == "true") { - InvokerMBean.register(PerformanceTestSpan.TRACER) { PerformanceTestSpan.getContext() } + InvokerMBean.register({ PerformanceTestSpan.TRACER }, { PerformanceTestSpan.getContext() }) } if (ApplicationManagerEx.getApplicationEx().isLightEditMode) {