|
19 | 19 | import java.util.Collection;
|
20 | 20 | import java.util.Collections;
|
21 | 21 | import java.util.List;
|
22 |
| -import java.util.function.Predicate; |
23 | 22 | import java.util.stream.Stream;
|
24 | 23 |
|
25 | 24 | import brave.propagation.B3Propagation;
|
@@ -76,11 +75,19 @@ public Propagation<String> get() {
|
76 | 75 |
|
77 | 76 | @Override
|
78 | 77 | public TraceContext decorate(TraceContext context) {
|
79 |
| - return Stream.concat(this.injectors.stream(), this.extractors.stream()) |
80 |
| - .map((factory) -> factory.decorate(context)) |
81 |
| - .filter((decorated) -> decorated != context) |
82 |
| - .findFirst() |
83 |
| - .orElse(context); |
| 78 | + for (Propagation.Factory factory : this.injectors.factories) { |
| 79 | + TraceContext decorated = factory.decorate(context); |
| 80 | + if (decorated != context) { |
| 81 | + return decorated; |
| 82 | + } |
| 83 | + } |
| 84 | + for (Propagation.Factory factory : this.extractors.factories) { |
| 85 | + TraceContext decorated = factory.decorate(context); |
| 86 | + if (decorated != context) { |
| 87 | + return decorated; |
| 88 | + } |
| 89 | + } |
| 90 | + return context; |
84 | 91 | }
|
85 | 92 |
|
86 | 93 | /**
|
@@ -179,11 +186,21 @@ private static class PropagationFactories {
|
179 | 186 | }
|
180 | 187 |
|
181 | 188 | boolean requires128BitTraceId() {
|
182 |
| - return stream().anyMatch(Propagation.Factory::requires128BitTraceId); |
| 189 | + for (Propagation.Factory factory : this.factories) { |
| 190 | + if (factory.requires128BitTraceId()) { |
| 191 | + return true; |
| 192 | + } |
| 193 | + } |
| 194 | + return false; |
183 | 195 | }
|
184 | 196 |
|
185 | 197 | boolean supportsJoin() {
|
186 |
| - return stream().allMatch(Propagation.Factory::supportsJoin); |
| 198 | + for (Propagation.Factory factory : this.factories) { |
| 199 | + if (!factory.supportsJoin()) { |
| 200 | + return false; |
| 201 | + } |
| 202 | + } |
| 203 | + return true; |
187 | 204 | }
|
188 | 205 |
|
189 | 206 | List<Propagation<String>> get() {
|
@@ -224,19 +241,24 @@ public List<String> keys() {
|
224 | 241 |
|
225 | 242 | @Override
|
226 | 243 | public <R> TraceContext.Injector<R> injector(Setter<R, String> setter) {
|
227 |
| - return (traceContext, request) -> this.injectors.stream() |
228 |
| - .map((propagation) -> propagation.injector(setter)) |
229 |
| - .forEach((injector) -> injector.inject(traceContext, request)); |
| 244 | + return (traceContext, request) -> { |
| 245 | + for (Propagation<String> propagation : this.injectors) { |
| 246 | + propagation.injector(setter).inject(traceContext, request); |
| 247 | + } |
| 248 | + }; |
230 | 249 | }
|
231 | 250 |
|
232 | 251 | @Override
|
233 | 252 | public <R> TraceContext.Extractor<R> extractor(Getter<R, String> getter) {
|
234 |
| - return (request) -> this.extractors.stream() |
235 |
| - .map((propagation) -> propagation.extractor(getter)) |
236 |
| - .map((extractor) -> extractor.extract(request)) |
237 |
| - .filter(Predicate.not(TraceContextOrSamplingFlags.EMPTY::equals)) |
238 |
| - .findFirst() |
239 |
| - .orElse(TraceContextOrSamplingFlags.EMPTY); |
| 253 | + return (request) -> { |
| 254 | + for (Propagation<String> propagation : this.extractors) { |
| 255 | + TraceContextOrSamplingFlags extracted = propagation.extractor(getter).extract(request); |
| 256 | + if (!TraceContextOrSamplingFlags.EMPTY.equals(extracted)) { |
| 257 | + return extracted; |
| 258 | + } |
| 259 | + } |
| 260 | + return TraceContextOrSamplingFlags.EMPTY; |
| 261 | + }; |
240 | 262 | }
|
241 | 263 |
|
242 | 264 | }
|
|
0 commit comments