Repository: cassandra
Updated Branches:
  refs/heads/trunk af4ebfffc -> f0c94a43f


Tracing payload not passed through newSession(..)

 patch by Mick Semb Wever; reviewed by Alex Petrov for CASSANDRA-11706


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f0c94a43
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f0c94a43
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f0c94a43

Branch: refs/heads/trunk
Commit: f0c94a43f23d338cbbb3a4420e9f296484a10dc1
Parents: af4ebff
Author: mck <[email protected]>
Authored: Mon Aug 29 22:15:50 2016 +1000
Committer: mck <[email protected]>
Committed: Mon Aug 29 22:15:50 2016 +1000

----------------------------------------------------------------------
 .../org/apache/cassandra/tracing/Tracing.java   | 10 ++++--
 .../apache/cassandra/tracing/TracingTest.java   | 34 ++++++++++++++++++++
 2 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/f0c94a43/src/java/org/apache/cassandra/tracing/Tracing.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tracing/Tracing.java 
b/src/java/org/apache/cassandra/tracing/Tracing.java
index adf5ed9..c6fe46b 100644
--- a/src/java/org/apache/cassandra/tracing/Tracing.java
+++ b/src/java/org/apache/cassandra/tracing/Tracing.java
@@ -104,7 +104,7 @@ public abstract class Tracing implements 
ExecutorLocal<TraceState>
             catch (Exception e)
             {
                 JVMStabilityInspector.inspectThrowable(e);
-                logger.error("Cannot use class {} for tracing ({}), ignoring 
by defaulting on normal tracing", customTracingClass, e.getMessage());
+                logger.error(String.format("Cannot use class %s for tracing, 
ignoring by defaulting to normal tracing", customTracingClass), e);
             }
         }
         instance = null != tracing ? tracing : new TracingImpl();
@@ -138,7 +138,10 @@ public abstract class Tracing implements 
ExecutorLocal<TraceState>
 
     public UUID newSession(Map<String,ByteBuffer> customPayload)
     {
-        return newSession(TraceType.QUERY);
+        return newSession(
+                
TimeUUIDType.instance.compose(ByteBuffer.wrap(UUIDGen.getTimeUUIDBytes())),
+                TraceType.QUERY,
+                customPayload);
     }
 
     public UUID newSession(TraceType traceType)
@@ -151,9 +154,10 @@ public abstract class Tracing implements 
ExecutorLocal<TraceState>
 
     public UUID newSession(UUID sessionId, Map<String,ByteBuffer> 
customPayload)
     {
-        return newSession(sessionId, TraceType.QUERY, Collections.EMPTY_MAP);
+        return newSession(sessionId, TraceType.QUERY, customPayload);
     }
 
+    /** This method is intended to be overridden in tracing implementations 
that need access to the customPayload */
     protected UUID newSession(UUID sessionId, TraceType traceType, 
Map<String,ByteBuffer> customPayload)
     {
         assert get() == null;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f0c94a43/test/unit/org/apache/cassandra/tracing/TracingTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/tracing/TracingTest.java 
b/test/unit/org/apache/cassandra/tracing/TracingTest.java
index ab6d03d..a5ad610 100644
--- a/test/unit/org/apache/cassandra/tracing/TracingTest.java
+++ b/test/unit/org/apache/cassandra/tracing/TracingTest.java
@@ -22,6 +22,7 @@ import java.net.InetAddress;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -102,6 +103,32 @@ public final class TracingTest
     }
 
     @Test
+    public void test_customPayload()
+    {
+        List<String> traces = new ArrayList<>();
+        ByteBuffer customPayloadValue = 
ByteBuffer.wrap("test-value".getBytes());
+
+        Map<String,ByteBuffer> customPayload = 
Collections.singletonMap("test-key", customPayloadValue);
+
+        TracingImpl tracing = new TracingImpl(traces);
+        tracing.newSession(customPayload);
+        TraceState state = tracing.begin("test-custom_payload", 
Collections.<String,String>emptyMap());
+        state.trace("test-1");
+        state.trace("test-2");
+        state.trace("test-3");
+        tracing.stopSession();
+
+        assert null == tracing.get();
+        assert 4 == traces.size();
+        assert "test-custom_payload".equals(traces.get(0));
+        assert "test-1".equals(traces.get(1));
+        assert "test-2".equals(traces.get(2));
+        assert "test-3".equals(traces.get(3));
+        assert tracing.payloads.containsKey("test-key");
+        assert customPayloadValue.equals(tracing.payloads.get("test-key"));
+    }
+
+    @Test
     public void test_states()
     {
         List<String> traces = new ArrayList<>();
@@ -145,6 +172,7 @@ public final class TracingTest
     private class TracingImpl extends Tracing
     {
         private final List<String> traces;
+        private final Map<String,ByteBuffer> payloads = new HashMap<>();
 
         public TracingImpl(List<String> traces)
         {
@@ -160,6 +188,12 @@ public final class TracingTest
             return get();
         }
 
+        protected UUID newSession(UUID sessionId, TraceType traceType, 
Map<String,ByteBuffer> customPayload)
+        {
+            payloads.putAll(customPayload);
+            return super.newSession(sessionId, traceType, customPayload);
+        }
+
         protected TraceState newTraceState(InetAddress ia, UUID uuid, 
Tracing.TraceType tt)
         {
             return new TraceState(ia, uuid, tt)

Reply via email to