From 1a683d137a53b8fa56803eb39f24cc4311761ddb Mon Sep 17 00:00:00 2001 From: Simon Cooper Date: Wed, 11 Oct 2023 11:41:09 +0100 Subject: [PATCH] Backport InstrumentsConcurrencyTests fix to 8.11 (#100660) This backports #100518 to 8.11 Fixes #100251 --- .../metrics/InstrumentsConcurrencyTests.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/metrics/InstrumentsConcurrencyTests.java b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/metrics/InstrumentsConcurrencyTests.java index db4e234418612..4390fd4ac0784 100644 --- a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/metrics/InstrumentsConcurrencyTests.java +++ b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/metrics/InstrumentsConcurrencyTests.java @@ -28,12 +28,13 @@ import static org.hamcrest.Matchers.sameInstance; public class InstrumentsConcurrencyTests extends ESTestCase { - String name = "name"; - String description = "desc"; - String unit = "kg"; - Meter noopMeter = OpenTelemetry.noop().getMeter("noop"); - CountDownLatch registerLatch = new CountDownLatch(1); - Meter lockingMeter = new Meter() { + private final String name = "name"; + private final String description = "desc"; + private final String unit = "kg"; + private final Meter noopMeter = OpenTelemetry.noop().getMeter("noop"); + private final CountDownLatch buildLatch = new CountDownLatch(1); + private final CountDownLatch registerLatch = new CountDownLatch(1); + private final Meter lockingMeter = new Meter() { @Override public LongCounterBuilder counterBuilder(String name) { return new LockingLongCounterBuilder(); @@ -75,6 +76,7 @@ public DoubleCounterBuilder ofDoubles() { @Override public LongCounter build() { try { + buildLatch.countDown(); registerLatch.await(); } catch (Exception e) { throw new RuntimeException(e); @@ -88,13 +90,14 @@ public ObservableLongCounter buildWithCallback(Consumer instruments.registerLongCounter(name, description, unit)); // registerThread has a countDown latch that is simulating a long-running registration registerThread.start(); + buildLatch.await(); // wait for registerThread to hold the lock + var setProviderThread = new Thread(() -> instruments.setProvider(noopMeter)); // a setProviderThread will attempt to override a meter, but will wait to acquireLock setProviderThread.start();