Make OTLP exporter memory mode API public (#6469)

This commit is contained in:
jack-berg 2024-05-30 09:02:54 -05:00 committed by GitHub
parent 7da7037717
commit f57906131e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 164 additions and 193 deletions

View File

@ -1,2 +1,19 @@
Comparing source compatibility of against
No changes.
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder (not serializable)
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
*** MODIFIED METHOD: PUBLIC (<- PACKAGE_PROTECTED) io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder setMemoryMode(io.opentelemetry.sdk.common.export.MemoryMode)
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder (not serializable)
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
*** MODIFIED METHOD: PUBLIC (<- PACKAGE_PROTECTED) io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder setMemoryMode(io.opentelemetry.sdk.common.export.MemoryMode)
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder (not serializable)
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
*** MODIFIED METHOD: PUBLIC (<- PACKAGE_PROTECTED) io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder setMemoryMode(io.opentelemetry.sdk.common.export.MemoryMode)
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder (not serializable)
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
*** MODIFIED METHOD: PUBLIC (<- PACKAGE_PROTECTED) io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder setMemoryMode(io.opentelemetry.sdk.common.export.MemoryMode)
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder (not serializable)
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
*** MODIFIED METHOD: PUBLIC (<- PACKAGE_PROTECTED) io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder setMemoryMode(io.opentelemetry.sdk.common.export.MemoryMode)
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder (not serializable)
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
*** MODIFIED METHOD: PUBLIC (<- PACKAGE_PROTECTED) io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder setMemoryMode(io.opentelemetry.sdk.common.export.MemoryMode)

View File

@ -210,8 +210,13 @@ public final class OtlpHttpLogRecordExporterBuilder {
return this;
}
/** Set the {@link MemoryMode}. */
OtlpHttpLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
/**
* Set the {@link MemoryMode}. If unset, defaults to {@link #DEFAULT_MEMORY_MODE}.
*
* <p>>When memory mode is {@link MemoryMode#REUSABLE_DATA}, serialization is optimized to reduce
* memory allocation.
*/
public OtlpHttpLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
requireNonNull(memoryMode, "memoryMode");
this.memoryMode = memoryMode;
return this;

View File

@ -19,10 +19,12 @@ import io.opentelemetry.sdk.common.export.MemoryMode;
import io.opentelemetry.sdk.common.export.ProxyOptions;
import io.opentelemetry.sdk.common.export.RetryPolicy;
import io.opentelemetry.sdk.metrics.InstrumentType;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.export.AggregationTemporalitySelector;
import io.opentelemetry.sdk.metrics.export.DefaultAggregationSelector;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import java.time.Duration;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
@ -231,8 +233,18 @@ public final class OtlpHttpMetricExporterBuilder {
return this;
}
/** Set the {@link MemoryMode}. */
OtlpHttpMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
/**
* Set the {@link MemoryMode}. If unset, defaults to {@link #DEFAULT_MEMORY_MODE}.
*
* <p>>When memory mode is {@link MemoryMode#REUSABLE_DATA}, serialization is optimized to reduce
* memory allocation. Additionally, the value is used for {@link MetricExporter#getMemoryMode()},
* which sends a signal to the metrics SDK to reuse memory when possible. This is safe and
* desirable for most use cases, but should be used with caution of wrapping and delegating to the
* exporter. It is not safe for the wrapping exporter to hold onto references to {@link
* MetricData} batches since the same data structures will be reused in subsequent calls to {@link
* MetricExporter#export(Collection)}.
*/
public OtlpHttpMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
requireNonNull(memoryMode, "memoryMode");
this.memoryMode = memoryMode;
return this;

View File

@ -211,8 +211,13 @@ public final class OtlpHttpSpanExporterBuilder {
return this;
}
/** Set the {@link MemoryMode}. */
OtlpHttpSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
/**
* Set the {@link MemoryMode}. If unset, defaults to {@link #DEFAULT_MEMORY_MODE}.
*
* <p>>When memory mode is {@link MemoryMode#REUSABLE_DATA}, serialization is optimized to reduce
* memory allocation.
*/
public OtlpHttpSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
requireNonNull(memoryMode, "memoryMode");
this.memoryMode = memoryMode;
return this;

View File

@ -7,12 +7,7 @@ package io.opentelemetry.exporter.otlp.internal;
import static io.opentelemetry.sdk.metrics.Aggregation.explicitBucketHistogram;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.common.export.MemoryMode;
@ -26,8 +21,6 @@ import io.opentelemetry.sdk.metrics.internal.aggregator.AggregationUtil;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
@ -62,6 +55,7 @@ public final class OtlpConfigUtil {
}
/** Invoke the setters with the OTLP configuration for the {@code dataType}. */
@SuppressWarnings("TooManyParameters")
public static void configureOtlpExporterBuilder(
String dataType,
ConfigProperties config,
@ -71,7 +65,8 @@ public final class OtlpConfigUtil {
Consumer<Duration> setTimeout,
Consumer<byte[]> setTrustedCertificates,
BiConsumer<byte[], byte[]> setClientTls,
Consumer<RetryPolicy> setRetryPolicy) {
Consumer<RetryPolicy> setRetryPolicy,
Consumer<MemoryMode> setMemoryMode) {
String protocol = getOtlpProtocol(dataType, config);
boolean isHttpProtobuf = protocol.equals(PROTOCOL_HTTP_PROTOBUF);
URL endpoint =
@ -161,6 +156,8 @@ public final class OtlpConfigUtil {
if (retryEnabled) {
setRetryPolicy.accept(RetryPolicy.getDefault());
}
ExporterBuilderUtil.configureExporterMemoryMode(config, setMemoryMode);
}
/**
@ -215,82 +212,6 @@ public final class OtlpConfigUtil {
}
}
/**
* Calls {@code #setMemoryMode} on the {@code Otlp{Protocol}{Signal}ExporterBuilder} with the
* {@code memoryMode}.
*/
public static void setMemoryModeOnOtlpExporterBuilder(Object builder, MemoryMode memoryMode) {
try {
// Metrics
if (builder instanceof OtlpGrpcMetricExporterBuilder) {
// Calling getDeclaredMethod causes all private methods to be read, which causes a
// ClassNotFoundException when running with the OkHttHttpProvider as the private
// setManagedChanel(io.grpc.ManagedChannel) is reached and io.grpc.ManagedChannel is not on
// the classpath. io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricUtil provides a layer
// of indirection which avoids scanning the OtlpGrpcMetricExporterBuilder private methods.
Class<?> otlpGrpcMetricUtil =
Class.forName("io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricUtil");
Method method =
otlpGrpcMetricUtil.getDeclaredMethod(
"setMemoryMode", OtlpGrpcMetricExporterBuilder.class, MemoryMode.class);
method.setAccessible(true);
method.invoke(null, builder, memoryMode);
} else if (builder instanceof OtlpHttpMetricExporterBuilder) {
Method method =
OtlpHttpMetricExporterBuilder.class.getDeclaredMethod(
"setMemoryMode", MemoryMode.class);
method.setAccessible(true);
method.invoke(builder, memoryMode);
} else if (builder instanceof OtlpGrpcSpanExporterBuilder) {
// Calling getDeclaredMethod causes all private methods to be read, which causes a
// ClassNotFoundException when running with the OkHttHttpProvider as the private
// setManagedChanel(io.grpc.ManagedChannel) is reached and io.grpc.ManagedChannel is not on
// the classpath. io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanUtil provides a layer
// of indirection which avoids scanning the OtlpGrpcSpanExporterBuilder private methods.
Class<?> otlpGrpcMetricUtil =
Class.forName("io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanUtil");
Method method =
otlpGrpcMetricUtil.getDeclaredMethod(
"setMemoryMode", OtlpGrpcSpanExporterBuilder.class, MemoryMode.class);
method.setAccessible(true);
method.invoke(null, builder, memoryMode);
} else if (builder instanceof OtlpHttpSpanExporterBuilder) {
Method method =
OtlpHttpSpanExporterBuilder.class.getDeclaredMethod("setMemoryMode", MemoryMode.class);
method.setAccessible(true);
method.invoke(builder, memoryMode);
} else if (builder instanceof OtlpGrpcLogRecordExporterBuilder) {
// Calling getDeclaredMethod causes all private methods to be read, which causes a
// ClassNotFoundException when running with the OkHttHttpProvider as the private
// setManagedChanel(io.grpc.ManagedChannel) is reached and io.grpc.ManagedChannel is not on
// the classpath. io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogUtil provides a layer
// of indirection which avoids scanning the OtlpGrpcLogRecordExporterBuilder private
// methods.
Class<?> otlpGrpcMetricUtil =
Class.forName("io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogUtil");
Method method =
otlpGrpcMetricUtil.getDeclaredMethod(
"setMemoryMode", OtlpGrpcLogRecordExporterBuilder.class, MemoryMode.class);
method.setAccessible(true);
method.invoke(null, builder, memoryMode);
} else if (builder instanceof OtlpHttpLogRecordExporterBuilder) {
Method method =
OtlpHttpLogRecordExporterBuilder.class.getDeclaredMethod(
"setMemoryMode", MemoryMode.class);
method.setAccessible(true);
method.invoke(builder, memoryMode);
} else {
throw new IllegalArgumentException(
"Cannot set memory mode. Unrecognized OTLP exporter builder");
}
} catch (NoSuchMethodException
| InvocationTargetException
| IllegalAccessException
| ClassNotFoundException e) {
throw new IllegalStateException("Error calling setMemoryMode.", e);
}
}
private static URL createUrl(URL context, String spec) {
try {
return new URL(context, spec);

View File

@ -10,7 +10,6 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_GR
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder;
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
@ -52,11 +51,9 @@ public class OtlpLogRecordExporterProvider
builder::setTimeout,
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy);
builder::setRetryPolicy,
builder::setMemoryMode);
builder.setMeterProvider(meterProviderRef::get);
ExporterBuilderUtil.configureExporterMemoryMode(
config,
memoryMode -> OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode));
return builder.build();
} else if (protocol.equals(PROTOCOL_GRPC)) {
@ -71,11 +68,9 @@ public class OtlpLogRecordExporterProvider
builder::setTimeout,
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy);
builder::setRetryPolicy,
builder::setMemoryMode);
builder.setMeterProvider(meterProviderRef::get);
ExporterBuilderUtil.configureExporterMemoryMode(
config,
memoryMode -> OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode));
return builder.build();
}

View File

@ -9,7 +9,6 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_M
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_GRPC;
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF;
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
@ -44,14 +43,12 @@ public class OtlpMetricExporterProvider implements ConfigurableMetricExporterPro
builder::setTimeout,
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy);
builder::setRetryPolicy,
builder::setMemoryMode);
OtlpConfigUtil.configureOtlpAggregationTemporality(
config, builder::setAggregationTemporalitySelector);
OtlpConfigUtil.configureOtlpHistogramDefaultAggregation(
config, builder::setDefaultAggregationSelector);
ExporterBuilderUtil.configureExporterMemoryMode(
config,
memoryMode -> OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode));
return builder.build();
} else if (protocol.equals(PROTOCOL_GRPC)) {
@ -66,14 +63,12 @@ public class OtlpMetricExporterProvider implements ConfigurableMetricExporterPro
builder::setTimeout,
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy);
builder::setRetryPolicy,
builder::setMemoryMode);
OtlpConfigUtil.configureOtlpAggregationTemporality(
config, builder::setAggregationTemporalitySelector);
OtlpConfigUtil.configureOtlpHistogramDefaultAggregation(
config, builder::setDefaultAggregationSelector);
ExporterBuilderUtil.configureExporterMemoryMode(
config,
memoryMode -> OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode));
return builder.build();
}

View File

@ -10,7 +10,6 @@ import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_GR
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
@ -51,11 +50,10 @@ public class OtlpSpanExporterProvider
builder::setTimeout,
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy);
builder::setRetryPolicy,
builder::setMemoryMode);
builder.setMeterProvider(meterProviderRef::get);
ExporterBuilderUtil.configureExporterMemoryMode(
config,
memoryMode -> OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode));
return builder.build();
} else if (protocol.equals(PROTOCOL_GRPC)) {
OtlpGrpcSpanExporterBuilder builder = grpcBuilder();
@ -69,11 +67,9 @@ public class OtlpSpanExporterProvider
builder::setTimeout,
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy);
builder::setRetryPolicy,
builder::setMemoryMode);
builder.setMeterProvider(meterProviderRef::get);
ExporterBuilderUtil.configureExporterMemoryMode(
config,
memoryMode -> OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode));
return builder.build();
}

View File

@ -243,8 +243,13 @@ public final class OtlpGrpcLogRecordExporterBuilder {
return this;
}
/** Set the {@link MemoryMode}. */
OtlpGrpcLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
/**
* Set the {@link MemoryMode}. If unset, defaults to {@link #DEFAULT_MEMORY_MODE}.
*
* <p>>When memory mode is {@link MemoryMode#REUSABLE_DATA}, serialization is optimized to reduce
* memory allocation.
*/
public OtlpGrpcLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
requireNonNull(memoryMode, "memoryMode");
this.memoryMode = memoryMode;
return this;

View File

@ -1,19 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.exporter.otlp.logs;
import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil;
import io.opentelemetry.sdk.common.export.MemoryMode;
final class OtlpGrpcLogUtil {
private OtlpGrpcLogUtil() {}
/** See {@link OtlpConfigUtil#setMemoryModeOnOtlpExporterBuilder(Object, MemoryMode)}. */
static void setMemoryMode(OtlpGrpcLogRecordExporterBuilder builder, MemoryMode memoryMode) {
builder.setMemoryMode(memoryMode);
}
}

View File

@ -19,11 +19,13 @@ import io.opentelemetry.exporter.otlp.internal.OtlpUserAgent;
import io.opentelemetry.sdk.common.export.MemoryMode;
import io.opentelemetry.sdk.common.export.RetryPolicy;
import io.opentelemetry.sdk.metrics.InstrumentType;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.export.AggregationTemporalitySelector;
import io.opentelemetry.sdk.metrics.export.DefaultAggregationSelector;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import java.net.URI;
import java.time.Duration;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
@ -264,8 +266,18 @@ public final class OtlpGrpcMetricExporterBuilder {
return this;
}
/** Set the {@link MemoryMode}. */
OtlpGrpcMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
/**
* Set the {@link MemoryMode}. If unset, defaults to {@link #DEFAULT_MEMORY_MODE}.
*
* <p>>When memory mode is {@link MemoryMode#REUSABLE_DATA}, serialization is optimized to reduce
* memory allocation. Additionally, the value is used for {@link MetricExporter#getMemoryMode()},
* which sends a signal to the metrics SDK to reuse memory when possible. This is safe and
* desirable for most use cases, but should be used with caution of wrapping and delegating to the
* exporter. It is not safe for the wrapping exporter to hold onto references to {@link
* MetricData} batches since the same data structures will be reused in subsequent calls to {@link
* MetricExporter#export(Collection)}.
*/
public OtlpGrpcMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
requireNonNull(memoryMode, "memoryMode");
this.memoryMode = memoryMode;
return this;

View File

@ -1,19 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.exporter.otlp.metrics;
import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil;
import io.opentelemetry.sdk.common.export.MemoryMode;
final class OtlpGrpcMetricUtil {
private OtlpGrpcMetricUtil() {}
/** See {@link OtlpConfigUtil#setMemoryModeOnOtlpExporterBuilder(Object, MemoryMode)}. */
static void setMemoryMode(OtlpGrpcMetricExporterBuilder builder, MemoryMode memoryMode) {
builder.setMemoryMode(memoryMode);
}
}

View File

@ -240,8 +240,13 @@ public final class OtlpGrpcSpanExporterBuilder {
return this;
}
/** Set the {@link MemoryMode}. */
OtlpGrpcSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
/**
* Set the {@link MemoryMode}. If unset, defaults to {@link #DEFAULT_MEMORY_MODE}.
*
* <p>>When memory mode is {@link MemoryMode#REUSABLE_DATA}, serialization is optimized to reduce
* memory allocation.
*/
public OtlpGrpcSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
requireNonNull(memoryMode, "memoryMode");
this.memoryMode = memoryMode;
return this;

View File

@ -1,19 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.exporter.otlp.trace;
import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil;
import io.opentelemetry.sdk.common.export.MemoryMode;
final class OtlpGrpcSpanUtil {
private OtlpGrpcSpanUtil() {}
/** See {@link OtlpConfigUtil#setMemoryModeOnOtlpExporterBuilder(Object, MemoryMode)}. */
static void setMemoryMode(OtlpGrpcSpanExporterBuilder builder, MemoryMode memoryMode) {
builder.setMemoryMode(memoryMode);
}
}

View File

@ -325,6 +325,7 @@ class OtlpConfigUtilTest {
value -> {},
value -> {},
(value1, value2) -> {},
value -> {},
value -> {});
return endpoint.get();

View File

@ -38,12 +38,9 @@ import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil;
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest;
import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse;
@ -213,6 +210,22 @@ abstract class OtlpExporterIntegrationTest {
testTraceExport(exporter);
}
@ParameterizedTest
@EnumSource(MemoryMode.class)
void testOtlpGrpcTraceExport_memoryMode(MemoryMode memoryMode) {
SpanExporter exporter =
OtlpGrpcSpanExporter.builder()
.setEndpoint(
"http://"
+ collector.getHost()
+ ":"
+ collector.getMappedPort(COLLECTOR_OTLP_GRPC_PORT))
.setMemoryMode(memoryMode)
.build();
testTraceExport(exporter);
}
@Test
void testOtlpGrpcTraceExport_mtls() throws Exception {
SpanExporter exporter =
@ -246,6 +259,23 @@ abstract class OtlpExporterIntegrationTest {
testTraceExport(exporter);
}
@ParameterizedTest
@EnumSource(MemoryMode.class)
void testOtlpHttpTraceExport_memoryMode(MemoryMode memoryMode) {
SpanExporter exporter =
OtlpHttpSpanExporter.builder()
.setEndpoint(
"http://"
+ collector.getHost()
+ ":"
+ collector.getMappedPort(COLLECTOR_OTLP_HTTP_PORT)
+ "/v1/traces")
.setMemoryMode(memoryMode)
.build();
testTraceExport(exporter);
}
@Test
void testOtlpHttpTraceExport_mtls() throws Exception {
SpanExporter exporter =
@ -349,16 +379,14 @@ abstract class OtlpExporterIntegrationTest {
@ParameterizedTest
@EnumSource(MemoryMode.class)
void testOtlpGrpcMetricExport_memoryMode(MemoryMode memoryMode) {
OtlpGrpcMetricExporterBuilder builder = OtlpGrpcMetricExporter.builder();
OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode);
MetricExporter exporter =
builder
OtlpGrpcMetricExporter.builder()
.setEndpoint(
"http://"
+ collector.getHost()
+ ":"
+ collector.getMappedPort(COLLECTOR_OTLP_GRPC_PORT))
.setMemoryMode(memoryMode)
.build();
assertThat(exporter.getMemoryMode()).isEqualTo(memoryMode);
@ -402,17 +430,15 @@ abstract class OtlpExporterIntegrationTest {
@ParameterizedTest
@EnumSource(MemoryMode.class)
void testOtlpHttpMetricExport_memoryMode(MemoryMode memoryMode) {
OtlpHttpMetricExporterBuilder builder = OtlpHttpMetricExporter.builder();
OtlpConfigUtil.setMemoryModeOnOtlpExporterBuilder(builder, memoryMode);
MetricExporter exporter =
builder
OtlpHttpMetricExporter.builder()
.setEndpoint(
"http://"
+ collector.getHost()
+ ":"
+ collector.getMappedPort(COLLECTOR_OTLP_HTTP_PORT)
+ "/v1/metrics")
.setMemoryMode(memoryMode)
.build();
assertThat(exporter.getMemoryMode()).isEqualTo(memoryMode);
@ -516,6 +542,22 @@ abstract class OtlpExporterIntegrationTest {
testLogRecordExporter(otlpGrpcLogRecordExporter);
}
@ParameterizedTest
@EnumSource(MemoryMode.class)
void testOtlpGrpcLogExport_memoryMode(MemoryMode memoryMode) {
LogRecordExporter otlpGrpcLogRecordExporter =
OtlpGrpcLogRecordExporter.builder()
.setEndpoint(
"http://"
+ collector.getHost()
+ ":"
+ collector.getMappedPort(COLLECTOR_OTLP_GRPC_PORT))
.setMemoryMode(memoryMode)
.build();
testLogRecordExporter(otlpGrpcLogRecordExporter);
}
@Test
void testOtlpGrpcLogExport_mtls() throws Exception {
LogRecordExporter exporter =
@ -549,6 +591,23 @@ abstract class OtlpExporterIntegrationTest {
testLogRecordExporter(otlpHttpLogRecordExporter);
}
@ParameterizedTest
@EnumSource(MemoryMode.class)
void testOtlpHttpLogExport_memoryMode(MemoryMode memoryMode) {
LogRecordExporter otlpHttpLogRecordExporter =
OtlpHttpLogRecordExporter.builder()
.setEndpoint(
"http://"
+ collector.getHost()
+ ":"
+ collector.getMappedPort(COLLECTOR_OTLP_HTTP_PORT)
+ "/v1/logs")
.setMemoryMode(memoryMode)
.build();
testLogRecordExporter(otlpHttpLogRecordExporter);
}
@Test
void testOtlpHttpLogExport_mtls() throws Exception {
LogRecordExporter exporter =