You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zipkin.apache.org by ad...@apache.org on 2019/05/01 04:30:18 UTC

[incubator-zipkin] branch collector-normalization updated: Adds some clarifying notes about the callback swap

This is an automated email from the ASF dual-hosted git repository.

adriancole pushed a commit to branch collector-normalization
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin.git


The following commit(s) were added to refs/heads/collector-normalization by this push:
     new 9ce4a02  Adds some clarifying notes about the callback swap
9ce4a02 is described below

commit 9ce4a02203a856628106e3191139f3b5620454bf
Author: Adrian Cole <ac...@pivotal.io>
AuthorDate: Wed May 1 12:30:07 2019 +0800

    Adds some clarifying notes about the callback swap
---
 .../src/main/java/zipkin2/collector/Collector.java | 25 ++++++++++++++--------
 .../test/java/zipkin2/collector/CollectorTest.java | 20 ++++++++---------
 2 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/zipkin-collector/core/src/main/java/zipkin2/collector/Collector.java b/zipkin-collector/core/src/main/java/zipkin2/collector/Collector.java
index 9ddf348..dd54d39 100644
--- a/zipkin-collector/core/src/main/java/zipkin2/collector/Collector.java
+++ b/zipkin-collector/core/src/main/java/zipkin2/collector/Collector.java
@@ -112,17 +112,24 @@ public class Collector { // not final for mock
     }
     metrics.incrementSpans(spans.size());
 
-    List<Span> sampled = sample(spans);
-    if (sampled.isEmpty()) {
+    List<Span> sampledSpans = sample(spans);
+    if (sampledSpans.isEmpty()) {
       callback.onSuccess(null);
       return;
     }
 
+    // In order to ensure callers are not blocked, we swap callbacks when we get to the storage
+    // phase of this process. Here, we create a callback whose sole purpose is classifying later
+    // errors on this bundle of spans in the same log category. This allows people to only turn on
+    // debug logging in one place.
+    Callback<Void> logOnErrorCallback = storeSpansCallback(sampledSpans);
     try {
-      // adding a separate callback intentionally decouples collection from storage
-      record(sampled, acceptSpansCallback(sampled));
-      callback.onSuccess(null);
+      store(sampledSpans, logOnErrorCallback);
+      callback.onSuccess(null); // release the callback given to the collector
     } catch (RuntimeException | Error e) {
+      // While unexpected, invoking the storage command could raise an error synchronously. When
+      // that's the case, we wouldn't have invoked callback.onSuccess, so we need to handle the
+      // error here.
       handleStorageError(spans, e, callback);
     }
   }
@@ -170,8 +177,8 @@ public class Collector { // not final for mock
     return out;
   }
 
-  void record(List<Span> sampled, Callback<Void> callback) {
-    storage.spanConsumer().accept(sampled).enqueue(callback);
+  void store(List<Span> sampledSpans, Callback<Void> callback) {
+    storage.spanConsumer().accept(sampledSpans).enqueue(callback);
   }
 
   String idString(Span span) {
@@ -191,7 +198,7 @@ public class Collector { // not final for mock
     return sampled;
   }
 
-  Callback<Void> acceptSpansCallback(final List<Span> spans) {
+  Callback<Void> storeSpansCallback(final List<Span> spans) {
     return new Callback<Void>() {
       @Override public void onSuccess(Void value) {
       }
@@ -201,7 +208,7 @@ public class Collector { // not final for mock
       }
 
       @Override public String toString() {
-        return appendSpanIds(spans, new StringBuilder("AcceptSpans(")) + ")";
+        return appendSpanIds(spans, new StringBuilder("StoreSpans(")) + ")";
       }
     };
   }
diff --git a/zipkin-collector/core/src/test/java/zipkin2/collector/CollectorTest.java b/zipkin-collector/core/src/test/java/zipkin2/collector/CollectorTest.java
index d0ee433..aabcbcb 100644
--- a/zipkin-collector/core/src/test/java/zipkin2/collector/CollectorTest.java
+++ b/zipkin-collector/core/src/test/java/zipkin2/collector/CollectorTest.java
@@ -151,23 +151,23 @@ public class CollectorTest {
   }
 
   @Test
-  public void acceptSpansCallback_toStringIncludesSpanIds() {
+  public void storeSpansCallback_toStringIncludesSpanIds() {
     Span span2 = CLIENT_SPAN.toBuilder().id("3").build();
     when(collector.idString(span2)).thenReturn("3");
 
-    assertThat(collector.acceptSpansCallback(asList(CLIENT_SPAN, span2)))
-      .hasToString("AcceptSpans([1, 3])");
+    assertThat(collector.storeSpansCallback(asList(CLIENT_SPAN, span2)))
+      .hasToString("StoreSpans([1, 3])");
   }
 
   @Test
-  public void acceptSpansCallback_toStringIncludesSpanIds_noMoreThan3() {
-    assertThat(unprefixIdString(collector.acceptSpansCallback(TRACE).toString()))
-      .hasToString("AcceptSpans([1, 1, 2, ...])");
+  public void storeSpansCallback_toStringIncludesSpanIds_noMoreThan3() {
+    assertThat(unprefixIdString(collector.storeSpansCallback(TRACE).toString()))
+      .hasToString("StoreSpans([1, 1, 2, ...])");
   }
 
   @Test
-  public void acceptSpansCallback_onErrorWithNullMessage() {
-    Callback<Void> callback = collector.acceptSpansCallback(TRACE);
+  public void storeSpansCallback_onErrorWithNullMessage() {
+    Callback<Void> callback = collector.storeSpansCallback(TRACE);
     callback.onError(new RuntimeException());
 
     assertThat(messages)
@@ -176,8 +176,8 @@ public class CollectorTest {
   }
 
   @Test
-  public void acceptSpansCallback_onErrorWithMessage() {
-    Callback<Void> callback = collector.acceptSpansCallback(TRACE);
+  public void storeSpansCallback_onErrorWithMessage() {
+    Callback<Void> callback = collector.storeSpansCallback(TRACE);
     callback.onError(new IllegalArgumentException("no beer"));
 
     assertThat(messages)