Skip to content
This repository has been archived by the owner on Jul 1, 2022. It is now read-only.

Commit

Permalink
Binary format implementation (#613)
Browse files Browse the repository at this point in the history
Signed-off-by: Colin Sullivan <[email protected]>
  • Loading branch information
ColinSullivan1 authored and jpkrohling committed May 3, 2019
1 parent cf202a4 commit 0b2d27c
Show file tree
Hide file tree
Showing 8 changed files with 569 additions and 3 deletions.
36 changes: 36 additions & 0 deletions jaeger-core/src/main/java/io/jaegertracing/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.jaegertracing.internal.metrics.Metrics;
import io.jaegertracing.internal.metrics.NoopMetricsFactory;
import io.jaegertracing.internal.propagation.B3TextMapCodec;
import io.jaegertracing.internal.propagation.BinaryCodec;
import io.jaegertracing.internal.propagation.CompositeCodec;
import io.jaegertracing.internal.propagation.TextMapCodec;
import io.jaegertracing.internal.reporters.CompositeReporter;
Expand All @@ -36,6 +37,7 @@
import io.jaegertracing.spi.Sampler;
import io.jaegertracing.spi.Sender;
import io.jaegertracing.spi.SenderFactory;
import io.opentracing.propagation.Binary;
import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMap;
import java.text.NumberFormat;
Expand Down Expand Up @@ -424,9 +426,11 @@ public SamplerConfiguration withManagerHostPort(String managerHostPort) {
*/
public static class CodecConfiguration {
private final Map<Format<?>, List<Codec<TextMap>>> codecs;
private final Map<Format<?>, List<Codec<Binary>>> binaryCodecs;

public CodecConfiguration() {
codecs = new HashMap<Format<?>, List<Codec<TextMap>>>();
binaryCodecs = new HashMap<Format<?>, List<Codec<Binary>>>();
}

public static CodecConfiguration fromEnv() {
Expand Down Expand Up @@ -457,6 +461,7 @@ public CodecConfiguration withPropagation(Propagation propagation) {
case JAEGER:
addCodec(codecs, Format.Builtin.HTTP_HEADERS, new TextMapCodec(true));
addCodec(codecs, Format.Builtin.TEXT_MAP, new TextMapCodec(false));
addBinaryCodec(binaryCodecs, Format.Builtin.BINARY, new BinaryCodec());
break;
case B3:
addCodec(codecs, Format.Builtin.HTTP_HEADERS, new B3TextMapCodec.Builder().build());
Expand All @@ -473,10 +478,19 @@ public CodecConfiguration withCodec(Format<?> format, Codec<TextMap> codec) {
return this;
}

public CodecConfiguration withBinaryCodec(Format<?> format, Codec<Binary> codec) {
addBinaryCodec(binaryCodecs, format, codec);
return this;
}

public Map<Format<?>, List<Codec<TextMap>>> getCodecs() {
return Collections.unmodifiableMap(codecs);
}

public Map<Format<?>, List<Codec<Binary>>> getBinaryCodecs() {
return Collections.unmodifiableMap(binaryCodecs);
}

private static void addCodec(Map<Format<?>, List<Codec<TextMap>>> codecs, Format<?> format, Codec<TextMap> codec) {
List<Codec<TextMap>> codecList = codecs.get(format);
if (codecList == null) {
Expand All @@ -486,11 +500,23 @@ private static void addCodec(Map<Format<?>, List<Codec<TextMap>>> codecs, Format
codecList.add(codec);
}

private static void addBinaryCodec(Map<Format<?>, List<Codec<Binary>>> codecs,
Format<?> format, Codec<Binary> codec) {

List<Codec<Binary>> codecList = codecs.get(format);
if (codecList == null) {
codecList = new LinkedList<Codec<Binary>>();
codecs.put(format, codecList);
}
codecList.add(codec);
}

public void apply(JaegerTracer.Builder builder) {
// Replace existing TEXT_MAP and HTTP_HEADERS codec with one that represents the
// configured propagation formats
registerCodec(builder, Format.Builtin.HTTP_HEADERS);
registerCodec(builder, Format.Builtin.TEXT_MAP);
registerBinaryCodec(builder, Format.Builtin.BINARY);
}

protected void registerCodec(JaegerTracer.Builder builder, Format<TextMap> format) {
Expand All @@ -502,6 +528,16 @@ protected void registerCodec(JaegerTracer.Builder builder, Format<TextMap> forma
builder.registerExtractor(format, codec);
}
}

protected void registerBinaryCodec(JaegerTracer.Builder builder, Format<Binary> format) {
if (codecs.containsKey(format)) {
List<Codec<Binary>> codecsForFormat = binaryCodecs.get(format);
Codec<Binary> codec = codecsForFormat.size() == 1
? codecsForFormat.get(0) : new CompositeCodec<Binary>(codecsForFormat);
builder.registerInjector(format, codec);
builder.registerExtractor(format, codec);
}
}
}

public static class ReporterConfiguration {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,13 @@ public boolean isDebug() {
return (flags & flagDebug) == flagDebug;
}

/**
* @return the number of items in baggage.
*/
public int baggageCount() {
return baggage.size();
}

@Override
public String toString() {
return TextMapCodec.contextAsString(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import io.jaegertracing.internal.exceptions.UnsupportedFormatException;
import io.jaegertracing.internal.metrics.Metrics;
import io.jaegertracing.internal.metrics.NoopMetricsFactory;
import io.jaegertracing.internal.propagation.BinaryCodec;
import io.jaegertracing.internal.propagation.TextMapCodec;
import io.jaegertracing.internal.reporters.RemoteReporter;
import io.jaegertracing.internal.samplers.RemoteControlledSampler;
Expand Down Expand Up @@ -538,7 +539,12 @@ protected Builder(String serviceName, JaegerObjectFactory objectFactory) {
.build();
this.registerInjector(Format.Builtin.HTTP_HEADERS, httpCodec);
this.registerExtractor(Format.Builtin.HTTP_HEADERS, httpCodec);
// TODO binary codec not implemented
BinaryCodec binaryCodec =
BinaryCodec.builder()
.withObjectFactory(this.objectFactory)
.build();
this.registerInjector(Format.Builtin.BINARY, binaryCodec);
this.registerExtractor(Format.Builtin.BINARY, binaryCodec);
}

/**
Expand Down
Loading

0 comments on commit 0b2d27c

Please sign in to comment.