Make OTLP exporter memory mode API public (#6469)
This commit is contained in:
parent
7da7037717
commit
f57906131e
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -325,6 +325,7 @@ class OtlpConfigUtilTest {
|
|||
value -> {},
|
||||
value -> {},
|
||||
(value1, value2) -> {},
|
||||
value -> {},
|
||||
value -> {});
|
||||
|
||||
return endpoint.get();
|
||||
|
|
|
@ -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 =
|
||||
|
|
Loading…
Reference in New Issue