Update dependency io.zipkin.reporter2:zipkin-reporter-bom to v3.2.1 (#6151)

Signed-off-by: Adrian Cole <adrian@tetrate.io>
Co-authored-by: jack-berg <34418638+jack-berg@users.noreply.github.com>
This commit is contained in:
Crypt Keeper 2024-01-25 06:52:57 +08:00 committed by GitHub
parent ee6c9867d7
commit 0e4986a073
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 54 additions and 61 deletions

View File

@ -17,7 +17,7 @@ val DEPENDENCY_BOMS = listOf(
"io.grpc:grpc-bom:1.61.0", "io.grpc:grpc-bom:1.61.0",
"io.netty:netty-bom:4.1.106.Final", "io.netty:netty-bom:4.1.106.Final",
"io.zipkin.brave:brave-bom:6.0.0", "io.zipkin.brave:brave-bom:6.0.0",
"io.zipkin.reporter2:zipkin-reporter-bom:3.1.1", "io.zipkin.reporter2:zipkin-reporter-bom:3.2.1",
"org.assertj:assertj-bom:3.25.1", "org.assertj:assertj-bom:3.25.1",
"org.junit:junit-bom:5.10.1", "org.junit:junit-bom:5.10.1",
"org.testcontainers:testcontainers-bom:1.19.3", "org.testcontainers:testcontainers-bom:1.19.3",

View File

@ -4,3 +4,6 @@ Comparing source compatibility of against
=== UNCHANGED METHOD: PUBLIC io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder setEncoder(zipkin2.codec.BytesEncoder<zipkin2.Span><zipkin2.Span>) === UNCHANGED METHOD: PUBLIC io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder setEncoder(zipkin2.codec.BytesEncoder<zipkin2.Span><zipkin2.Span>)
+++ NEW ANNOTATION: java.lang.Deprecated +++ NEW ANNOTATION: java.lang.Deprecated
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder setEncoder(zipkin2.reporter.BytesEncoder<zipkin2.Span>) +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder setEncoder(zipkin2.reporter.BytesEncoder<zipkin2.Span>)
=== UNCHANGED METHOD: PUBLIC io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder setSender(zipkin2.reporter.Sender)
+++ NEW ANNOTATION: java.lang.Deprecated
+++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder setSender(zipkin2.reporter.BytesMessageSender)

View File

@ -21,9 +21,8 @@ import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import zipkin2.Span; import zipkin2.Span;
import zipkin2.reporter.BytesEncoder; import zipkin2.reporter.BytesEncoder;
import zipkin2.reporter.Callback; import zipkin2.reporter.BytesMessageSender;
import zipkin2.reporter.Encoding; import zipkin2.reporter.Encoding;
import zipkin2.reporter.Sender;
/** /**
* This class was based on the <a * This class was based on the <a
@ -40,7 +39,7 @@ public final class ZipkinSpanExporter implements SpanExporter {
private final AtomicBoolean isShutdown = new AtomicBoolean(); private final AtomicBoolean isShutdown = new AtomicBoolean();
private final ZipkinSpanExporterBuilder builder; private final ZipkinSpanExporterBuilder builder;
private final BytesEncoder<Span> encoder; private final BytesEncoder<Span> encoder;
private final Sender sender; private final BytesMessageSender sender;
private final ExporterMetrics exporterMetrics; private final ExporterMetrics exporterMetrics;
private final OtelToZipkinSpanTransformer transformer; private final OtelToZipkinSpanTransformer transformer;
@ -48,7 +47,7 @@ public final class ZipkinSpanExporter implements SpanExporter {
ZipkinSpanExporter( ZipkinSpanExporter(
ZipkinSpanExporterBuilder builder, ZipkinSpanExporterBuilder builder,
BytesEncoder<Span> encoder, BytesEncoder<Span> encoder,
Sender sender, BytesMessageSender sender,
Supplier<MeterProvider> meterProviderSupplier, Supplier<MeterProvider> meterProviderSupplier,
OtelToZipkinSpanTransformer transformer) { OtelToZipkinSpanTransformer transformer) {
this.builder = builder; this.builder = builder;
@ -76,25 +75,15 @@ public final class ZipkinSpanExporter implements SpanExporter {
encodedSpans.add(encoder.encode(zipkinSpan)); encodedSpans.add(encoder.encode(zipkinSpan));
} }
CompletableResultCode result = new CompletableResultCode(); try {
sender sender.send(encodedSpans);
.sendSpans(encodedSpans)
.enqueue(
new Callback<Void>() {
@Override
public void onSuccess(Void value) {
exporterMetrics.addSuccess(numItems); exporterMetrics.addSuccess(numItems);
result.succeed(); return CompletableResultCode.ofSuccess();
} } catch (IOException | RuntimeException t) {
@Override
public void onError(Throwable t) {
exporterMetrics.addFailed(numItems); exporterMetrics.addFailed(numItems);
logger.log(Level.WARNING, "Failed to export spans", t); logger.log(Level.WARNING, "Failed to export spans", t);
result.fail(); return CompletableResultCode.ofFailure();
} }
});
return result;
} }
@Override @Override

View File

@ -18,7 +18,7 @@ import java.util.function.Supplier;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import zipkin2.Span; import zipkin2.Span;
import zipkin2.reporter.BytesEncoder; import zipkin2.reporter.BytesEncoder;
import zipkin2.reporter.Sender; import zipkin2.reporter.BytesMessageSender;
import zipkin2.reporter.SpanBytesEncoder; import zipkin2.reporter.SpanBytesEncoder;
import zipkin2.reporter.okhttp3.OkHttpSender; import zipkin2.reporter.okhttp3.OkHttpSender;
@ -26,7 +26,7 @@ import zipkin2.reporter.okhttp3.OkHttpSender;
public final class ZipkinSpanExporterBuilder { public final class ZipkinSpanExporterBuilder {
private BytesEncoder<Span> encoder = SpanBytesEncoder.JSON_V2; private BytesEncoder<Span> encoder = SpanBytesEncoder.JSON_V2;
private Supplier<InetAddress> localIpAddressSupplier = LocalInetAddressSupplier.getInstance(); private Supplier<InetAddress> localIpAddressSupplier = LocalInetAddressSupplier.getInstance();
@Nullable private Sender sender; @Nullable private BytesMessageSender sender;
private String endpoint = ZipkinSpanExporter.DEFAULT_ENDPOINT; private String endpoint = ZipkinSpanExporter.DEFAULT_ENDPOINT;
// compression is enabled by default, because this is the default of OkHttpSender, // compression is enabled by default, because this is the default of OkHttpSender,
// which is created when no custom sender is set (see OkHttpSender.Builder) // which is created when no custom sender is set (see OkHttpSender.Builder)
@ -38,12 +38,27 @@ public final class ZipkinSpanExporterBuilder {
* Sets the Zipkin sender. Implements the client side of the span transport. An {@link * Sets the Zipkin sender. Implements the client side of the span transport. An {@link
* OkHttpSender} is a good default. * OkHttpSender} is a good default.
* *
* <p>The {@link Sender#close()} method will be called when the exporter is shut down. * <p>The {@link BytesMessageSender#close()} method will be called when the exporter is shut down.
*
* @param sender the Zipkin sender implementation.
* @return this.
* @deprecated Use {@link #setSender(BytesMessageSender)} insteead.
*/
@Deprecated
public ZipkinSpanExporterBuilder setSender(zipkin2.reporter.Sender sender) {
return setSender((BytesMessageSender) sender);
}
/**
* Sets the Zipkin sender. Implements the client side of the span transport. An {@link
* OkHttpSender} is a good default.
*
* <p>The {@link BytesMessageSender#close()} method will be called when the exporter is shut down.
* *
* @param sender the Zipkin sender implementation. * @param sender the Zipkin sender implementation.
* @return this. * @return this.
*/ */
public ZipkinSpanExporterBuilder setSender(Sender sender) { public ZipkinSpanExporterBuilder setSender(BytesMessageSender sender) {
requireNonNull(sender, "sender"); requireNonNull(sender, "sender");
this.sender = sender; this.sender = sender;
return this; return this;
@ -51,7 +66,7 @@ public final class ZipkinSpanExporterBuilder {
/** /**
* Sets the {@link zipkin2.codec.BytesEncoder}, which controls the format used by the {@link * Sets the {@link zipkin2.codec.BytesEncoder}, which controls the format used by the {@link
* Sender}. Defaults to the {@link zipkin2.codec.SpanBytesEncoder#JSON_V2}. * BytesMessageSender}. Defaults to the {@link zipkin2.codec.SpanBytesEncoder#JSON_V2}.
* *
* @param encoder the {@code BytesEncoder} to use. * @param encoder the {@code BytesEncoder} to use.
* @return this. * @return this.
@ -65,8 +80,8 @@ public final class ZipkinSpanExporterBuilder {
} }
/** /**
* Sets the {@link BytesEncoder}, which controls the format used by the {@link Sender}. Defaults * Sets the {@link BytesEncoder}, which controls the format used by the {@link
* to the {@link SpanBytesEncoder#JSON_V2}. * BytesMessageSender}. Defaults to the {@link SpanBytesEncoder#JSON_V2}.
* *
* @param encoder the {@code BytesEncoder} to use. * @param encoder the {@code BytesEncoder} to use.
* @return this. * @return this.
@ -114,7 +129,7 @@ public final class ZipkinSpanExporterBuilder {
* supported compression methods include "gzip" and "none". * supported compression methods include "gzip" and "none".
* *
* <p>The compression method is ignored when a custom Zipkin sender is set via {@link * <p>The compression method is ignored when a custom Zipkin sender is set via {@link
* #setSender(Sender)}. * #setSender(BytesMessageSender)}.
* *
* @param compressionMethod The compression method, ex. "gzip". * @param compressionMethod The compression method, ex. "gzip".
* @return this. * @return this.
@ -189,7 +204,7 @@ public final class ZipkinSpanExporterBuilder {
* @return a {@code ZipkinSpanExporter}. * @return a {@code ZipkinSpanExporter}.
*/ */
public ZipkinSpanExporter build() { public ZipkinSpanExporter build() {
Sender sender = this.sender; BytesMessageSender sender = this.sender;
if (sender == null) { if (sender == null) {
sender = sender =
OkHttpSender.newBuilder() OkHttpSender.newBuilder()

View File

@ -45,6 +45,7 @@ import org.testcontainers.junit.jupiter.Testcontainers;
import zipkin2.Endpoint; import zipkin2.Endpoint;
import zipkin2.Span; import zipkin2.Span;
import zipkin2.codec.SpanBytesDecoder; import zipkin2.codec.SpanBytesDecoder;
import zipkin2.reporter.BytesMessageSender;
import zipkin2.reporter.Encoding; import zipkin2.reporter.Encoding;
import zipkin2.reporter.SpanBytesEncoder; import zipkin2.reporter.SpanBytesEncoder;
import zipkin2.reporter.okhttp3.OkHttpSender; import zipkin2.reporter.okhttp3.OkHttpSender;
@ -175,8 +176,10 @@ class ZipkinSpanExporterEndToEndHttpTest {
private static ZipkinSpanExporter buildZipkinExporter( private static ZipkinSpanExporter buildZipkinExporter(
String endpoint, Encoding encoding, SpanBytesEncoder encoder, MeterProvider meterProvider) { String endpoint, Encoding encoding, SpanBytesEncoder encoder, MeterProvider meterProvider) {
BytesMessageSender sender =
OkHttpSender.newBuilder().endpoint(endpoint).encoding(encoding).build();
return ZipkinSpanExporter.builder() return ZipkinSpanExporter.builder()
.setSender(OkHttpSender.newBuilder().endpoint(endpoint).encoding(encoding).build()) .setSender(sender)
.setEncoder(encoder) .setEncoder(encoder)
.setMeterProvider(meterProvider) .setMeterProvider(meterProvider)
.setLocalIpAddressSupplier(() -> localIp) .setLocalIpAddressSupplier(() -> localIp)

View File

@ -9,8 +9,7 @@ import static io.opentelemetry.exporter.zipkin.ZipkinTestUtil.spanBuilder;
import static io.opentelemetry.exporter.zipkin.ZipkinTestUtil.zipkinSpanBuilder; import static io.opentelemetry.exporter.zipkin.ZipkinTestUtil.zipkinSpanBuilder;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@ -31,18 +30,15 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import zipkin2.Span; import zipkin2.Span;
import zipkin2.reporter.BytesEncoder; import zipkin2.reporter.BytesEncoder;
import zipkin2.reporter.Call; import zipkin2.reporter.BytesMessageSender;
import zipkin2.reporter.Callback;
import zipkin2.reporter.Encoding; import zipkin2.reporter.Encoding;
import zipkin2.reporter.Sender;
import zipkin2.reporter.SpanBytesEncoder; import zipkin2.reporter.SpanBytesEncoder;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
class ZipkinSpanExporterTest { class ZipkinSpanExporterTest {
@Mock private Sender mockSender; @Mock private BytesMessageSender mockSender;
@Mock private SpanBytesEncoder mockEncoder; @Mock private SpanBytesEncoder mockEncoder;
@Mock private Call<Void> mockZipkinCall;
@Mock private OtelToZipkinSpanTransformer mockTransformer; @Mock private OtelToZipkinSpanTransformer mockTransformer;
@Mock private InetAddress localIp; @Mock private InetAddress localIp;
@ -50,7 +46,7 @@ class ZipkinSpanExporterTest {
LogCapturer logs = LogCapturer.create().captureForType(ZipkinSpanExporter.class); LogCapturer logs = LogCapturer.create().captureForType(ZipkinSpanExporter.class);
@Test @Test
void testExport() { void testExport() throws IOException {
TestSpanData testSpanData = spanBuilder().build(); TestSpanData testSpanData = spanBuilder().build();
ZipkinSpanExporter zipkinSpanExporter = ZipkinSpanExporter zipkinSpanExporter =
@ -68,25 +64,18 @@ class ZipkinSpanExporterTest {
.build(); .build();
when(mockTransformer.generateSpan(testSpanData)).thenReturn(zipkinSpan); when(mockTransformer.generateSpan(testSpanData)).thenReturn(zipkinSpan);
when(mockEncoder.encode(zipkinSpan)).thenReturn(someBytes); when(mockEncoder.encode(zipkinSpan)).thenReturn(someBytes);
when(mockSender.sendSpans(Collections.singletonList(someBytes))).thenReturn(mockZipkinCall);
doAnswer(
invocation -> {
Callback<Void> callback = invocation.getArgument(0);
callback.onSuccess(null);
return null;
})
.when(mockZipkinCall)
.enqueue(any());
CompletableResultCode resultCode = CompletableResultCode resultCode =
zipkinSpanExporter.export(Collections.singleton(testSpanData)); zipkinSpanExporter.export(Collections.singleton(testSpanData));
assertThat(resultCode.isSuccess()).isTrue(); assertThat(resultCode.isSuccess()).isTrue();
verify(mockSender).send(Collections.singletonList(someBytes));
} }
@Test @Test
@SuppressLogger(ZipkinSpanExporter.class) @SuppressLogger(ZipkinSpanExporter.class)
void testExport_failed() { void testExport_failed() throws IOException {
TestSpanData testSpanData = spanBuilder().build(); TestSpanData testSpanData = spanBuilder().build();
ZipkinSpanExporter zipkinSpanExporter = ZipkinSpanExporter zipkinSpanExporter =
@ -104,20 +93,14 @@ class ZipkinSpanExporterTest {
.build(); .build();
when(mockTransformer.generateSpan(testSpanData)).thenReturn(zipkinSpan); when(mockTransformer.generateSpan(testSpanData)).thenReturn(zipkinSpan);
when(mockEncoder.encode(zipkinSpan)).thenReturn(someBytes); when(mockEncoder.encode(zipkinSpan)).thenReturn(someBytes);
when(mockSender.sendSpans(Collections.singletonList(someBytes))).thenReturn(mockZipkinCall); doThrow(new IOException()).when(mockSender).send(Collections.singletonList(someBytes));
doAnswer(
invocation -> {
Callback<Void> callback = invocation.getArgument(0);
callback.onError(new IOException());
return null;
})
.when(mockZipkinCall)
.enqueue(any());
CompletableResultCode resultCode = CompletableResultCode resultCode =
zipkinSpanExporter.export(Collections.singleton(testSpanData)); zipkinSpanExporter.export(Collections.singleton(testSpanData));
assertThat(resultCode.isSuccess()).isFalse(); assertThat(resultCode.isSuccess()).isFalse();
verify(mockSender).send(Collections.singletonList(someBytes));
} }
@Test @Test