Skip to content

Commit 8b7fa68

Browse files
committed
pass storage
1 parent d2ebf96 commit 8b7fa68

File tree

4 files changed

+56
-7
lines changed

4 files changed

+56
-7
lines changed

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/SpanToDiskExporter.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.opentelemetry.contrib.disk.buffering.config.StorageConfiguration;
99
import io.opentelemetry.contrib.disk.buffering.internal.exporter.ToDiskExporter;
1010
import io.opentelemetry.contrib.disk.buffering.internal.serialization.serializers.SignalSerializer;
11+
import io.opentelemetry.contrib.disk.buffering.internal.storage.Storage;
1112
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
1213
import io.opentelemetry.sdk.common.CompletableResultCode;
1314
import io.opentelemetry.sdk.trace.data.SpanData;
@@ -31,6 +32,7 @@ public class SpanToDiskExporter implements SpanExporter {
3132
* @return A new SpanToDiskExporter instance.
3233
* @throws IOException if the delegate ToDiskExporter could not be created.
3334
*/
35+
@Deprecated
3436
public static SpanToDiskExporter create(SpanExporter delegate, StorageConfiguration config)
3537
throws IOException {
3638
ToDiskExporter<SpanData> toDisk =
@@ -43,6 +45,24 @@ public static SpanToDiskExporter create(SpanExporter delegate, StorageConfigurat
4345
return new SpanToDiskExporter(toDisk);
4446
}
4547

48+
/**
49+
* Creates a new SpanToDiskExporter that will buffer Span telemetry on disk storage.
50+
*
51+
* @param delegate - The SpanExporter to delegate to if disk writing fails.
52+
* @return A new SpanToDiskExporter instance.
53+
* @throws IOException if the delegate ToDiskExporter could not be created.
54+
*/
55+
public static SpanToDiskExporter create(SpanExporter delegate,
56+
Storage storage)
57+
throws IOException {
58+
ToDiskExporter<SpanData> toDisk =
59+
ToDiskExporter.<SpanData>builder(storage)
60+
.setSerializer(SignalSerializer.ofSpans())
61+
.setExportFunction(delegate::export)
62+
.build();
63+
return new SpanToDiskExporter(toDisk);
64+
}
65+
4666
// Visible for testing
4767
SpanToDiskExporter(ToDiskExporter<SpanData> delegate) {
4868
this.delegate = delegate;

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/exporter/ToDiskExporter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@ public class ToDiskExporter<EXPORT_DATA> {
3333
this.logger = DebugLogger.wrap(Logger.getLogger(ToDiskExporter.class.getName()), debugEnabled);
3434
}
3535

36+
@Deprecated
3637
public static <T> ToDiskExporterBuilder<T> builder() {
3738
return new ToDiskExporterBuilder<>();
3839
}
3940

41+
public static <T> ToDiskExporterBuilder<T> builder(Storage storage) {
42+
return new ToDiskExporterBuilder<>(storage);
43+
}
44+
4045
public CompletableResultCode export(Collection<EXPORT_DATA> data) {
4146
logger.log("Intercepting exporter batch.", Level.FINER);
4247
try {

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/exporter/ToDiskExporterBuilder.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.opentelemetry.contrib.disk.buffering.internal.storage.StorageBuilder;
1313
import io.opentelemetry.sdk.common.Clock;
1414
import io.opentelemetry.sdk.common.CompletableResultCode;
15+
import javax.annotation.Nullable;
1516
import java.io.IOException;
1617
import java.util.Collection;
1718
import java.util.function.Function;
@@ -20,14 +21,26 @@ public final class ToDiskExporterBuilder<T> {
2021

2122
private SignalSerializer<T> serializer = ts -> new byte[0];
2223

24+
@Deprecated
2325
private final StorageBuilder storageBuilder = Storage.builder();
2426

27+
@Nullable
28+
private Storage storage = null;
29+
2530
private Function<Collection<T>, CompletableResultCode> exportFunction =
2631
x -> CompletableResultCode.ofFailure();
2732
private boolean debugEnabled = false;
2833

34+
@Deprecated
2935
ToDiskExporterBuilder() {}
3036

37+
ToDiskExporterBuilder(Storage storage) {
38+
if (storage == null) {
39+
throw new NullPointerException("Storage cannot be null");
40+
}
41+
this.storage = storage;
42+
}
43+
3144
@CanIgnoreReturnValue
3245
public ToDiskExporterBuilder<T> enableDebug() {
3346
return setDebugEnabled(true);
@@ -39,25 +52,34 @@ public ToDiskExporterBuilder<T> setDebugEnabled(boolean debugEnabled) {
3952
return this;
4053
}
4154

55+
@Deprecated
4256
@CanIgnoreReturnValue
4357
public ToDiskExporterBuilder<T> setFolderName(String folderName) {
4458
storageBuilder.setFolderName(folderName);
4559
return this;
4660
}
4761

62+
@Deprecated
4863
@CanIgnoreReturnValue
4964
public ToDiskExporterBuilder<T> setStorageConfiguration(StorageConfiguration configuration) {
5065
validateConfiguration(configuration);
5166
storageBuilder.setStorageConfiguration(configuration);
5267
return this;
5368
}
5469

70+
@Deprecated
5571
@CanIgnoreReturnValue
5672
public ToDiskExporterBuilder<T> setStorageClock(Clock clock) {
5773
storageBuilder.setStorageClock(clock);
5874
return this;
5975
}
6076

77+
@CanIgnoreReturnValue
78+
public ToDiskExporterBuilder<T> setStorage(Storage storage) {
79+
this.storage = storage;
80+
return this;
81+
}
82+
6183
@CanIgnoreReturnValue
6284
public ToDiskExporterBuilder<T> setSerializer(SignalSerializer<T> serializer) {
6385
this.serializer = serializer;
@@ -72,7 +94,7 @@ public ToDiskExporterBuilder<T> setExportFunction(
7294
}
7395

7496
public ToDiskExporter<T> build() throws IOException {
75-
Storage storage = storageBuilder.build();
97+
Storage storage = this.storage != null ? this.storage : storageBuilder.build();
7698
return new ToDiskExporter<>(serializer, exportFunction, storage, debugEnabled);
7799
}
78100

disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/IntegrationTest.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.opentelemetry.contrib.disk.buffering.internal.exporter.ToDiskExporter;
2323
import io.opentelemetry.contrib.disk.buffering.internal.serialization.deserializers.SignalDeserializer;
2424
import io.opentelemetry.contrib.disk.buffering.internal.serialization.serializers.SignalSerializer;
25+
import io.opentelemetry.contrib.disk.buffering.internal.storage.Storage;
2526
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
2627
import io.opentelemetry.sdk.common.Clock;
2728
import io.opentelemetry.sdk.common.CompletableResultCode;
@@ -66,12 +67,16 @@ public class IntegrationTest {
6667
@TempDir File rootDir;
6768
private static final long INITIAL_TIME_IN_MILLIS = 1000;
6869
private static final long NOW_NANOS = MILLISECONDS.toNanos(INITIAL_TIME_IN_MILLIS);
69-
private StorageConfiguration storageConfig;
70+
private Storage storage;
7071

7172
@BeforeEach
7273
void setUp() throws IOException {
73-
storageConfig = StorageConfiguration.getDefault(rootDir);
7474
clock = mock();
75+
storage = Storage.builder()
76+
.setFolderName(SignalTypes.spans.name())
77+
.setStorageConfiguration(StorageConfiguration.getDefault(rootDir))
78+
.setStorageClock(clock)
79+
.build();
7580

7681
when(clock.now()).thenReturn(NOW_NANOS);
7782

@@ -102,12 +107,9 @@ void setUp() throws IOException {
102107
private <T> ToDiskExporter<T> buildToDiskExporter(
103108
SignalSerializer<T> serializer, Function<Collection<T>, CompletableResultCode> exporter)
104109
throws IOException {
105-
return ToDiskExporter.<T>builder()
106-
.setFolderName(SignalTypes.spans.name())
107-
.setStorageConfiguration(storageConfig)
110+
return ToDiskExporter.<T>builder(storage)
108111
.setSerializer(serializer)
109112
.setExportFunction(exporter)
110-
.setStorageClock(clock)
111113
.build();
112114
}
113115

0 commit comments

Comments
 (0)