diff --git a/sdk/src/main/java/io/opentelemetry/sdk/trace/RandomIdsGenerator.java b/sdk/src/main/java/io/opentelemetry/sdk/trace/RandomIdsGenerator.java index 9319927a1c..bd93a4df28 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/trace/RandomIdsGenerator.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/trace/RandomIdsGenerator.java @@ -21,20 +21,21 @@ import io.opentelemetry.trace.TraceId; import java.util.Random; final class RandomIdsGenerator implements IdsGenerator { - private static final long INVALID_ID = 0; - // TODO change with ThreadLocal version - // https://github.com/open-telemetry/opentelemetry-java/issues/406 - private final Random random; - RandomIdsGenerator(Random random) { - this.random = random; - } + private static final ThreadLocal threadLocalRandom = + new ThreadLocal() { + @Override + protected Random initialValue() { + return new Random(); + } + }; + private static final long INVALID_ID = 0; @Override public SpanId generateSpanId() { long id; do { - id = random.nextLong(); + id = threadLocalRandom.get().nextLong(); } while (id == INVALID_ID); return new SpanId(id); } @@ -44,6 +45,7 @@ final class RandomIdsGenerator implements IdsGenerator { long idHi; long idLo; do { + Random random = threadLocalRandom.get(); idHi = random.nextLong(); idLo = random.nextLong(); } while (idHi == INVALID_ID && idLo == INVALID_ID); diff --git a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkRegistry.java b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkRegistry.java index f3bd68f9d2..cbac3e0615 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkRegistry.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkRegistry.java @@ -24,7 +24,6 @@ import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.config.TraceConfig; import io.opentelemetry.trace.Tracer; import io.opentelemetry.trace.TracerRegistry; -import java.security.SecureRandom; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; @@ -51,9 +50,7 @@ public class TracerSdkRegistry implements TracerRegistry { */ public static TracerSdkRegistry create() { return new TracerSdkRegistry( - MillisClock.getInstance(), - new RandomIdsGenerator(new SecureRandom()), - EnvVarResource.getResource()); + MillisClock.getInstance(), new RandomIdsGenerator(), EnvVarResource.getResource()); } private TracerSdkRegistry(Clock clock, IdsGenerator idsGenerator, Resource resource) { diff --git a/sdk/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java b/sdk/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java index d12041a015..5b9f95fd63 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java @@ -39,7 +39,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -63,7 +62,7 @@ public class RecordEventsReadableSpanTest { private static final String SPAN_NEW_NAME = "NewName"; private static final long NANOS_PER_SECOND = TimeUnit.SECONDS.toNanos(1); private static final long MILLIS_PER_SECOND = TimeUnit.SECONDS.toMillis(1); - private final IdsGenerator idsGenerator = new RandomIdsGenerator(new Random(1234)); + private final IdsGenerator idsGenerator = new RandomIdsGenerator(); private final TraceId traceId = idsGenerator.generateTraceId(); private final SpanId spanId = idsGenerator.generateSpanId(); private final SpanId parentSpanId = idsGenerator.generateSpanId(); diff --git a/sdk/src/test/java/io/opentelemetry/sdk/trace/SamplersTest.java b/sdk/src/test/java/io/opentelemetry/sdk/trace/SamplersTest.java index f562bd3ff5..2354878aac 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/trace/SamplersTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/trace/SamplersTest.java @@ -28,7 +28,6 @@ import io.opentelemetry.trace.TraceId; import io.opentelemetry.trace.Tracestate; import java.util.Collections; import java.util.List; -import java.util.Random; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -40,7 +39,7 @@ import org.junit.runners.JUnit4; public class SamplersTest { private static final String SPAN_NAME = "MySpanName"; private static final int NUM_SAMPLE_TRIES = 1000; - private final IdsGenerator idsGenerator = new RandomIdsGenerator(new Random(1234)); + private final IdsGenerator idsGenerator = new RandomIdsGenerator(); private final TraceId traceId = idsGenerator.generateTraceId(); private final SpanId spanId = idsGenerator.generateSpanId(); private final SpanId parentSpanId = idsGenerator.generateSpanId();