7
7
8
8
import static io .opentelemetry .sdk .metrics .Aggregation .explicitBucketHistogram ;
9
9
10
- import io .opentelemetry .exporter .otlp .http .logs .OtlpHttpLogRecordExporterBuilder ;
11
- import io .opentelemetry .exporter .otlp .http .metrics .OtlpHttpMetricExporterBuilder ;
12
- import io .opentelemetry .exporter .otlp .http .trace .OtlpHttpSpanExporterBuilder ;
13
- import io .opentelemetry .exporter .otlp .logs .OtlpGrpcLogRecordExporterBuilder ;
14
- import io .opentelemetry .exporter .otlp .metrics .OtlpGrpcMetricExporterBuilder ;
15
- import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporterBuilder ;
10
+ import io .opentelemetry .exporter .internal .ExporterBuilderUtil ;
16
11
import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
17
12
import io .opentelemetry .sdk .autoconfigure .spi .ConfigurationException ;
18
13
import io .opentelemetry .sdk .common .export .MemoryMode ;
26
21
import java .io .File ;
27
22
import java .io .IOException ;
28
23
import java .io .RandomAccessFile ;
29
- import java .lang .reflect .InvocationTargetException ;
30
- import java .lang .reflect .Method ;
31
24
import java .net .MalformedURLException ;
32
25
import java .net .URL ;
33
26
import java .net .URLDecoder ;
@@ -62,6 +55,7 @@ public static String getOtlpProtocol(String dataType, ConfigProperties config) {
62
55
}
63
56
64
57
/** Invoke the setters with the OTLP configuration for the {@code dataType}. */
58
+ @ SuppressWarnings ("TooManyParameters" )
65
59
public static void configureOtlpExporterBuilder (
66
60
String dataType ,
67
61
ConfigProperties config ,
@@ -71,7 +65,8 @@ public static void configureOtlpExporterBuilder(
71
65
Consumer <Duration > setTimeout ,
72
66
Consumer <byte []> setTrustedCertificates ,
73
67
BiConsumer <byte [], byte []> setClientTls ,
74
- Consumer <RetryPolicy > setRetryPolicy ) {
68
+ Consumer <RetryPolicy > setRetryPolicy ,
69
+ Consumer <MemoryMode > setMemoryMode ) {
75
70
String protocol = getOtlpProtocol (dataType , config );
76
71
boolean isHttpProtobuf = protocol .equals (PROTOCOL_HTTP_PROTOBUF );
77
72
URL endpoint =
@@ -161,6 +156,8 @@ public static void configureOtlpExporterBuilder(
161
156
if (retryEnabled ) {
162
157
setRetryPolicy .accept (RetryPolicy .getDefault ());
163
158
}
159
+
160
+ ExporterBuilderUtil .configureExporterMemoryMode (config , setMemoryMode );
164
161
}
165
162
166
163
/**
@@ -215,82 +212,6 @@ public static void configureOtlpHistogramDefaultAggregation(
215
212
}
216
213
}
217
214
218
- /**
219
- * Calls {@code #setMemoryMode} on the {@code Otlp{Protocol}{Signal}ExporterBuilder} with the
220
- * {@code memoryMode}.
221
- */
222
- public static void setMemoryModeOnOtlpExporterBuilder (Object builder , MemoryMode memoryMode ) {
223
- try {
224
- // Metrics
225
- if (builder instanceof OtlpGrpcMetricExporterBuilder ) {
226
- // Calling getDeclaredMethod causes all private methods to be read, which causes a
227
- // ClassNotFoundException when running with the OkHttHttpProvider as the private
228
- // setManagedChanel(io.grpc.ManagedChannel) is reached and io.grpc.ManagedChannel is not on
229
- // the classpath. io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricUtil provides a layer
230
- // of indirection which avoids scanning the OtlpGrpcMetricExporterBuilder private methods.
231
- Class <?> otlpGrpcMetricUtil =
232
- Class .forName ("io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricUtil" );
233
- Method method =
234
- otlpGrpcMetricUtil .getDeclaredMethod (
235
- "setMemoryMode" , OtlpGrpcMetricExporterBuilder .class , MemoryMode .class );
236
- method .setAccessible (true );
237
- method .invoke (null , builder , memoryMode );
238
- } else if (builder instanceof OtlpHttpMetricExporterBuilder ) {
239
- Method method =
240
- OtlpHttpMetricExporterBuilder .class .getDeclaredMethod (
241
- "setMemoryMode" , MemoryMode .class );
242
- method .setAccessible (true );
243
- method .invoke (builder , memoryMode );
244
- } else if (builder instanceof OtlpGrpcSpanExporterBuilder ) {
245
- // Calling getDeclaredMethod causes all private methods to be read, which causes a
246
- // ClassNotFoundException when running with the OkHttHttpProvider as the private
247
- // setManagedChanel(io.grpc.ManagedChannel) is reached and io.grpc.ManagedChannel is not on
248
- // the classpath. io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanUtil provides a layer
249
- // of indirection which avoids scanning the OtlpGrpcSpanExporterBuilder private methods.
250
- Class <?> otlpGrpcMetricUtil =
251
- Class .forName ("io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanUtil" );
252
- Method method =
253
- otlpGrpcMetricUtil .getDeclaredMethod (
254
- "setMemoryMode" , OtlpGrpcSpanExporterBuilder .class , MemoryMode .class );
255
- method .setAccessible (true );
256
- method .invoke (null , builder , memoryMode );
257
- } else if (builder instanceof OtlpHttpSpanExporterBuilder ) {
258
- Method method =
259
- OtlpHttpSpanExporterBuilder .class .getDeclaredMethod ("setMemoryMode" , MemoryMode .class );
260
- method .setAccessible (true );
261
- method .invoke (builder , memoryMode );
262
- } else if (builder instanceof OtlpGrpcLogRecordExporterBuilder ) {
263
- // Calling getDeclaredMethod causes all private methods to be read, which causes a
264
- // ClassNotFoundException when running with the OkHttHttpProvider as the private
265
- // setManagedChanel(io.grpc.ManagedChannel) is reached and io.grpc.ManagedChannel is not on
266
- // the classpath. io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogUtil provides a layer
267
- // of indirection which avoids scanning the OtlpGrpcLogRecordExporterBuilder private
268
- // methods.
269
- Class <?> otlpGrpcMetricUtil =
270
- Class .forName ("io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogUtil" );
271
- Method method =
272
- otlpGrpcMetricUtil .getDeclaredMethod (
273
- "setMemoryMode" , OtlpGrpcLogRecordExporterBuilder .class , MemoryMode .class );
274
- method .setAccessible (true );
275
- method .invoke (null , builder , memoryMode );
276
- } else if (builder instanceof OtlpHttpLogRecordExporterBuilder ) {
277
- Method method =
278
- OtlpHttpLogRecordExporterBuilder .class .getDeclaredMethod (
279
- "setMemoryMode" , MemoryMode .class );
280
- method .setAccessible (true );
281
- method .invoke (builder , memoryMode );
282
- } else {
283
- throw new IllegalArgumentException (
284
- "Cannot set memory mode. Unrecognized OTLP exporter builder" );
285
- }
286
- } catch (NoSuchMethodException
287
- | InvocationTargetException
288
- | IllegalAccessException
289
- | ClassNotFoundException e ) {
290
- throw new IllegalStateException ("Error calling setMemoryMode." , e );
291
- }
292
- }
293
-
294
215
private static URL createUrl (URL context , String spec ) {
295
216
try {
296
217
return new URL (context , spec );
0 commit comments