|
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