From 44eb797ad7028fe7b4fcd49800162db7c5c87cdc Mon Sep 17 00:00:00 2001 From: Mick Semb Wever Date: Tue, 25 Oct 2016 20:00:46 +1100 Subject: [PATCH] Tracing payload not passed from QueryMessage to tracing session Patch by Mick Semb Wever; Reviewed by T Jake Luciani for CASSANDRA-12835 --- CHANGES.txt | 1 + .../apache/cassandra/service/QueryState.java | 6 ----- .../cassandra/thrift/CassandraServer.java | 2 +- .../transport/messages/BatchMessage.java | 2 +- .../transport/messages/PrepareMessage.java | 2 +- .../transport/messages/QueryMessage.java | 2 +- .../apache/cassandra/tracing/TracingTest.java | 25 +++++++++++-------- 7 files changed, 19 insertions(+), 21 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 08df2ddfff..2ae052e1a9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -25,6 +25,7 @@ * Address message coalescing regression (CASSANDRA-12676) * Delete illegal character from StandardTokenizerImpl.jflex (CASSANDRA-13417) * Fix cqlsh automatic protocol downgrade regression (CASSANDRA-13307) + * Tracing payload not passed from QueryMessage to tracing session (CASSANDRA-12835) Merged from 3.0: * Fail repair if insufficient responses received (CASSANDRA-13397) * Fix SSTableLoader fail when the loaded table contains dropped columns (CASSANDRA-13276) diff --git a/src/java/org/apache/cassandra/service/QueryState.java b/src/java/org/apache/cassandra/service/QueryState.java index c70c6927cb..f0ae3b26d7 100644 --- a/src/java/org/apache/cassandra/service/QueryState.java +++ b/src/java/org/apache/cassandra/service/QueryState.java @@ -19,7 +19,6 @@ package org.apache.cassandra.service; import java.net.InetAddress; import java.nio.ByteBuffer; -import java.util.Collections; import java.util.Map; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; @@ -77,11 +76,6 @@ public class QueryState this.preparedTracingSession = sessionId; } - public void createTracingSession() - { - createTracingSession(Collections.EMPTY_MAP); - } - public void createTracingSession(Map customPayload) { UUID session = this.preparedTracingSession; diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java index 351d463bbf..04a3e66c58 100644 --- a/src/java/org/apache/cassandra/thrift/CassandraServer.java +++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java @@ -2525,7 +2525,7 @@ public class CassandraServer implements Cassandra.Iface { if (state().getQueryState().traceNextQuery()) { - state().getQueryState().createTracingSession(); + state().getQueryState().createTracingSession(Collections.EMPTY_MAP); return true; } return false; diff --git a/src/java/org/apache/cassandra/transport/messages/BatchMessage.java b/src/java/org/apache/cassandra/transport/messages/BatchMessage.java index bb6411fffa..0be027fa3a 100644 --- a/src/java/org/apache/cassandra/transport/messages/BatchMessage.java +++ b/src/java/org/apache/cassandra/transport/messages/BatchMessage.java @@ -160,7 +160,7 @@ public class BatchMessage extends Message.Request if (state.traceNextQuery()) { - state.createTracingSession(); + state.createTracingSession(getCustomPayload()); ImmutableMap.Builder builder = ImmutableMap.builder(); if(options.getConsistency() != null) diff --git a/src/java/org/apache/cassandra/transport/messages/PrepareMessage.java b/src/java/org/apache/cassandra/transport/messages/PrepareMessage.java index b0c9dbec47..04d29667de 100644 --- a/src/java/org/apache/cassandra/transport/messages/PrepareMessage.java +++ b/src/java/org/apache/cassandra/transport/messages/PrepareMessage.java @@ -71,7 +71,7 @@ public class PrepareMessage extends Message.Request if (state.traceNextQuery()) { - state.createTracingSession(); + state.createTracingSession(getCustomPayload()); Tracing.instance.begin("Preparing CQL3 query", state.getClientAddress(), ImmutableMap.of("query", query)); } diff --git a/src/java/org/apache/cassandra/transport/messages/QueryMessage.java b/src/java/org/apache/cassandra/transport/messages/QueryMessage.java index 25d4e9ee73..4c761dd89a 100644 --- a/src/java/org/apache/cassandra/transport/messages/QueryMessage.java +++ b/src/java/org/apache/cassandra/transport/messages/QueryMessage.java @@ -99,7 +99,7 @@ public class QueryMessage extends Message.Request if (state.traceNextQuery()) { - state.createTracingSession(); + state.createTracingSession(getCustomPayload()); ImmutableMap.Builder builder = ImmutableMap.builder(); builder.put("query", query); diff --git a/test/unit/org/apache/cassandra/tracing/TracingTest.java b/test/unit/org/apache/cassandra/tracing/TracingTest.java index a5ad610e82..f546496e88 100644 --- a/test/unit/org/apache/cassandra/tracing/TracingTest.java +++ b/test/unit/org/apache/cassandra/tracing/TracingTest.java @@ -32,7 +32,7 @@ import org.junit.Test; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.utils.progress.ProgressEvent; -import org.apache.cassandra.utils.progress.ProgressListener; +import org.apache.commons.lang3.StringUtils; public final class TracingTest { @@ -154,26 +154,26 @@ public final class TracingTest tracing.begin("test-request", Collections.emptyMap()); tracing.get().enableActivityNotification("test-tag"); - tracing.get().addProgressListener( - new ProgressListener() - { - public void progress(String tag, ProgressEvent pe) - { - assert "test-tag".equals(tag); - assert "test-trace".equals(pe.getMessage()); - } - }); + tracing.get().addProgressListener((String tag, ProgressEvent pe) -> { + assert "test-tag".equals(tag); + assert "test-trace".equals(pe.getMessage()); + }); tracing.get().trace("test-trace"); tracing.stopSession(); assert null == tracing.get(); } - private class TracingImpl extends Tracing + private static final class TracingImpl extends Tracing { private final List traces; private final Map payloads = new HashMap<>(); + public TracingImpl() + { + this(new ArrayList<>()); + } + public TracingImpl(List traces) { this.traces = traces; @@ -190,6 +190,9 @@ public final class TracingTest protected UUID newSession(UUID sessionId, TraceType traceType, Map customPayload) { + if (!customPayload.isEmpty()) + logger.info("adding custom payload items {}", StringUtils.join(customPayload.keySet(), ',')); + payloads.putAll(customPayload); return super.newSession(sessionId, traceType, customPayload); }