Change Baggage.forEach to map other forEach methods, same generics asMap (#2674)

* Removes one custom interface and uses BiConsumer as all the other places.
* Builder no longer needs to create new objects from parent and can reshare them.

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
This commit is contained in:
Bogdan Drutu 2021-02-03 08:51:52 -08:00 committed by GitHub
parent fb5f9e97c9
commit 5cb09fbb73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 16 additions and 29 deletions

View File

@ -8,6 +8,7 @@ package io.opentelemetry.api.baggage;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.ImplicitContextKeyed;
import java.util.Map;
import java.util.function.BiConsumer;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
@ -78,7 +79,7 @@ public interface Baggage extends ImplicitContextKeyed {
}
/** Iterates over all the entries in this {@link Baggage}. */
void forEach(BaggageConsumer consumer);
void forEach(BiConsumer<String, BaggageEntry> consumer);
/** Returns a read-only view of this {@link Baggage} as a {@link Map}. */
Map<String, BaggageEntry> asMap();

View File

@ -1,13 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.api.baggage;
/** A consumer of entries in {@link Baggage}. */
@FunctionalInterface
public interface BaggageConsumer {
/** Consumes an entry of a {@link Baggage}. */
void accept(String key, String value, BaggageEntryMetadata metadata);
}

View File

@ -13,6 +13,7 @@ import io.opentelemetry.api.internal.StringUtils;
import io.opentelemetry.context.Context;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
@ -35,10 +36,10 @@ abstract class ImmutableBaggage extends ImmutableKeyValuePairs<String, BaggageEn
protected abstract List<Object> data();
@Override
public void forEach(BaggageConsumer consumer) {
public void forEach(BiConsumer<String, BaggageEntry> consumer) {
for (int i = 0; i < data().size(); i += 2) {
ImmutableEntry entry = (ImmutableEntry) data().get(i + 1);
consumer.accept((String) data().get(i), entry.getValue(), entry.getEntryMetadata());
consumer.accept((String) data().get(i), entry);
}
}
@ -124,9 +125,9 @@ abstract class ImmutableBaggage extends ImmutableKeyValuePairs<String, BaggageEn
merged.addAll(((ImmutableBaggage) parent).data());
} else {
parent.forEach(
(key, value, metadata) -> {
(key, entry) -> {
merged.add(key);
merged.add(ImmutableEntry.create(value, metadata));
merged.add(entry);
});
}
merged.addAll(data);

View File

@ -45,9 +45,9 @@ public final class W3CBaggagePropagator implements TextMapPropagator {
}
StringBuilder headerContent = new StringBuilder();
baggage.forEach(
(key, value, metadata) -> {
headerContent.append(key).append("=").append(value);
String metadataValue = metadata.getValue();
(key, baggageEntry) -> {
headerContent.append(key).append("=").append(baggageEntry.getValue());
String metadataValue = baggageEntry.getEntryMetadata().getValue();
if (metadataValue != null && !metadataValue.isEmpty()) {
headerContent.append(";").append(metadataValue);
}

View File

@ -119,9 +119,7 @@ public final class JaegerPropagator implements TextMapPropagator {
private static <C> void injectBaggage(Baggage baggage, C carrier, Setter<C> setter) {
baggage.forEach(
(key, value, metadata) -> {
setter.set(carrier, BAGGAGE_PREFIX + key, value);
});
(key, baggageEntry) -> setter.set(carrier, BAGGAGE_PREFIX + key, baggageEntry.getValue()));
}
@Override

View File

@ -73,11 +73,10 @@ public final class OtTracerPropagator implements TextMapPropagator {
// Baggage is only injected if there is a valid SpanContext
Baggage baggage = Baggage.fromContext(context);
if (!baggage.isEmpty()) {
// Metadata is not supported by OpenTracing
baggage.forEach(
(key, value, metadata) -> {
// Metadata is not supported by OpenTracing
setter.set(carrier, PREFIX_BAGGAGE_HEADER + key, value);
});
(key, baggageEntry) ->
setter.set(carrier, PREFIX_BAGGAGE_HEADER + key, baggageEntry.getValue()));
}
}

View File

@ -72,7 +72,8 @@ final class SpanContextShim extends BaseShimObject implements SpanContext {
public Iterable<Map.Entry<String, String>> baggageItems() {
List<Map.Entry<String, String>> items = new ArrayList<>(baggage.size());
baggage.forEach(
(key, value, metadata) -> items.add(new AbstractMap.SimpleImmutableEntry<>(key, value)));
(key, baggageEntry) ->
items.add(new AbstractMap.SimpleImmutableEntry<>(key, baggageEntry.getValue())));
return items;
}