From 9ec8283101fe9b6d0abf358e444adfb637b4a00b Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 16 Oct 2017 09:53:34 +0200 Subject: [PATCH] Spring Cloud Sleuth is treating comma separated Stream headers in an invalid way without this change when you pass Stream message headers that are comma separated, Sleuth fails to add proper binding properties for them with this change we try to first split the headers (assuming that they might be comma based) and then we generate the proper header binding properties fixes #742 --- .../stream/StreamEnvironmentPostProcessor.java | 6 +++++- .../StreamEnvironmentPostProcessorTests.java | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessor.java b/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessor.java index 63c01e0b9..afa173813 100644 --- a/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessor.java +++ b/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessor.java @@ -84,7 +84,11 @@ public class StreamEnvironmentPostProcessor implements EnvironmentPostProcessor private int findStartIndex(ConfigurableEnvironment environment, String binder) { String prefix = "spring.cloud.stream." + binder + ".binder.headers"; int i = 0; - while (environment.getProperty(prefix + "[" + i + "]")!=null) { + String oldHeaders = environment.getProperty(prefix); + if (oldHeaders != null) { + i = oldHeaders.split(",").length; + } + while (environment.getProperty(prefix + "[" + i + "]") != null) { i++; } return i; diff --git a/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessorTests.java b/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessorTests.java index ac8ba97f9..fb2088beb 100644 --- a/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessorTests.java +++ b/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamEnvironmentPostProcessorTests.java @@ -16,6 +16,8 @@ package org.springframework.cloud.sleuth.stream; +import static org.assertj.core.api.Assertions.assertThat; + import java.util.Collection; import java.util.Map; import java.util.stream.Collectors; @@ -27,8 +29,6 @@ import org.springframework.cloud.sleuth.instrument.messaging.TraceMessageHeaders import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.StandardEnvironment; -import static org.assertj.core.api.Assertions.assertThat; - /** * @author Dave Syer * @@ -57,6 +57,16 @@ public class StreamEnvironmentPostProcessorTests { .isEqualTo(TraceMessageHeaders.SPAN_ID_NAME); } + @Test + public void should_append_tracing_headers_to_existing_ones_in_single_line() { + EnvironmentTestUtils.addEnvironment(this.environment, + "spring.cloud.stream.test.binder.headers=foo,bar"); + postProcess(); + assertThat(this.environment + .getProperty("spring.cloud.stream.test.binder.headers[2]")) + .isEqualTo(TraceMessageHeaders.SPAN_ID_NAME); + } + @Test public void should_not_append_tracing_headers_if_they_are_already_appended() { postProcess();