Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
*/
public final class CompressorUtil {

private static final Map<String, Compressor> compressorRegistry = buildCompressorRegistry();
private static final Map<String, Compressor> compressorRegistry =
buildCompressorRegistry(CompressorUtil.class.getClassLoader());

private CompressorUtil() {}

Expand All @@ -36,19 +37,36 @@
*/
@Nullable
public static Compressor validateAndResolveCompressor(String compressionMethod) {
Set<String> supportedEncodings = compressorRegistry.keySet();
Compressor compressor = compressorRegistry.get(compressionMethod);
return validateAndResolveCompressor(compressionMethod, null);

Check warning on line 40 in exporters/common/src/main/java/io/opentelemetry/exporter/internal/compression/CompressorUtil.java

View check run for this annotation

Codecov / codecov/patch

exporters/common/src/main/java/io/opentelemetry/exporter/internal/compression/CompressorUtil.java#L40

Added line #L40 was not covered by tests
}

/**
* Validate that the {@code compressionMethod} is "none" or matches a registered compressor.
*
* @param compressionMethod the compression method to validate and resolve
* @param classLoader the class loader to use for loading SPI implementations, or null to use the
* default
* @return {@code null} if {@code compressionMethod} is "none" or the registered compressor
* @throws IllegalArgumentException if no match is found
*/
@Nullable
public static Compressor validateAndResolveCompressor(
String compressionMethod, @Nullable ClassLoader classLoader) {
Map<String, Compressor> registry =
classLoader == null ? compressorRegistry : buildCompressorRegistry(classLoader);

Set<String> supportedEncodings = registry.keySet();
Compressor compressor = registry.get(compressionMethod);
checkArgument(
"none".equals(compressionMethod) || compressor != null,
"Unsupported compressionMethod. Compression method must be \"none\" or one of: "
+ supportedEncodings.stream().collect(joining(",", "[", "]")));
return compressor;
}

private static Map<String, Compressor> buildCompressorRegistry() {
private static Map<String, Compressor> buildCompressorRegistry(ClassLoader classLoader) {
Map<String, Compressor> compressors = new HashMap<>();
for (CompressorProvider spi :
ServiceLoader.load(CompressorProvider.class, CompressorUtil.class.getClassLoader())) {
for (CompressorProvider spi : ServiceLoader.load(CompressorProvider.class, classLoader)) {
Compressor compressor = spi.getInstance();
compressors.put(compressor.getEncoding(), compressor);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public final class OtlpHttpLogRecordExporterBuilder {

private final HttpExporterBuilder<Marshaler> delegate;
private MemoryMode memoryMode;
private ClassLoader serviceClassLoader = OtlpHttpLogRecordExporterBuilder.class.getClassLoader();

OtlpHttpLogRecordExporterBuilder(HttpExporterBuilder<Marshaler> delegate, MemoryMode memoryMode) {
this.delegate = delegate;
Expand Down Expand Up @@ -117,7 +118,8 @@ public OtlpHttpLogRecordExporterBuilder setEndpoint(String endpoint) {
*/
public OtlpHttpLogRecordExporterBuilder setCompression(String compressionMethod) {
requireNonNull(compressionMethod, "compressionMethod");
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
Compressor compressor =
CompressorUtil.validateAndResolveCompressor(compressionMethod, serviceClassLoader);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like we should move the call to CompressorUtil.validateAndResolveCompressor down to HttpExporterBuilder, GrpcExporterBuilder to avoid the clutter of keeping ClassLoader serviceClassLoader property.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for reviewing this. I agree with you and I am making the changes. Let me get back after wrap them up.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jack-berg Let me know how the current version looks.

delegate.setCompression(compressor);
return this;
}
Expand Down Expand Up @@ -251,6 +253,7 @@ public OtlpHttpLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpHttpLogRecordExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
requireNonNull(serviceClassLoader, "serviceClassLoader");
this.serviceClassLoader = serviceClassLoader;
delegate.setServiceClassLoader(serviceClassLoader);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public final class OtlpHttpMetricExporterBuilder {
private AggregationTemporalitySelector aggregationTemporalitySelector;
private DefaultAggregationSelector defaultAggregationSelector;
private MemoryMode memoryMode;
private ClassLoader serviceClassLoader = OtlpHttpMetricExporterBuilder.class.getClassLoader();

OtlpHttpMetricExporterBuilder(
HttpExporterBuilder<Marshaler> delegate,
Expand Down Expand Up @@ -137,7 +138,8 @@ public OtlpHttpMetricExporterBuilder setEndpoint(String endpoint) {
*/
public OtlpHttpMetricExporterBuilder setCompression(String compressionMethod) {
requireNonNull(compressionMethod, "compressionMethod");
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
Compressor compressor =
CompressorUtil.validateAndResolveCompressor(compressionMethod, serviceClassLoader);
delegate.setCompression(compressor);
return this;
}
Expand Down Expand Up @@ -310,6 +312,7 @@ public OtlpHttpMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpHttpMetricExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
requireNonNull(serviceClassLoader, "serviceClassLoader");
this.serviceClassLoader = serviceClassLoader;
delegate.setServiceClassLoader(serviceClassLoader);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public final class OtlpHttpSpanExporterBuilder {

private final HttpExporterBuilder<Marshaler> delegate;
private MemoryMode memoryMode;
private ClassLoader serviceClassLoader = OtlpHttpSpanExporterBuilder.class.getClassLoader();

OtlpHttpSpanExporterBuilder(HttpExporterBuilder<Marshaler> delegate, MemoryMode memoryMode) {
this.delegate = delegate;
Expand Down Expand Up @@ -117,7 +118,8 @@ public OtlpHttpSpanExporterBuilder setEndpoint(String endpoint) {
*/
public OtlpHttpSpanExporterBuilder setCompression(String compressionMethod) {
requireNonNull(compressionMethod, "compressionMethod");
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
Compressor compressor =
CompressorUtil.validateAndResolveCompressor(compressionMethod, serviceClassLoader);
delegate.setCompression(compressor);
return this;
}
Expand Down Expand Up @@ -252,6 +254,7 @@ public OtlpHttpSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpHttpSpanExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
requireNonNull(serviceClassLoader, "serviceClassLoader");
this.serviceClassLoader = serviceClassLoader;
delegate.setServiceClassLoader(serviceClassLoader);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public final class OtlpGrpcLogRecordExporterBuilder {
// Visible for testing
final GrpcExporterBuilder<Marshaler> delegate;
private MemoryMode memoryMode;
private ClassLoader serviceClassLoader = OtlpGrpcLogRecordExporterBuilder.class.getClassLoader();

OtlpGrpcLogRecordExporterBuilder(GrpcExporterBuilder<Marshaler> delegate, MemoryMode memoryMode) {
this.delegate = delegate;
Expand Down Expand Up @@ -150,7 +151,8 @@ public OtlpGrpcLogRecordExporterBuilder setEndpoint(String endpoint) {
*/
public OtlpGrpcLogRecordExporterBuilder setCompression(String compressionMethod) {
requireNonNull(compressionMethod, "compressionMethod");
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
Compressor compressor =
CompressorUtil.validateAndResolveCompressor(compressionMethod, serviceClassLoader);
delegate.setCompression(compressor);
return this;
}
Expand Down Expand Up @@ -280,6 +282,7 @@ public OtlpGrpcLogRecordExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpGrpcLogRecordExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
requireNonNull(serviceClassLoader, "serviceClassLoader");
this.serviceClassLoader = serviceClassLoader;
delegate.setServiceClassLoader(serviceClassLoader);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public final class OtlpGrpcMetricExporterBuilder {
private AggregationTemporalitySelector aggregationTemporalitySelector;
private DefaultAggregationSelector defaultAggregationSelector;
private MemoryMode memoryMode;
private ClassLoader serviceClassLoader = OtlpGrpcMetricExporterBuilder.class.getClassLoader();

OtlpGrpcMetricExporterBuilder(
GrpcExporterBuilder<Marshaler> delegate,
Expand Down Expand Up @@ -169,7 +170,8 @@ public OtlpGrpcMetricExporterBuilder setEndpoint(String endpoint) {
*/
public OtlpGrpcMetricExporterBuilder setCompression(String compressionMethod) {
requireNonNull(compressionMethod, "compressionMethod");
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
Compressor compressor =
CompressorUtil.validateAndResolveCompressor(compressionMethod, serviceClassLoader);
delegate.setCompression(compressor);
return this;
}
Expand Down Expand Up @@ -338,6 +340,7 @@ public OtlpGrpcMetricExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpGrpcMetricExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
requireNonNull(serviceClassLoader, "serviceClassLoader");
this.serviceClassLoader = serviceClassLoader;
delegate.setServiceClassLoader(serviceClassLoader);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public final class OtlpGrpcSpanExporterBuilder {
// Visible for testing
final GrpcExporterBuilder<Marshaler> delegate;
private MemoryMode memoryMode;
private ClassLoader serviceClassLoader = OtlpGrpcSpanExporterBuilder.class.getClassLoader();

OtlpGrpcSpanExporterBuilder(GrpcExporterBuilder<Marshaler> delegate, MemoryMode memoryMode) {
this.delegate = delegate;
Expand Down Expand Up @@ -146,7 +147,8 @@ public OtlpGrpcSpanExporterBuilder setEndpoint(String endpoint) {
*/
public OtlpGrpcSpanExporterBuilder setCompression(String compressionMethod) {
requireNonNull(compressionMethod, "compressionMethod");
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
Compressor compressor =
CompressorUtil.validateAndResolveCompressor(compressionMethod, serviceClassLoader);
delegate.setCompression(compressor);
return this;
}
Expand Down Expand Up @@ -277,6 +279,7 @@ public OtlpGrpcSpanExporterBuilder setMemoryMode(MemoryMode memoryMode) {
*/
public OtlpGrpcSpanExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
requireNonNull(serviceClassLoader, "serviceClassLoader");
this.serviceClassLoader = serviceClassLoader;
delegate.setServiceClassLoader(serviceClassLoader);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public final class OtlpGrpcProfilesExporterBuilder {
private static final String DEFAULT_ENDPOINT_URL = "http://localhost:4317";
private static final URI DEFAULT_ENDPOINT = URI.create(DEFAULT_ENDPOINT_URL);
private static final long DEFAULT_TIMEOUT_SECS = 10;
private ClassLoader serviceClassLoader = OtlpGrpcProfilesExporterBuilder.class.getClassLoader();

// TODO maybe make more efficient by adding support for MEMORY_MODE

Expand Down Expand Up @@ -139,7 +140,8 @@ public OtlpGrpcProfilesExporterBuilder setEndpoint(String endpoint) {
*/
public OtlpGrpcProfilesExporterBuilder setCompression(String compressionMethod) {
requireNonNull(compressionMethod, "compressionMethod");
Compressor compressor = CompressorUtil.validateAndResolveCompressor(compressionMethod);
Compressor compressor =
CompressorUtil.validateAndResolveCompressor(compressionMethod, serviceClassLoader);
delegate.setCompression(compressor);
return this;
}
Expand Down Expand Up @@ -207,6 +209,7 @@ public OtlpGrpcProfilesExporterBuilder setRetryPolicy(@Nullable RetryPolicy retr
/** Set the {@link ClassLoader} used to load the sender API. */
public OtlpGrpcProfilesExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader) {
requireNonNull(serviceClassLoader, "serviceClassLoader");
this.serviceClassLoader = serviceClassLoader;
delegate.setServiceClassLoader(serviceClassLoader);
return this;
}
Expand Down
Loading