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