Skip to content

Commit 718b711

Browse files
eleduardoashishagg
authored andcommitted
Upgrading the client to be OpenTracing 0.33 compliant (#110)
* Upgrading the client to be OpenTracing 0.33 compliant * revving up versions and info
1 parent ebc3f4d commit 718b711

File tree

9 files changed

+91
-46
lines changed

9 files changed

+91
-46
lines changed

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ Haystack client java is an [OpenTracing](https://github.com/opentracing/opentrac
99

1010
Opentracing API usage has been documented at [https://github.com/opentracing/opentracing-java](https://github.com/opentracing/opentracing-java).
1111

12+
### OpenTracing version compatibility
13+
14+
The current OpenTracing version 0.33 has introduced backwards incompatible changes with all previous versions. Please make sure
15+
that your dependencies on OpenTracing align to the 0.33 version to avoid runtime issues.
16+
17+
## Examples
1218

1319
You can look at our sample projects for how to trace a simple web application
1420

@@ -53,7 +59,7 @@ In the usual case, you just need to include the following dependency to your pro
5359

5460
In case your apps are already wired in with some kind of instrumentation library other than OpenTracing you could refer to the below links based on your usecase
5561

56-
* [Opencencus](https://github.com/ExpediaDotCom/haystack-opencensus-exporter-java)
62+
* [Opencensus](https://github.com/ExpediaDotCom/haystack-opencensus-exporter-java)
5763
* [Brave-Zipkin](https://github.com/HotelsDotCom/pitchfork)
5864

5965

ReleaseNotes.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Release Notes
22

3+
## 0.3.0/ 2019-11-
4+
5+
* Upgrading OpenTracing to version 0.33
6+
37
## 0.2.3/ 2019-01-02
48

59
* Adding opentracing-spring-haystack-web-starter in integrations for Spring Boot and Web applications

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import java.util.*;
2323

24+
import io.opentracing.tag.Tag;
25+
2426
public final class Span implements io.opentracing.Span {
2527
private final Tracer tracer;
2628
private final Clock clock;
@@ -171,6 +173,14 @@ public Span setTag(String key, Number value) {
171173
return addTag(key, value);
172174
}
173175

176+
@Override
177+
public <T> io.opentracing.Span setTag(Tag<T> tag, T value) {
178+
if (tag != null) {
179+
return addTag(tag.getKey(), value);
180+
}
181+
return this;
182+
}
183+
174184
@Override
175185
public Span setTag(String key, boolean value) {
176186
return addTag(key, value);

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ public SpanContext addBaggage(String key, String value) {
104104
return new SpanContext(traceId, spanId, parentId, newBaggage, extractedContext);
105105
}
106106

107+
@Override
108+
public String toTraceId() {
109+
return this.traceId.toString();
110+
}
111+
112+
@Override
113+
public String toSpanId() {
114+
return this.spanId.toString();
115+
}
116+
107117
@Override
108118
public Iterable<Entry<String, String>> baggageItems() {
109119
return baggage.entrySet();

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

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,7 @@ public Tracer(String serviceName, ScopeManager scopeManager, Clock clock,
9898
this.extractFailureCounter = Counter.builder("extract").tag(new Tag("state", "exception")).register(metrics);
9999

100100
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
101-
try {
102101
Tracer.this.close();
103-
} catch (IOException e) {
104-
/* skip logging any error */
105-
}
106102
}));
107103
}
108104

@@ -113,12 +109,11 @@ public String toString() {
113109
.toString();
114110
}
115111

116-
public void close() throws IOException {
112+
public void close(){
117113
try (Sample timer = closeTimer.start()) {
118114
dispatcher.close();
119115
} catch (IOException e) {
120116
closeExceptionCounter.increment();
121-
throw e;
122117
}
123118
}
124119

@@ -188,8 +183,12 @@ public <C> SpanContext extract(Format<C> format, C carrier) {
188183

189184
@Override
190185
public Span activeSpan() {
191-
final Scope scope = scopeManager.active();
192-
return (scope == null ? null : scope.span());
186+
return scopeManager.activeSpan();
187+
}
188+
189+
@Override
190+
public Scope activateSpan(Span span) {
191+
return scopeManager.activate(span);
193192
}
194193

195194
@Override
@@ -269,6 +268,14 @@ public SpanBuilder withTag(String key, Number value) {
269268
return this;
270269
}
271270

271+
@Override
272+
public <T> io.opentracing.Tracer.SpanBuilder withTag(io.opentracing.tag.Tag<T> tag, T value) {
273+
if (tag != null && tag.getKey() != null) {
274+
this.tags.put(tag.getKey(), value);
275+
}
276+
return this;
277+
}
278+
272279
@Override
273280
public SpanBuilder withStartTimestamp(long microseconds) {
274281
this.startTime = microseconds;
@@ -349,17 +356,6 @@ private long calculateStartTime() {
349356
return startTime;
350357
}
351358

352-
@Override
353-
public Scope startActive(boolean finishSpanOnClose) {
354-
return tracer.scopeManager().activate(start(), finishSpanOnClose);
355-
}
356-
357-
@Override
358-
@Deprecated
359-
public com.expedia.www.haystack.client.Span startManual() {
360-
return start();
361-
}
362-
363359
@Override
364360
public com.expedia.www.haystack.client.Span start() {
365361
return new com.expedia.www.haystack.client.Span(tracer, clock, operationName, createContext(), calculateStartTime(), tags, references);

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

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,29 @@ public void setUp() throws Exception {
4343
@Test
4444
public void testActiveSpan() {
4545
Assert.assertNull(tracer.activeSpan());
46-
47-
try (Scope scope = tracer.buildSpan("active-span").startActive(true)) {
48-
Assert.assertEquals(tracer.scopeManager().active().span(), tracer.activeSpan());
49-
Assert.assertEquals(scope.span(), tracer.activeSpan());
46+
Span span = tracer.buildSpan("active-span").start();
47+
try (Scope scope = tracer.scopeManager().activate(span)) {
48+
Assert.assertEquals(tracer.scopeManager().activeSpan(), tracer.activeSpan());
49+
Assert.assertEquals(span, tracer.activeSpan());
50+
}finally {
51+
//auto-close behavior based on the scope has been removed in 0.33
52+
span.finish();
5053
}
51-
5254
Assert.assertNull(tracer.activeSpan());
5355
}
5456

5557
@Test
5658
public void testActiveSpanPropagation() {
5759
Assert.assertNull(tracer.activeSpan());
58-
59-
try (Scope scope = tracer.buildSpan("active-span").startActive(true)) {
60+
Span span = tracer.buildSpan("active-span").start();
61+
try (Scope scope = tracer.scopeManager().activate(span)) {
6062
tracer.buildSpan("child-active-span").start().finish();
61-
62-
Assert.assertEquals(tracer.scopeManager().active().span(), tracer.activeSpan());
63-
Assert.assertEquals(scope.span(), tracer.activeSpan());
63+
Assert.assertEquals(tracer.scopeManager().activeSpan(), tracer.activeSpan());
64+
Assert.assertEquals(span, tracer.activeSpan());
6465
Assert.assertEquals("Haven't closed the parent", 1, dispatcher.getReportedSpans().size());
66+
}finally {
67+
//auto-close behavior based on the scope has been removed in 0.33
68+
span.finish();
6569
}
6670

6771
Assert.assertEquals("Parent closed", 2, dispatcher.getReportedSpans().size());
@@ -77,9 +81,12 @@ public void testActiveSpanPropagation() {
7781

7882
@Test
7983
public void testActiveSpanIgnorePropagation() {
80-
try (Scope scope = tracer.buildSpan("active-span").startActive(true)) {
84+
Span span = tracer.buildSpan("active-span").start();
85+
try (Scope scope = tracer.scopeManager().activate(span)) {
8186
Span seperateSpan = tracer.buildSpan("independent-active-span").ignoreActiveSpan().start();
8287
seperateSpan.finish();
88+
}finally {
89+
span.finish();
8390
}
8491

8592
Assert.assertEquals(2, dispatcher.getReportedSpans().size());
@@ -96,10 +103,11 @@ public void testActiveSpanIgnorePropagation() {
96103
@Test
97104
public void testActiveSpanPreSeeded() {
98105
Span parentSpan = tracer.buildSpan("parent").start();
99-
100-
try (Scope scope = tracer.buildSpan("active").startActive(true)) {
106+
Span activeSpan = tracer.buildSpan("active").start();
107+
try (Scope scope = tracer.scopeManager().activate(activeSpan)) {
101108
tracer.buildSpan("child").asChildOf(parentSpan).start().finish();
102109
}
110+
activeSpan.finish();
103111
parentSpan.finish();
104112

105113
Assert.assertEquals("All spans closed", 3, dispatcher.getReportedSpans().size());

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import java.util.Collections;
3030
import java.util.List;
3131

32+
import io.opentracing.tag.StringTag;
33+
import io.opentracing.tag.Tag;
34+
3235
public class SpanTest {
3336

3437
private Tracer tracer;
@@ -105,15 +108,24 @@ public void testTagForString() {
105108
Assert.assertEquals(value, span.getTags().get(key));
106109
}
107110

111+
@Test
112+
public void testTagForTagType() {
113+
String key = "typed-key-name";
114+
String value = "typed-tag-value-value";
115+
StringTag stringTag = new StringTag(key);
116+
stringTag.set(span, value);
117+
Assert.assertEquals(value, span.getTags().get(key));
118+
}
119+
108120
@Test
109121
public void testTagForEmptyConditons() {
110122
String key = "key-name";
111123
String stringValue = "value-value";
112124
Long longValue = 3L;
113125
final boolean boolValue = false;
114126

115-
span.setTag(null, stringValue);
116-
span.setTag(null, longValue);
127+
span.setTag((Tag<String>) null, stringValue);
128+
span.setTag((Tag<Long>) null, longValue);
117129
span.setTag(null, boolValue);
118130
span.setTag(key, (Number) null);
119131
span.setTag(key, (String) null);

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@
3030

3131
import io.opentracing.propagation.Format;
3232
import io.opentracing.propagation.TextMap;
33-
import io.opentracing.propagation.TextMapExtractAdapter;
34-
import io.opentracing.propagation.TextMapInjectAdapter;
33+
import io.opentracing.propagation.TextMapAdapter;
3534

3635
public class TracerPropagationTest {
3736
private Tracer tracer;
@@ -64,7 +63,7 @@ public void testInject() {
6463
Object parentId = idGenerator.generate();
6564

6665
Map<String, String> carrierValues = new HashMap<>();
67-
TextMap carrier = new TextMapInjectAdapter(carrierValues);
66+
TextMapAdapter carrier = new TextMapAdapter(carrierValues);
6867

6968
SpanContext context = new SpanContext(traceId, spanId, parentId).addBaggage("TEST", "TEXT");
7069

@@ -86,7 +85,7 @@ public void testInjectURLEncoded() {
8685
Object parentId = idGenerator.generate();
8786

8887
Map<String, String> carrierValues = new HashMap<>();
89-
TextMap carrier = new TextMapInjectAdapter(carrierValues);
88+
TextMap carrier = new TextMapAdapter(carrierValues);
9089

9190
SpanContext context = new SpanContext(traceId, spanId, parentId).addBaggage("TEST", "!@##*^ %^&&(*").addBaggage("!@##*^ %^&&(*", "TEXT");
9291

@@ -114,7 +113,7 @@ public void testExtract() {
114113
carrierValues.put("Span-ID", spanId.toString());
115114
carrierValues.put("Parent-ID", parentId.toString());
116115

117-
TextMap carrier = new TextMapExtractAdapter(carrierValues);
116+
TextMap carrier = new TextMapAdapter(carrierValues);
118117

119118
SpanContext context = tracer.extract(Format.Builtin.TEXT_MAP, carrier);
120119

@@ -141,7 +140,7 @@ public void testExtractIgnoreUnknowns() {
141140
carrierValues.put("JunkKey", parentId.toString());
142141
carrierValues.put("JunkKey2", parentId.toString());
143142

144-
TextMap carrier = new TextMapExtractAdapter(carrierValues);
143+
TextMap carrier = new TextMapAdapter(carrierValues);
145144

146145
SpanContext context = tracer.extract(Format.Builtin.HTTP_HEADERS, carrier);
147146

@@ -161,7 +160,7 @@ public void testExtractInvalid() {
161160
carrierValues.put("Span-ID", spanId.toString());
162161
carrierValues.put("Parent-ID", parentId.toString());
163162

164-
TextMap carrier = new TextMapExtractAdapter(carrierValues);
163+
TextMap carrier = new TextMapAdapter(carrierValues);
165164

166165
SpanContext context = tracer.extract(Format.Builtin.HTTP_HEADERS, carrier);
167166

@@ -183,7 +182,7 @@ public void testExtractURLEncoded() {
183182
carrierValues.put("Span-ID", spanId.toString());
184183
carrierValues.put("Parent-ID", parentId.toString());
185184

186-
TextMap carrier = new TextMapExtractAdapter(carrierValues);
185+
TextMap carrier = new TextMapAdapter(carrierValues);
187186

188187
SpanContext context = tracer.extract(Format.Builtin.HTTP_HEADERS, carrier);
189188

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>com.expedia.www</groupId>
66
<artifactId>haystack-client-java-parent</artifactId>
7-
<version>0.2.9-SNAPSHOT</version>
7+
<version>0.3.0-SNAPSHOT</version>
88
<packaging>pom</packaging>
99
<name>Haystack Java Client Parent POM</name>
1010
<description>Haystack Java Client Parent POM</description>
@@ -43,7 +43,7 @@
4343
<java-version>1.8</java-version>
4444
<encoding>UTF-8</encoding>
4545

46-
<opentracing.version>0.31.0</opentracing.version>
46+
<opentracing.version>0.33.0</opentracing.version>
4747
<protobuf.version>3.3.1</protobuf.version>
4848
<slf4j.version>1.7.25</slf4j.version>
4949
<junit.version>4.12</junit.version>
@@ -52,7 +52,7 @@
5252
<commonslang3.version>3.0</commonslang3.version>
5353
<grpc.version>1.9.0</grpc.version>
5454
<jaxrs.version>2.1</jaxrs.version>
55-
<micrometer.version>1.1.1</micrometer.version>
55+
<micrometer.version>1.3.1</micrometer.version>
5656
<haystack-idl-java.version>1.0.64</haystack-idl-java.version>
5757
<http-client.vesion>4.5.3</http-client.vesion>
5858

0 commit comments

Comments
 (0)