Skip to content

Commit 6cea070

Browse files
committed
Demonstrate strangeness
1 parent 0f383c2 commit 6cea070

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessorTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@
1010
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1111
import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode;
1212
import static org.awaitility.Awaitility.await;
13+
import static org.mockito.ArgumentMatchers.any;
1314
import static org.mockito.ArgumentMatchers.anyList;
1415
import static org.mockito.ArgumentMatchers.argThat;
1516
import static org.mockito.Mockito.doThrow;
1617
import static org.mockito.Mockito.reset;
18+
import static org.mockito.Mockito.times;
19+
import static org.mockito.Mockito.verify;
1720
import static org.mockito.Mockito.when;
1821

1922
import io.opentelemetry.api.internal.GuardedBy;
2023
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
2124
import io.opentelemetry.sdk.common.CompletableResultCode;
2225
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
2326
import io.opentelemetry.sdk.logs.data.LogRecordData;
27+
import java.time.Duration;
2428
import java.util.ArrayList;
2529
import java.util.Arrays;
2630
import java.util.Collection;
@@ -139,6 +143,32 @@ void builderAdjustMaxBatchSize() {
139143
.isEqualTo(BatchLogRecordProcessorBuilder.DEFAULT_MAX_EXPORT_BATCH_SIZE);
140144
}
141145

146+
@Test
147+
void maxExportBatchSizeExceedsQueueSize() throws InterruptedException {
148+
// Given a processor configured with a maxExportBatchSize > maxQueueSize, ensure that after n =
149+
// maxQueueSize logs are emitted, export is triggered and that the queue is fully drained and
150+
// exported.
151+
int maxQueueSize = 2048;
152+
when(mockLogRecordExporter.export(any())).thenReturn(CompletableResultCode.ofSuccess());
153+
SdkLoggerProvider sdkLoggerProvider =
154+
SdkLoggerProvider.builder()
155+
.addLogRecordProcessor(
156+
BatchLogRecordProcessor.builder(mockLogRecordExporter)
157+
.setScheduleDelay(Duration.ofSeconds(Integer.MAX_VALUE))
158+
.setMaxExportBatchSize(2049)
159+
.setMaxQueueSize(maxQueueSize)
160+
.build())
161+
.build();
162+
163+
for (int i = 0; i < maxQueueSize; i++) {
164+
emitLog(sdkLoggerProvider, "log " + i);
165+
}
166+
167+
Thread.sleep(10);
168+
169+
verify(mockLogRecordExporter, times(1)).export(any());
170+
}
171+
142172
@Test
143173
void emitMultipleLogs() {
144174
WaitingLogRecordExporter waitingLogRecordExporter =

sdk/trace/src/test/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import static org.mockito.ArgumentMatchers.argThat;
1515
import static org.mockito.Mockito.doThrow;
1616
import static org.mockito.Mockito.reset;
17+
import static org.mockito.Mockito.times;
18+
import static org.mockito.Mockito.verify;
1719
import static org.mockito.Mockito.when;
1820

1921
import io.opentelemetry.api.internal.GuardedBy;
@@ -26,6 +28,7 @@
2628
import io.opentelemetry.sdk.trace.data.SpanData;
2729
import io.opentelemetry.sdk.trace.samplers.Sampler;
2830
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
31+
import java.time.Duration;
2932
import java.util.ArrayList;
3033
import java.util.Arrays;
3134
import java.util.Collection;
@@ -144,6 +147,32 @@ void builderAdjustMaxBatchSize() {
144147
.isEqualTo(BatchSpanProcessorBuilder.DEFAULT_MAX_EXPORT_BATCH_SIZE);
145148
}
146149

150+
@Test
151+
void maxExportBatchSizeExceedsQueueSize() throws InterruptedException {
152+
// Given a processor configured with a maxExportBatchSize > maxQueueSize, ensure that after n =
153+
// maxQueueSize spans are ended, export is triggered and that the queue is fully drained and
154+
// exported.
155+
int maxQueueSize = 2048;
156+
when(mockSpanExporter.export(any())).thenReturn(CompletableResultCode.ofSuccess());
157+
sdkTracerProvider =
158+
SdkTracerProvider.builder()
159+
.addSpanProcessor(
160+
BatchSpanProcessor.builder(mockSpanExporter)
161+
.setScheduleDelay(Duration.ofSeconds(Integer.MAX_VALUE))
162+
.setMaxExportBatchSize(2049)
163+
.setMaxQueueSize(maxQueueSize)
164+
.build())
165+
.build();
166+
167+
for (int i = 0; i < maxQueueSize; i++) {
168+
createEndedSpan("span " + i);
169+
}
170+
171+
Thread.sleep(10);
172+
173+
verify(mockSpanExporter, times(1)).export(any());
174+
}
175+
147176
@Test
148177
void startEndRequirements() {
149178
BatchSpanProcessor spansProcessor =

0 commit comments

Comments
 (0)