Skip to content

Commit 22a5a84

Browse files
committed
Fix the issue of duplicate traceId and spanId caused by RandomIdGenerator.
1 parent 29aad2e commit 22a5a84

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

opentelemetry-sdk/src/opentelemetry/sdk/trace/id_generator.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,17 @@ class RandomIdGenerator(IdGenerator):
4747
bits when generating IDs.
4848
"""
4949

50+
def __init__(self):
51+
self._rand = random.Random()
52+
5053
def generate_span_id(self) -> int:
51-
span_id = random.getrandbits(64)
54+
span_id = self._rand.getrandbits(64)
5255
while span_id == trace.INVALID_SPAN_ID:
53-
span_id = random.getrandbits(64)
56+
span_id = self._rand.getrandbits(64)
5457
return span_id
5558

5659
def generate_trace_id(self) -> int:
57-
trace_id = random.getrandbits(128)
60+
trace_id = self._rand.getrandbits(128)
5861
while trace_id == trace.INVALID_TRACE_ID:
59-
trace_id = random.getrandbits(128)
62+
trace_id = self._rand.getrandbits(128)
6063
return trace_id
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import unittest
2+
3+
from opentelemetry.sdk.trace import RandomIdGenerator
4+
5+
6+
class TestIdGenerator(unittest.TestCase):
7+
8+
def test_random_id_generator(self):
9+
import random
10+
random.seed(10)
11+
id_generator = RandomIdGenerator()
12+
trace_id = id_generator.generate_trace_id()
13+
span_id = id_generator.generate_span_id()
14+
self.assertNotEqual(trace_id, 164207228320579316746596838417247989971)
15+
self.assertNotEqual(span_id, 273610340023782072)

0 commit comments

Comments
 (0)