Remove nullable from file config Factory contract (#6612)

This commit is contained in:
jack-berg 2024-08-08 15:08:57 -05:00 committed by GitHub
parent 04a2b0a841
commit 56e7ebe669
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
43 changed files with 96 additions and 358 deletions

View File

@ -17,11 +17,7 @@ import static org.mockito.Mockito.verify;
import io.github.netmikey.logunit.api.LogCapturer;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
import io.opentelemetry.api.incubator.events.GlobalEventLoggerProvider;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
import io.opentelemetry.internal.testing.CleanupExtension;
import io.opentelemetry.sdk.OpenTelemetrySdk;
@ -91,11 +87,6 @@ class FileConfigurationTest {
Resource.getDefault().toBuilder().put("service.name", "test").build())
.addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create()))
.build())
.setPropagators(
ContextPropagators.create(
TextMapPropagator.composite(
W3CTraceContextPropagator.getInstance(),
W3CBaggagePropagator.getInstance())))
.build();
cleanup.addCloseable(expectedSdk);
AutoConfiguredOpenTelemetrySdkBuilder builder = spy(AutoConfiguredOpenTelemetrySdk.builder());

View File

@ -12,7 +12,6 @@ import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Base2E
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExplicitBucketHistogram;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class AggregationFactory
implements Factory<Aggregation, io.opentelemetry.sdk.metrics.Aggregation> {
@ -27,11 +26,7 @@ final class AggregationFactory
@Override
public io.opentelemetry.sdk.metrics.Aggregation create(
@Nullable Aggregation model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model == null) {
return io.opentelemetry.sdk.metrics.Aggregation.defaultAggregation();
}
Aggregation model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model.getDrop() != null) {
return io.opentelemetry.sdk.metrics.Aggregation.drop();
}

View File

@ -14,7 +14,6 @@ import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Attributes;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class AttributesFactory
implements Factory<Attributes, io.opentelemetry.api.common.Attributes> {
@ -29,11 +28,7 @@ final class AttributesFactory
@Override
public io.opentelemetry.api.common.Attributes create(
@Nullable Attributes model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model == null) {
return io.opentelemetry.api.common.Attributes.empty();
}
Attributes model, SpiHelper spiHelper, List<Closeable> closeables) {
AttributesBuilder builder = io.opentelemetry.api.common.Attributes.builder();
String serviceName = model.getServiceName();

View File

@ -8,7 +8,6 @@ package io.opentelemetry.sdk.extension.incubator.fileconfig;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
interface Factory<ModelT, ResultT> {
@ -20,5 +19,5 @@ interface Factory<ModelT, ResultT> {
* @param closeables mutable list of closeables created
* @return the {@link ResultT}
*/
ResultT create(@Nullable ModelT model, SpiHelper spiHelper, List<Closeable> closeables);
ResultT create(ModelT model, SpiHelper spiHelper, List<Closeable> closeables);
}

View File

@ -32,6 +32,13 @@ final class FileConfigUtil {
return object;
}
static <T> T requireNonNull(@Nullable T object, String description) {
if (object == null) {
throw new ConfigurationException(description + " is required but is null");
}
return object;
}
/**
* Find a registered {@link ComponentProvider} which {@link ComponentProvider#getType()} matching
* {@code type}, {@link ComponentProvider#getName()} matching {@code name}, and call {@link

View File

@ -13,7 +13,6 @@ import io.opentelemetry.sdk.metrics.InstrumentSelectorBuilder;
import io.opentelemetry.sdk.metrics.InstrumentType;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class InstrumentSelectorFactory implements Factory<Selector, InstrumentSelector> {
@ -27,11 +26,7 @@ final class InstrumentSelectorFactory implements Factory<Selector, InstrumentSel
@Override
public InstrumentSelector create(
@Nullable Selector model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model == null) {
throw new ConfigurationException("selector must not be null");
}
Selector model, SpiHelper spiHelper, List<Closeable> closeables) {
InstrumentSelectorBuilder builder = InstrumentSelector.builder();
if (model.getInstrumentName() != null) {
builder.setName(model.getInstrumentName());

View File

@ -12,7 +12,6 @@ import io.opentelemetry.sdk.logs.LogLimits;
import io.opentelemetry.sdk.logs.LogLimitsBuilder;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class LogLimitsFactory implements Factory<LogRecordLimitsAndAttributeLimits, LogLimits> {
@ -26,12 +25,7 @@ final class LogLimitsFactory implements Factory<LogRecordLimitsAndAttributeLimit
@Override
public LogLimits create(
@Nullable LogRecordLimitsAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return LogLimits.getDefault();
}
LogRecordLimitsAndAttributeLimits model, SpiHelper spiHelper, List<Closeable> closeables) {
LogLimitsBuilder builder = LogLimits.builder();
AttributeLimits attributeLimitsModel = model.getAttributeLimits();

View File

@ -14,7 +14,6 @@ import io.opentelemetry.sdk.logs.export.LogRecordExporter;
import java.io.Closeable;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
final class LogRecordExporterFactory
implements Factory<
@ -29,19 +28,11 @@ final class LogRecordExporterFactory
return INSTANCE;
}
@SuppressWarnings("NullAway") // Override superclass non-null response
@Override
@Nullable
public LogRecordExporter create(
@Nullable
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporter
model,
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporter model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return null;
}
Otlp otlpModel = model.getOtlp();
if (otlpModel != null) {
model.getAdditionalProperties().put("otlp", otlpModel);
@ -67,8 +58,8 @@ final class LogRecordExporterFactory
exporterKeyValue.getKey(),
exporterKeyValue.getValue());
return FileConfigUtil.addAndReturn(closeables, logRecordExporter);
} else {
throw new ConfigurationException("log exporter must be set");
}
return null;
}
}

View File

@ -17,7 +17,6 @@ import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
import java.io.Closeable;
import java.time.Duration;
import java.util.List;
import javax.annotation.Nullable;
final class LogRecordProcessorFactory
implements Factory<
@ -34,24 +33,18 @@ final class LogRecordProcessorFactory
@Override
public LogRecordProcessor create(
@Nullable
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessor
model,
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessor model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return LogRecordProcessor.composite();
}
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessor
batchModel = model.getBatch();
if (batchModel != null) {
LogRecordExporter exporterModel = batchModel.getExporter();
LogRecordExporter exporterModel =
FileConfigUtil.requireNonNull(
batchModel.getExporter(), "batch log record processor exporter");
io.opentelemetry.sdk.logs.export.LogRecordExporter logRecordExporter =
LogRecordExporterFactory.getInstance().create(exporterModel, spiHelper, closeables);
if (logRecordExporter == null) {
throw new ConfigurationException("exporter required for batch log record processor");
}
BatchLogRecordProcessorBuilder builder = BatchLogRecordProcessor.builder(logRecordExporter);
if (batchModel.getExportTimeout() != null) {
builder.setExporterTimeout(Duration.ofMillis(batchModel.getExportTimeout()));
@ -71,12 +64,11 @@ final class LogRecordProcessorFactory
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleLogRecordProcessor
simpleModel = model.getSimple();
if (simpleModel != null) {
LogRecordExporter exporterModel = simpleModel.getExporter();
LogRecordExporter exporterModel =
FileConfigUtil.requireNonNull(
simpleModel.getExporter(), "simple log record processor exporter");
io.opentelemetry.sdk.logs.export.LogRecordExporter logRecordExporter =
LogRecordExporterFactory.getInstance().create(exporterModel, spiHelper, closeables);
if (logRecordExporter == null) {
throw new ConfigurationException("exporter required for simple log record processor");
}
return FileConfigUtil.addAndReturn(
closeables, SimpleLogRecordProcessor.create(logRecordExporter));
}
@ -86,8 +78,8 @@ final class LogRecordProcessorFactory
throw new ConfigurationException(
"Unrecognized log record processor(s): "
+ model.getAdditionalProperties().keySet().stream().collect(joining(",", "[", "]")));
} else {
throw new ConfigurationException("log processor must be set");
}
return LogRecordProcessor.composite();
}
}

View File

@ -13,7 +13,6 @@ import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class LoggerProviderFactory
implements Factory<LoggerProviderAndAttributeLimits, SdkLoggerProviderBuilder> {
@ -28,13 +27,9 @@ final class LoggerProviderFactory
@Override
public SdkLoggerProviderBuilder create(
@Nullable LoggerProviderAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
LoggerProviderAndAttributeLimits model, SpiHelper spiHelper, List<Closeable> closeables) {
SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder();
if (model == null) {
return builder;
}
LoggerProvider loggerProviderModel = model.getLoggerProvider();
if (loggerProviderModel == null) {
return builder;

View File

@ -5,15 +5,18 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigUtil.requireNonNull;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MeterProvider;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricReader;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Selector;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Stream;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.View;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class MeterProviderFactory implements Factory<MeterProvider, SdkMeterProviderBuilder> {
@ -27,11 +30,7 @@ final class MeterProviderFactory implements Factory<MeterProvider, SdkMeterProvi
@Override
public SdkMeterProviderBuilder create(
@Nullable MeterProvider model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model == null) {
return SdkMeterProvider.builder();
}
MeterProvider model, SpiHelper spiHelper, List<Closeable> closeables) {
SdkMeterProviderBuilder builder = SdkMeterProvider.builder();
List<MetricReader> readerModels = model.getReaders();
@ -49,11 +48,13 @@ final class MeterProviderFactory implements Factory<MeterProvider, SdkMeterProvi
List<View> viewModels = model.getViews();
if (viewModels != null) {
viewModels.forEach(
viewModel ->
builder.registerView(
InstrumentSelectorFactory.getInstance()
.create(viewModel.getSelector(), spiHelper, closeables),
ViewFactory.getInstance().create(viewModel.getStream(), spiHelper, closeables)));
viewModel -> {
Selector selector = requireNonNull(viewModel.getSelector(), "view selector");
Stream stream = requireNonNull(viewModel.getStream(), "view stream");
builder.registerView(
InstrumentSelectorFactory.getInstance().create(selector, spiHelper, closeables),
ViewFactory.getInstance().create(stream, spiHelper, closeables));
});
}
return builder;

View File

@ -14,7 +14,6 @@ import io.opentelemetry.sdk.metrics.export.MetricExporter;
import java.io.Closeable;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
final class MetricExporterFactory
implements Factory<
@ -29,18 +28,11 @@ final class MetricExporterFactory
return INSTANCE;
}
@SuppressWarnings("NullAway") // Override superclass non-null response
@Override
@Nullable
public MetricExporter create(
@Nullable
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricExporter model,
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricExporter model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return null;
}
OtlpMetric otlpModel = model.getOtlp();
if (otlpModel != null) {
model.getAdditionalProperties().put("otlp", otlpModel);
@ -74,8 +66,8 @@ final class MetricExporterFactory
exporterKeyValue.getKey(),
exporterKeyValue.getValue());
return FileConfigUtil.addAndReturn(closeables, metricExporter);
} else {
throw new ConfigurationException("metric exporter must be set");
}
return null;
}
}

View File

@ -5,6 +5,8 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigUtil.requireNonNull;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricExporter;
@ -16,7 +18,6 @@ import io.opentelemetry.sdk.metrics.export.PeriodicMetricReaderBuilder;
import java.io.Closeable;
import java.time.Duration;
import java.util.List;
import javax.annotation.Nullable;
final class MetricReaderFactory
implements Factory<
@ -31,26 +32,17 @@ final class MetricReaderFactory
return INSTANCE;
}
@SuppressWarnings("NullAway") // Override superclass non-null response
@Override
@Nullable
public MetricReader create(
@Nullable
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricReader model,
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricReader model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return null;
}
PeriodicMetricReader periodicModel = model.getPeriodic();
if (periodicModel != null) {
MetricExporter exporterModel = periodicModel.getExporter();
MetricExporter exporterModel =
requireNonNull(periodicModel.getExporter(), "periodic metric reader exporter");
io.opentelemetry.sdk.metrics.export.MetricExporter metricExporter =
MetricExporterFactory.getInstance().create(exporterModel, spiHelper, closeables);
if (metricExporter == null) {
throw new ConfigurationException("exporter required for periodic reader");
}
PeriodicMetricReaderBuilder builder =
io.opentelemetry.sdk.metrics.export.PeriodicMetricReader.builder(
FileConfigUtil.addAndReturn(closeables, metricExporter));
@ -62,10 +54,8 @@ final class MetricReaderFactory
PullMetricReader pullModel = model.getPull();
if (pullModel != null) {
MetricExporter exporterModel = pullModel.getExporter();
if (exporterModel == null) {
throw new ConfigurationException("exporter required for pull reader");
}
MetricExporter exporterModel =
requireNonNull(pullModel.getExporter(), "pull metric reader exporter");
Prometheus prometheusModel = exporterModel.getPrometheus();
if (prometheusModel != null) {
MetricReader metricReader =
@ -77,6 +67,6 @@ final class MetricReaderFactory
throw new ConfigurationException("prometheus is the only currently supported pull reader");
}
return null;
throw new ConfigurationException("reader must be set");
}
}

View File

@ -14,7 +14,6 @@ import io.opentelemetry.sdk.resources.Resource;
import java.io.Closeable;
import java.util.List;
import java.util.Objects;
import javax.annotation.Nullable;
final class OpenTelemetryConfigurationFactory
implements Factory<OpenTelemetryConfiguration, OpenTelemetrySdk> {
@ -30,12 +29,8 @@ final class OpenTelemetryConfigurationFactory
@Override
public OpenTelemetrySdk create(
@Nullable OpenTelemetryConfiguration model, SpiHelper spiHelper, List<Closeable> closeables) {
OpenTelemetryConfiguration model, SpiHelper spiHelper, List<Closeable> closeables) {
OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder();
if (model == null) {
return FileConfigUtil.addAndReturn(closeables, builder.build());
}
if (!"0.1".equals(model.getFileFormat())) {
throw new ConfigurationException("Unsupported file format. Supported formats include: 0.1");
}
@ -44,11 +39,15 @@ final class OpenTelemetryConfigurationFactory
return builder.build();
}
builder.setPropagators(
PropagatorFactory.getInstance().create(model.getPropagator(), spiHelper, closeables));
if (model.getPropagator() != null) {
builder.setPropagators(
PropagatorFactory.getInstance().create(model.getPropagator(), spiHelper, closeables));
}
Resource resource =
ResourceFactory.getInstance().create(model.getResource(), spiHelper, closeables);
Resource resource = Resource.getDefault();
if (model.getResource() != null) {
resource = ResourceFactory.getInstance().create(model.getResource(), spiHelper, closeables);
}
if (model.getLoggerProvider() != null) {
builder.setLoggerProvider(

View File

@ -5,13 +5,14 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigUtil.requireNonNull;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Propagator;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class PropagatorFactory implements Factory<Propagator, ContextPropagators> {
@ -25,11 +26,8 @@ final class PropagatorFactory implements Factory<Propagator, ContextPropagators>
@Override
public ContextPropagators create(
@Nullable Propagator model, SpiHelper spiHelper, List<Closeable> closeables) {
List<String> compositeModel = null;
if (model != null) {
compositeModel = model.getComposite();
}
Propagator model, SpiHelper spiHelper, List<Closeable> closeables) {
List<String> compositeModel = requireNonNull(model.getComposite(), "composite propagator");
TextMapPropagator textMapPropagator =
TextMapPropagatorFactory.getInstance().create(compositeModel, spiHelper, closeables);
return ContextPropagators.create(textMapPropagator);

View File

@ -11,7 +11,6 @@ import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Resour
import io.opentelemetry.sdk.resources.ResourceBuilder;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class ResourceFactory implements Factory<Resource, io.opentelemetry.sdk.resources.Resource> {
@ -25,11 +24,7 @@ final class ResourceFactory implements Factory<Resource, io.opentelemetry.sdk.re
@Override
public io.opentelemetry.sdk.resources.Resource create(
@Nullable Resource model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model == null) {
return io.opentelemetry.sdk.resources.Resource.getDefault();
}
Resource model, SpiHelper spiHelper, List<Closeable> closeables) {
ResourceBuilder builder = io.opentelemetry.sdk.resources.Resource.getDefault().toBuilder();
Attributes attributesModel = model.getAttributes();

View File

@ -23,7 +23,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
final class SamplerFactory
implements Factory<
@ -39,13 +38,9 @@ final class SamplerFactory
@Override
public Sampler create(
@Nullable io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Sampler model,
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Sampler model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return Sampler.parentBased(Sampler.alwaysOn());
}
if (model.getAlwaysOn() != null) {
return Sampler.alwaysOn();
}
@ -121,9 +116,9 @@ final class SamplerFactory
throw new ConfigurationException(
"Unrecognized sampler(s): "
+ model.getAdditionalProperties().keySet().stream().collect(joining(",", "[", "]")));
} else {
throw new ConfigurationException("sampler must be set");
}
return Sampler.parentBased(Sampler.alwaysOn());
}
private static NamedSpiManager<Sampler> samplerSpiManager(

View File

@ -15,7 +15,6 @@ import io.opentelemetry.sdk.trace.export.SpanExporter;
import java.io.Closeable;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
final class SpanExporterFactory
implements Factory<
@ -30,18 +29,11 @@ final class SpanExporterFactory
return INSTANCE;
}
@SuppressWarnings("NullAway") // Override superclass non-null response
@Override
@Nullable
public SpanExporter create(
@Nullable
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanExporter model,
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanExporter model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return null;
}
Otlp otlpModel = model.getOtlp();
if (otlpModel != null) {
model.getAdditionalProperties().put("otlp", otlpModel);
@ -76,8 +68,8 @@ final class SpanExporterFactory
exporterKeyValue.getKey(),
exporterKeyValue.getValue());
return FileConfigUtil.addAndReturn(closeables, spanExporter);
} else {
throw new ConfigurationException("span exporter must be set");
}
return null;
}
}

View File

@ -11,7 +11,6 @@ import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanLi
import io.opentelemetry.sdk.trace.SpanLimitsBuilder;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class SpanLimitsFactory
implements Factory<SpanLimitsAndAttributeLimits, io.opentelemetry.sdk.trace.SpanLimits> {
@ -26,13 +25,7 @@ final class SpanLimitsFactory
@Override
public io.opentelemetry.sdk.trace.SpanLimits create(
@Nullable SpanLimitsAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return io.opentelemetry.sdk.trace.SpanLimits.getDefault();
}
SpanLimitsAndAttributeLimits model, SpiHelper spiHelper, List<Closeable> closeables) {
SpanLimitsBuilder builder = io.opentelemetry.sdk.trace.SpanLimits.builder();
AttributeLimits attributeLimitsModel = model.getAttributeLimits();

View File

@ -17,7 +17,6 @@ import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import java.io.Closeable;
import java.time.Duration;
import java.util.List;
import javax.annotation.Nullable;
final class SpanProcessorFactory
implements Factory<
@ -34,23 +33,16 @@ final class SpanProcessorFactory
@Override
public SpanProcessor create(
@Nullable
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessor model,
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessor model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) {
return SpanProcessor.composite();
}
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessor
batchModel = model.getBatch();
if (batchModel != null) {
SpanExporter exporterModel = batchModel.getExporter();
SpanExporter exporterModel =
FileConfigUtil.requireNonNull(batchModel.getExporter(), "batch span processor exporter");
io.opentelemetry.sdk.trace.export.SpanExporter spanExporter =
SpanExporterFactory.getInstance().create(exporterModel, spiHelper, closeables);
if (spanExporter == null) {
throw new ConfigurationException("exporter required for batch span processor");
}
BatchSpanProcessorBuilder builder = BatchSpanProcessor.builder(spanExporter);
if (batchModel.getExportTimeout() != null) {
builder.setExporterTimeout(Duration.ofMillis(batchModel.getExportTimeout()));
@ -70,12 +62,11 @@ final class SpanProcessorFactory
io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleSpanProcessor
simpleModel = model.getSimple();
if (simpleModel != null) {
SpanExporter exporterModel = simpleModel.getExporter();
SpanExporter exporterModel =
FileConfigUtil.requireNonNull(
simpleModel.getExporter(), "simple span processor exporter");
io.opentelemetry.sdk.trace.export.SpanExporter spanExporter =
SpanExporterFactory.getInstance().create(exporterModel, spiHelper, closeables);
if (spanExporter == null) {
throw new ConfigurationException("exporter required for simple span processor");
}
return FileConfigUtil.addAndReturn(closeables, SimpleSpanProcessor.create(spanExporter));
}
@ -84,8 +75,8 @@ final class SpanProcessorFactory
throw new ConfigurationException(
"Unrecognized span processor(s): "
+ model.getAdditionalProperties().keySet().stream().collect(joining(",", "[", "]")));
} else {
throw new ConfigurationException("span processor must be set");
}
return SpanProcessor.composite();
}
}

View File

@ -19,7 +19,6 @@ import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
final class TextMapPropagatorFactory implements Factory<List<String>, TextMapPropagator> {
@ -33,8 +32,8 @@ final class TextMapPropagatorFactory implements Factory<List<String>, TextMapPro
@Override
public TextMapPropagator create(
@Nullable List<String> model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model == null || model.isEmpty()) {
List<String> model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model.isEmpty()) {
model = Arrays.asList("tracecontext", "baggage");
}

View File

@ -14,7 +14,6 @@ import io.opentelemetry.sdk.trace.SpanLimits;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.io.Closeable;
import java.util.List;
import javax.annotation.Nullable;
final class TracerProviderFactory
implements Factory<TracerProviderAndAttributeLimits, SdkTracerProviderBuilder> {
@ -29,13 +28,8 @@ final class TracerProviderFactory
@Override
public SdkTracerProviderBuilder create(
@Nullable TracerProviderAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
TracerProviderAndAttributeLimits model, SpiHelper spiHelper, List<Closeable> closeables) {
SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
if (model == null) {
return builder;
}
TracerProvider tracerProviderModel = model.getTracerProvider();
if (tracerProviderModel == null) {
return builder;
@ -50,10 +44,12 @@ final class TracerProviderFactory
closeables);
builder.setSpanLimits(spanLimits);
Sampler sampler =
SamplerFactory.getInstance()
.create(tracerProviderModel.getSampler(), spiHelper, closeables);
builder.setSampler(sampler);
if (tracerProviderModel.getSampler() != null) {
Sampler sampler =
SamplerFactory.getInstance()
.create(tracerProviderModel.getSampler(), spiHelper, closeables);
builder.setSampler(sampler);
}
List<SpanProcessor> processors = tracerProviderModel.getProcessors();
if (processors != null) {

View File

@ -6,14 +6,12 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Stream;
import io.opentelemetry.sdk.metrics.View;
import io.opentelemetry.sdk.metrics.ViewBuilder;
import java.io.Closeable;
import java.util.HashSet;
import java.util.List;
import javax.annotation.Nullable;
final class ViewFactory implements Factory<Stream, View> {
@ -26,11 +24,7 @@ final class ViewFactory implements Factory<Stream, View> {
}
@Override
public View create(@Nullable Stream model, SpiHelper spiHelper, List<Closeable> closeables) {
if (model == null) {
throw new ConfigurationException("stream must not be null");
}
public View create(Stream model, SpiHelper spiHelper, List<Closeable> closeables) {
ViewBuilder builder = View.builder();
if (model.getName() != null) {
builder.setName(model.getName());

View File

@ -17,24 +17,13 @@ import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LastVa
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Sum;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class AggregationFactoryTest {
@Test
void create_Null() {
assertThat(
AggregationFactory.getInstance()
.create(null, mock(SpiHelper.class), Collections.emptyList())
.toString())
.isEqualTo(io.opentelemetry.sdk.metrics.Aggregation.defaultAggregation().toString());
}
@ParameterizedTest
@MethodSource("createTestCases")
void create(Aggregation model, io.opentelemetry.sdk.metrics.Aggregation expectedResult) {

View File

@ -22,14 +22,6 @@ import org.junit.jupiter.params.provider.MethodSource;
class AttributesFactoryTest {
@Test
void create_Null() {
assertThat(
AttributesFactory.getInstance()
.create(null, mock(SpiHelper.class), Collections.emptyList()))
.isEqualTo(io.opentelemetry.api.common.Attributes.empty());
}
@ParameterizedTest
@MethodSource("invalidAttributes")
void create_InvalidAttributes(Attributes model, String expectedMessage) {

View File

@ -19,16 +19,6 @@ import org.junit.jupiter.api.Test;
class InstrumentSelectorFactoryTest {
@Test
void create_Null() {
assertThatThrownBy(
() ->
InstrumentSelectorFactory.getInstance()
.create(null, mock(SpiHelper.class), Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("selector must not be null");
}
@Test
void create_Defaults() {
assertThatThrownBy(

View File

@ -31,7 +31,6 @@ class LogLimitsFactoryTest {
private static Stream<Arguments> createArguments() {
return Stream.of(
Arguments.of(null, LogLimits.builder().build()),
Arguments.of(
LogRecordLimitsAndAttributeLimits.create(null, null), LogLimits.builder().build()),
Arguments.of(

View File

@ -56,12 +56,6 @@ class LogRecordExporterFactoryTest {
private SpiHelper spiHelper =
SpiHelper.create(LogRecordExporterFactoryTest.class.getClassLoader());
@Test
void create_Null() {
assertThat(LogRecordExporterFactory.getInstance().create(null, spiHelper, new ArrayList<>()))
.isNull();
}
@Test
void create_OtlpDefaults() {
spiHelper = spy(spiHelper);

View File

@ -33,19 +33,6 @@ class LogRecordProcessorFactoryTest {
private final SpiHelper spiHelper =
SpiHelper.create(LogRecordProcessorFactoryTest.class.getClassLoader());
@Test
void create_Null() {
List<Closeable> closeables = new ArrayList<>();
io.opentelemetry.sdk.logs.LogRecordProcessor processor =
LogRecordProcessorFactory.getInstance().create(null, spiHelper, Collections.emptyList());
cleanup.addCloseable(processor);
cleanup.addCloseables(closeables);
assertThat(processor.toString())
.isEqualTo(io.opentelemetry.sdk.logs.LogRecordProcessor.composite().toString());
}
@Test
void create_BatchNullExporter() {
assertThatThrownBy(
@ -56,7 +43,7 @@ class LogRecordProcessorFactoryTest {
spiHelper,
Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("exporter required for batch log record processor");
.hasMessage("batch log record processor exporter is required but is null");
}
@Test
@ -123,7 +110,7 @@ class LogRecordProcessorFactoryTest {
spiHelper,
Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("exporter required for simple log record processor");
.hasMessage("simple log record processor exporter is required but is null");
}
@Test

View File

@ -52,7 +52,6 @@ class LoggerProviderFactoryTest {
private static Stream<Arguments> createArguments() {
return Stream.of(
Arguments.of(null, SdkLoggerProvider.builder().build()),
Arguments.of(
LoggerProviderAndAttributeLimits.create(null, null),
SdkLoggerProvider.builder().build()),

View File

@ -34,20 +34,6 @@ class MeterProviderFactoryTest {
private final SpiHelper spiHelper =
SpiHelper.create(MeterProviderFactoryTest.class.getClassLoader());
@Test
void create_Null() {
List<Closeable> closeables = new ArrayList<>();
SdkMeterProvider expectedProvider = SdkMeterProvider.builder().build();
cleanup.addCloseable(expectedProvider);
SdkMeterProvider provider =
MeterProviderFactory.getInstance().create(null, spiHelper, closeables).build();
cleanup.addCloseable(provider);
cleanup.addCloseables(closeables);
assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
}
@Test
void create_Defaults() {
List<Closeable> closeables = new ArrayList<>();

View File

@ -63,12 +63,6 @@ class MetricExporterFactoryTest {
private SpiHelper spiHelper = SpiHelper.create(MetricExporterFactoryTest.class.getClassLoader());
@Test
void create_Null() {
assertThat(MetricExporterFactory.getInstance().create(null, spiHelper, new ArrayList<>()))
.isNull();
}
@Test
void create_OtlpDefaults() {
spiHelper = spy(spiHelper);

View File

@ -43,12 +43,6 @@ class MetricReaderFactoryTest {
private SpiHelper spiHelper = SpiHelper.create(MetricReaderFactoryTest.class.getClassLoader());
@Test
void create_Null() {
assertThat(MetricReaderFactory.getInstance().create(null, spiHelper, Collections.emptyList()))
.isNull();
}
@Test
void create_PeriodicNullExporter() {
assertThatThrownBy(
@ -59,7 +53,7 @@ class MetricReaderFactoryTest {
spiHelper,
Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("exporter required for periodic reader");
.hasMessage("periodic metric reader exporter is required but is null");
}
@Test
@ -181,7 +175,7 @@ class MetricReaderFactoryTest {
spiHelper,
Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("exporter required for pull reader");
.hasMessage("pull metric reader exporter is required but is null");
assertThatThrownBy(
() ->

View File

@ -69,20 +69,6 @@ class OpenTelemetryConfigurationFactoryTest {
private final SpiHelper spiHelper =
SpiHelper.create(OpenTelemetryConfigurationFactoryTest.class.getClassLoader());
@Test
void create_Null() {
List<Closeable> closeables = new ArrayList<>();
OpenTelemetrySdk expectedSdk = OpenTelemetrySdk.builder().build();
cleanup.addCloseable(expectedSdk);
OpenTelemetrySdk sdk =
OpenTelemetryConfigurationFactory.getInstance().create(null, spiHelper, closeables);
cleanup.addCloseable(sdk);
cleanup.addCloseables(closeables);
assertThat(sdk.toString()).isEqualTo(expectedSdk.toString());
}
@Test
void create_InvalidFileFormat() {
List<OpenTelemetryConfiguration> testCases =
@ -104,14 +90,7 @@ class OpenTelemetryConfigurationFactoryTest {
@Test
void create_Defaults() {
List<Closeable> closeables = new ArrayList<>();
OpenTelemetrySdk expectedSdk =
OpenTelemetrySdk.builder()
.setPropagators(
ContextPropagators.create(
TextMapPropagator.composite(
W3CTraceContextPropagator.getInstance(),
W3CBaggagePropagator.getInstance())))
.build();
OpenTelemetrySdk expectedSdk = OpenTelemetrySdk.builder().build();
cleanup.addCloseable(expectedSdk);
OpenTelemetrySdk sdk =

View File

@ -39,11 +39,6 @@ class PropagatorFactoryTest {
private static Stream<Arguments> createArguments() {
return Stream.of(
Arguments.of(
null,
ContextPropagators.create(
TextMapPropagator.composite(
W3CTraceContextPropagator.getInstance(), W3CBaggagePropagator.getInstance()))),
Arguments.of(
new Propagator()
.withComposite(

View File

@ -16,14 +16,6 @@ import org.junit.jupiter.api.Test;
class ResourceFactoryTest {
@Test
void create_Null() {
assertThat(
ResourceFactory.getInstance()
.create(null, mock(SpiHelper.class), Collections.emptyList()))
.isEqualTo(Resource.getDefault());
}
@Test
void create() {
assertThat(

View File

@ -60,10 +60,6 @@ class SamplerFactoryTest {
private static Stream<Arguments> createArguments() {
return Stream.of(
Arguments.of(
null,
io.opentelemetry.sdk.trace.samplers.Sampler.parentBased(
io.opentelemetry.sdk.trace.samplers.Sampler.alwaysOn())),
Arguments.of(
new Sampler().withAlwaysOn(new AlwaysOn()),
io.opentelemetry.sdk.trace.samplers.Sampler.alwaysOn()),

View File

@ -59,12 +59,6 @@ class SpanExporterFactoryTest {
private SpiHelper spiHelper = SpiHelper.create(SpanExporterFactoryTest.class.getClassLoader());
@Test
void create_Null() {
assertThat(SpanExporterFactory.getInstance().create(null, spiHelper, new ArrayList<>()))
.isNull();
}
@Test
void create_OtlpDefaults() {
spiHelper = spy(spiHelper);

View File

@ -32,7 +32,6 @@ class SpanLimitsFactoryTest {
private static Stream<Arguments> createArguments() {
return Stream.of(
Arguments.of(null, io.opentelemetry.sdk.trace.SpanLimits.getDefault()),
Arguments.of(
SpanLimitsAndAttributeLimits.create(null, null),
io.opentelemetry.sdk.trace.SpanLimits.getDefault()),

View File

@ -33,19 +33,6 @@ class SpanProcessorFactoryTest {
private final SpiHelper spiHelper =
SpiHelper.create(SpanProcessorFactoryTest.class.getClassLoader());
@Test
void create_Null() {
List<Closeable> closeables = new ArrayList<>();
io.opentelemetry.sdk.trace.SpanProcessor processor =
SpanProcessorFactory.getInstance().create(null, spiHelper, Collections.emptyList());
cleanup.addCloseable(processor);
cleanup.addCloseables(closeables);
assertThat(processor.toString())
.isEqualTo(io.opentelemetry.sdk.trace.SpanProcessor.composite().toString());
}
@Test
void create_BatchNullExporter() {
assertThatThrownBy(
@ -56,7 +43,7 @@ class SpanProcessorFactoryTest {
spiHelper,
Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("exporter required for batch span processor");
.hasMessage("batch span processor exporter is required but is null");
}
@Test
@ -123,7 +110,7 @@ class SpanProcessorFactoryTest {
spiHelper,
Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("exporter required for simple span processor");
.hasMessage("simple span processor exporter is required but is null");
}
@Test

View File

@ -41,10 +41,6 @@ class TextMapPropagatorFactoryTest {
private static Stream<Arguments> createArguments() {
return Stream.of(
Arguments.of(
null,
TextMapPropagator.composite(
W3CTraceContextPropagator.getInstance(), W3CBaggagePropagator.getInstance())),
Arguments.of(
Collections.emptyList(),
TextMapPropagator.composite(

View File

@ -54,7 +54,6 @@ class TracerProviderFactoryTest {
private static Stream<Arguments> createArguments() {
return Stream.of(
Arguments.of(null, SdkTracerProvider.builder().build()),
Arguments.of(
TracerProviderAndAttributeLimits.create(null, null),
SdkTracerProvider.builder().build()),

View File

@ -6,11 +6,9 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Aggregation;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExplicitBucketHistogram;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Stream;
@ -22,16 +20,6 @@ import org.junit.jupiter.api.Test;
class ViewFactoryTest {
@Test
void create_Null() {
assertThatThrownBy(
() ->
ViewFactory.getInstance()
.create(null, mock(SpiHelper.class), Collections.emptyList()))
.isInstanceOf(ConfigurationException.class)
.hasMessage("stream must not be null");
}
@Test
void create_Defaults() {
View expectedView = View.builder().build();