Skip to content

Commit 2fe1bf0

Browse files
author
Kapil Rastogi
authored
Merge pull request #113 from worldtiki/msb
Draft proposal to bring ids closer to b3 spec
2 parents c088170 + 52a9300 commit 2fe1bf0

File tree

9 files changed

+79
-37
lines changed

9 files changed

+79
-37
lines changed

core/src/main/java/com/expedia/www/haystack/client/Tracer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ boolean isServerSpan() {
288288

289289
protected SpanContext createNewContext() {
290290

291-
return createContext(tracer.idGenerator.generate(), tracer.idGenerator.generate(), null, Collections.emptyMap());
291+
return createContext(tracer.idGenerator.generateTraceId(), tracer.idGenerator.generateSpanId(), null, Collections.emptyMap());
292292
}
293293

294294
protected SpanContext createContext(UUID traceId, UUID spanId, UUID parentId, Map<String, String> baggage) {
@@ -331,7 +331,7 @@ protected SpanContext createDependentContext() {
331331
}
332332

333333
return createContext(parent.getContext().getTraceId(),
334-
tracer.idGenerator.generate(),
334+
tracer.idGenerator.generateSpanId(),
335335
parent.getContext().getSpanId(),
336336
baggage);
337337
}

core/src/main/java/com/expedia/www/haystack/client/idgenerators/IdGenerator.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,25 @@
1717
package com.expedia.www.haystack.client.idgenerators;
1818

1919
public interface IdGenerator {
20+
21+
/**
22+
* Generates a unique id
23+
* @deprecated This method was deprecated in 0.3.1. Use {@link #generateTraceId()} and {@link #generateSpanId()} instead
24+
*/
25+
@Deprecated
2026
Object generate();
27+
28+
/**
29+
* Generates a random unique identifier for a trace.
30+
*/
31+
default Object generateTraceId() {
32+
return generate();
33+
}
34+
35+
/**
36+
* Generates a random identifier for a span. It should be unique within a trace.
37+
*/
38+
default Object generateSpanId() {
39+
return generate();
40+
}
2141
}

core/src/main/java/com/expedia/www/haystack/client/idgenerators/LongIdGenerator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
*/
1717
package com.expedia.www.haystack.client.idgenerators;
1818

19-
20-
import com.expedia.www.haystack.client.idgenerators.IdGenerator;
21-
2219
import java.util.concurrent.ThreadLocalRandom;
2320

21+
/**
22+
* Generates random and unique Longs as ids for Traces and Spans.
23+
*/
2424
public class LongIdGenerator implements IdGenerator {
2525

2626
@Override

core/src/main/java/com/expedia/www/haystack/client/idgenerators/RandomUUIDGenerator.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919

2020
import java.util.UUID;
2121

22+
/**
23+
* Generates UUIDs as ids for Traces and Spans.
24+
* <p/>
25+
* Consider using the TimeBasedUUIDGenerator which is more performant.
26+
*
27+
* @see com.expedia.www.haystack.client.idgenerators.TimeBasedUUIDGenerator
28+
*/
2229
public class RandomUUIDGenerator implements IdGenerator {
2330

2431
@Override

core/src/main/java/com/expedia/www/haystack/client/idgenerators/TimeBasedUUIDGenerator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@
1616
*/
1717
package com.expedia.www.haystack.client.idgenerators;
1818

19-
20-
import com.fasterxml.uuid.Generators;
21-
2219
import java.util.UUID;
2320

21+
import static com.fasterxml.uuid.Generators.timeBasedGenerator;
2422

23+
/**
24+
* Generates UUIDs as ids for Traces and Spans.
25+
*/
2526
public class TimeBasedUUIDGenerator implements IdGenerator {
2627

2728
@Override
2829
public UUID generate() {
29-
return Generators.timeBasedGenerator().generate();
30+
return timeBasedGenerator().generate();
3031
}
3132
}

core/src/main/java/com/expedia/www/haystack/client/propagation/Codex.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,19 @@ public interface Codex<R,T> {
4040
*/
4141
T decode(R value);
4242

43+
default T decodeTraceId(R value) {
44+
return decode(value);
45+
}
46+
47+
default T decodeSpanId(R value) {
48+
return decode(value);
49+
}
50+
51+
default T decodeBaggage(R value) {
52+
return decode(value);
53+
}
54+
55+
default T decodeKey(R value) {
56+
return decode(value);
57+
}
4358
}

core/src/main/java/com/expedia/www/haystack/client/propagation/TextMapPropagator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,18 +78,18 @@ public SpanContext extract(TextMap carrier) {
7878
final Map<String, String> baggage = new HashMap<>();
7979

8080
for (Map.Entry<String, String> entry : carrier) {
81-
final String decodedKey = keyCodex.decode(entry.getKey());
81+
final String decodedKey = keyCodex.decodeKey(entry.getKey());
8282
final String decodedKeyLowerCase = decodedKey.toLowerCase();
8383

8484
if (decodedKeyLowerCase.startsWith(convention.baggagePrefix().toLowerCase(Locale.ROOT))) {
8585
baggage.put(decodedKey.substring(convention.baggagePrefix().length()),
86-
valueCodex.decode(entry.getValue()));
86+
valueCodex.decodeBaggage(entry.getValue()));
8787
} else if (containsIgnoreCase(convention.traceIdKeyAliases(), decodedKeyLowerCase)) {
88-
traceId = valueCodex.decode(entry.getValue());
88+
traceId = valueCodex.decodeTraceId(entry.getValue());
8989
} else if (containsIgnoreCase(convention.parentIdKeyAliases(), decodedKeyLowerCase)) {
90-
parentId = valueCodex.decode(entry.getValue());
90+
parentId = valueCodex.decodeSpanId(entry.getValue());
9191
} else if (containsIgnoreCase(convention.spanIdKeyAliases(), decodedKeyLowerCase)) {
92-
spanId = valueCodex.decode(entry.getValue());
92+
spanId = valueCodex.decodeSpanId(entry.getValue());
9393
}
9494
}
9595

core/src/test/java/com/expedia/www/haystack/client/TracerPropagationTest.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ public void setUp() {
4343
@Test(expected=IllegalArgumentException.class)
4444
public void testInjectInvalidFormat() {
4545
IdGenerator idGenerator = new RandomUUIDGenerator();
46-
Object traceId = idGenerator.generate();
47-
Object spanId = idGenerator.generate();
48-
Object parentId = idGenerator.generate();
46+
Object traceId = idGenerator.generateTraceId();
47+
Object spanId = idGenerator.generateSpanId();
48+
Object parentId = idGenerator.generateTraceId();
4949

5050
String carrier = "";
5151

@@ -58,9 +58,9 @@ public void testInjectInvalidFormat() {
5858
@Test
5959
public void testInject() {
6060
IdGenerator idGenerator = new RandomUUIDGenerator();
61-
Object traceId = idGenerator.generate();
62-
Object spanId = idGenerator.generate();
63-
Object parentId = idGenerator.generate();
61+
Object traceId = idGenerator.generateTraceId();
62+
Object spanId = idGenerator.generateSpanId();
63+
Object parentId = idGenerator.generateTraceId();
6464

6565
Map<String, String> carrierValues = new HashMap<>();
6666
TextMapAdapter carrier = new TextMapAdapter(carrierValues);
@@ -80,9 +80,9 @@ public void testInject() {
8080
@Test
8181
public void testInjectURLEncoded() {
8282
IdGenerator idGenerator = new RandomUUIDGenerator();
83-
Object traceId = idGenerator.generate();
84-
Object spanId = idGenerator.generate();
85-
Object parentId = idGenerator.generate();
83+
Object traceId = idGenerator.generateTraceId();
84+
Object spanId = idGenerator.generateSpanId();
85+
Object parentId = idGenerator.generateTraceId();
8686

8787
Map<String, String> carrierValues = new HashMap<>();
8888
TextMap carrier = new TextMapAdapter(carrierValues);
@@ -103,9 +103,9 @@ public void testInjectURLEncoded() {
103103
@Test
104104
public void testExtract() {
105105
IdGenerator idGenerator = new RandomUUIDGenerator();
106-
Object traceId = idGenerator.generate();
107-
Object spanId = idGenerator.generate();
108-
Object parentId = idGenerator.generate();
106+
Object traceId = idGenerator.generateTraceId();
107+
Object spanId = idGenerator.generateSpanId();
108+
Object parentId = idGenerator.generateTraceId();
109109

110110
Map<String, String> carrierValues = new HashMap<>();
111111
carrierValues.put("Baggage-TEST", "TEXT");
@@ -128,9 +128,9 @@ public void testExtract() {
128128
@Test
129129
public void testExtractIgnoreUnknowns() {
130130
IdGenerator idGenerator = new RandomUUIDGenerator();
131-
Object traceId = idGenerator.generate();
132-
Object spanId = idGenerator.generate();
133-
Object parentId = idGenerator.generate();
131+
Object traceId = idGenerator.generateTraceId();
132+
Object spanId = idGenerator.generateSpanId();
133+
Object parentId = idGenerator.generateTraceId();
134134

135135
Map<String, String> carrierValues = new HashMap<>();
136136
carrierValues.put("Trace-ID", traceId.toString());
@@ -153,8 +153,8 @@ public void testExtractIgnoreUnknowns() {
153153
@Test
154154
public void testExtractInvalid() {
155155
IdGenerator idGenerator = new RandomUUIDGenerator();
156-
Object spanId = idGenerator.generate();
157-
Object parentId = idGenerator.generate();
156+
Object spanId = idGenerator.generateSpanId();
157+
Object parentId = idGenerator.generateTraceId();
158158

159159
Map<String, String> carrierValues = new HashMap<>();
160160
carrierValues.put("Span-ID", spanId.toString());
@@ -171,9 +171,9 @@ public void testExtractInvalid() {
171171
@Test
172172
public void testExtractURLEncoded() {
173173
IdGenerator idGenerator = new RandomUUIDGenerator();
174-
Object traceId = idGenerator.generate();
175-
Object spanId = idGenerator.generate();
176-
Object parentId = idGenerator.generate();
174+
Object traceId = idGenerator.generateTraceId();
175+
Object spanId = idGenerator.generateSpanId();
176+
Object parentId = idGenerator.generateTraceId();
177177

178178
Map<String, String> carrierValues = new HashMap<>();
179179
carrierValues.put("Baggage-TEST", "!%40%23%23*%5E%20%25%5E%26%26(*");

core/src/test/java/com/expedia/www/haystack/client/dispatchers/clients/HttpCollectorClientTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import java.io.IOException;
3939
import java.util.HashMap;
4040
import java.util.Map;
41-
import java.util.UUID;
4241

4342
import static org.junit.Assert.assertEquals;
4443
import static org.mockito.Mockito.*;
@@ -47,8 +46,8 @@ public class HttpCollectorClientTest {
4746

4847
private Tracer tracer;
4948
private final static String serviceName = "dummy-service";
50-
private final static Object traceId = new RandomUUIDGenerator().generate();
51-
private final static Object spanId = new RandomUUIDGenerator().generate();
49+
private final static Object traceId = new RandomUUIDGenerator().generateTraceId();
50+
private final static Object spanId = new RandomUUIDGenerator().generateSpanId();
5251
private final static SpanContext spanContext = new SpanContext(traceId, spanId, null);
5352

5453
@Before

0 commit comments

Comments
 (0)