You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2020/07/14 15:40:43 UTC
[skywalking] branch zipkin updated: Finish first test case.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch zipkin
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/zipkin by this push:
new b8afa31 Finish first test case.
b8afa31 is described below
commit b8afa312af5d3ee77fedb72572ca46954c8f4d4a
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Tue Jul 14 23:40:21 2020 +0800
Finish first test case.
---
.../reporter/zipkin/ZipkinTracerContext.java | 11 ++++-
.../{ZipkinTracingTest.java => ZipkinTest.java} | 38 +++++-----------
...acingTest.java => ZipkinTracerContextTest.java} | 51 +++++++---------------
3 files changed, 37 insertions(+), 63 deletions(-)
diff --git a/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/main/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracerContext.java b/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/main/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracerContext.java
index 00743e0..3ba06f0 100644
--- a/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/main/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracerContext.java
+++ b/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/main/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracerContext.java
@@ -34,6 +34,12 @@ import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
/**
* ZipkinTracerContext is an API wrapper of Zipkin tracer.
+ *
+ * Same as SkyWalking, Zipkin traceContext is controlled automatically through stack push/pop. Once all created spans
+ * finished, the tracer context closed automatically too.
+ *
+ * Span finished means {@link #stopSpan(AbstractSpan)} called, even in async case, Zipkin span is still alive, and
+ * waiting for {@link #asyncStop(AsyncSpan)}.
*/
public class ZipkinTracerContext implements AbstractTracerContext {
private static String B3_NAME = "b3";
@@ -129,7 +135,7 @@ public class ZipkinTracerContext implements AbstractTracerContext {
if (!zipkinSpan.isAsync()) {
zipkinSpan.stop();
}
- runningSpans.remove(span);
+ runningSpans.remove(zipkinSpan.getSpan());
boolean isContextFinished = runningSpans.isEmpty();
if (isContextFinished) {
currentTraceContext.clear();
@@ -158,8 +164,9 @@ public class ZipkinTracerContext implements AbstractTracerContext {
zipkinSpan = new ZipkinSpan(span);
final ZipkinSpan prevValue = runningSpans.putIfAbsent(span, zipkinSpan);
if (prevValue != null) {
- zipkinSpan = prevValue;
+ throw new IllegalStateException("No concurrency access for span creation");
}
+ currentTraceContext.maybeScope(span.context());
}
return zipkinSpan;
}
diff --git a/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracingTest.java b/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTest.java
similarity index 58%
copy from apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracingTest.java
copy to apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTest.java
index cb53d1a..e66086b 100644
--- a/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracingTest.java
+++ b/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTest.java
@@ -20,18 +20,14 @@ package org.apache.skywalking.apm.plugin.reporter.zipkin;
import java.util.List;
import org.apache.skywalking.apm.agent.core.conf.Config;
-import org.apache.skywalking.apm.agent.core.context.AbstractTracerContext;
-import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
-import org.junit.Test;
-import org.powermock.reflect.Whitebox;
import zipkin2.Span;
import zipkin2.junit.ZipkinRule;
-public class ZipkinTracingTest {
+public class ZipkinTest {
@Rule
public ZipkinRule zipkin = new ZipkinRule();
@@ -47,28 +43,18 @@ public class ZipkinTracingTest {
Config.Agent.SERVICE_NAME = null;
}
- @Test
- public void zipkinTracerRunning() throws Exception {
- final ZipkinTraceReporter zipkinTraceReporter = new ZipkinTraceReporter();
- zipkinTraceReporter.boot();
-
- ZipkinContextManager manager = new ZipkinContextManager();
- Whitebox.setInternalState(manager, "zipkinTraceReporter", zipkinTraceReporter);
- final AbstractTracerContext traceContext = manager.createTraceContext("/span1", true);
- Assert.assertTrue(traceContext instanceof ZipkinTracerContext);
-
- final AbstractSpan span1 = traceContext.createEntrySpan("span1");
- final AbstractSpan span2 = traceContext.createLocalSpan("span2");
- final AbstractSpan span3 = traceContext.createExitSpan("span3", "127.0.0.1:8080");
-
- traceContext.stopSpan(span3);
- traceContext.stopSpan(span2);
- traceContext.stopSpan(span1);
-
+ /**
+ * @param time * 2s = Max wait time
+ * @return traces
+ */
+ protected List<List<Span>> readTracesUntilTimeout(int time) {
List<List<Span>> traces = null;
boolean received = false;
- for (int i = 10; i >= 0; i--) {
- Thread.sleep(2000L);
+ for (int i = time; i >= 0; i--) {
+ try {
+ Thread.sleep(2000L);
+ } catch (InterruptedException e) {
+ }
traces = zipkin.getTraces();
if (traces.size() > 0) {
received = true;
@@ -77,6 +63,6 @@ public class ZipkinTracingTest {
}
Assert.assertTrue(received);
- Assert.assertEquals(1, traces.size());
+ return traces;
}
}
diff --git a/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracingTest.java b/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracerContextTest.java
similarity index 67%
rename from apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracingTest.java
rename to apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracerContextTest.java
index cb53d1a..b187ffb 100644
--- a/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracingTest.java
+++ b/apm-sniffer/optional-reporter-plugins/zipkin-reporter-plugin/src/test/java/org/apache/skywalking/apm/plugin/reporter/zipkin/ZipkinTracerContextTest.java
@@ -19,36 +19,16 @@
package org.apache.skywalking.apm.plugin.reporter.zipkin;
import java.util.List;
-import org.apache.skywalking.apm.agent.core.conf.Config;
import org.apache.skywalking.apm.agent.core.context.AbstractTracerContext;
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
import org.powermock.reflect.Whitebox;
import zipkin2.Span;
-import zipkin2.junit.ZipkinRule;
-
-public class ZipkinTracingTest {
- @Rule
- public ZipkinRule zipkin = new ZipkinRule();
-
- @Before
- public void setup() {
- Config.Collector.BACKEND_SERVICE = zipkin.httpUrl() + "/api/v2/spans";
- Config.Agent.SERVICE_NAME = "Zipkin-Core";
- }
-
- @After
- public void clean() {
- Config.Collector.BACKEND_SERVICE = null;
- Config.Agent.SERVICE_NAME = null;
- }
+public class ZipkinTracerContextTest extends ZipkinTest {
@Test
- public void zipkinTracerRunning() throws Exception {
+ public void testContextIsolationInThread() {
final ZipkinTraceReporter zipkinTraceReporter = new ZipkinTraceReporter();
zipkinTraceReporter.boot();
@@ -60,23 +40,24 @@ public class ZipkinTracingTest {
final AbstractSpan span1 = traceContext.createEntrySpan("span1");
final AbstractSpan span2 = traceContext.createLocalSpan("span2");
final AbstractSpan span3 = traceContext.createExitSpan("span3", "127.0.0.1:8080");
-
traceContext.stopSpan(span3);
traceContext.stopSpan(span2);
traceContext.stopSpan(span1);
- List<List<Span>> traces = null;
- boolean received = false;
- for (int i = 10; i >= 0; i--) {
- Thread.sleep(2000L);
- traces = zipkin.getTraces();
- if (traces.size() > 0) {
- received = true;
- break;
- }
- }
-
- Assert.assertTrue(received);
+ List<List<Span>> traces = readTracesUntilTimeout(10);
Assert.assertEquals(1, traces.size());
+ List<Span> spans = traces.get(0);
+ Assert.assertEquals(3, spans.size());
+ Assert.assertEquals("span3", spans.get(0).name());
+
+ // Scope should be clear automatically in traceContext#stopSpan.
+ final AbstractSpan span4 = traceContext.createEntrySpan("span4");
+ traceContext.stopSpan(span4);
+
+ traces = readTracesUntilTimeout(10);
+ Assert.assertEquals(2, traces.size());
+ spans = traces.get(1);
+ Assert.assertEquals(1, spans.size());
+ Assert.assertEquals("span4", spans.get(0).name());
}
}