Propagate flush to PeriodicMetricReader's metricExporter. (#7410)
This commit is contained in:
parent
b0a9deb7d8
commit
aeb08f40a0
|
@ -81,7 +81,21 @@ public final class PeriodicMetricReader implements MetricReader {
|
|||
|
||||
@Override
|
||||
public CompletableResultCode forceFlush() {
|
||||
return scheduled.doRun();
|
||||
CompletableResultCode result = new CompletableResultCode();
|
||||
CompletableResultCode doRunResult = scheduled.doRun();
|
||||
doRunResult.whenComplete(
|
||||
() -> {
|
||||
CompletableResultCode flushResult = exporter.flush();
|
||||
flushResult.whenComplete(
|
||||
() -> {
|
||||
if (doRunResult.isSuccess() && flushResult.isSuccess()) {
|
||||
result.succeed();
|
||||
} else {
|
||||
result.fail();
|
||||
}
|
||||
});
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -154,6 +154,35 @@ class PeriodicMetricReaderTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void forceflush_callsFlush() {
|
||||
MetricExporter metricExporter = mock(MetricExporter.class);
|
||||
when(metricExporter.export(any()))
|
||||
.thenReturn(CompletableResultCode.ofSuccess())
|
||||
.thenReturn(CompletableResultCode.ofSuccess())
|
||||
.thenThrow(new RuntimeException("Export Failed!"));
|
||||
when(metricExporter.flush())
|
||||
.thenReturn(CompletableResultCode.ofSuccess())
|
||||
.thenReturn(CompletableResultCode.ofFailure())
|
||||
.thenReturn(CompletableResultCode.ofSuccess());
|
||||
when(metricExporter.shutdown()).thenReturn(CompletableResultCode.ofSuccess());
|
||||
|
||||
PeriodicMetricReader reader =
|
||||
PeriodicMetricReader.builder(metricExporter)
|
||||
.setInterval(Duration.ofNanos(Long.MAX_VALUE))
|
||||
.build();
|
||||
|
||||
try {
|
||||
reader.register(collectionRegistration);
|
||||
assertThat(reader.forceFlush().join(10, TimeUnit.SECONDS).isSuccess()).isTrue();
|
||||
assertThat(reader.forceFlush().join(10, TimeUnit.SECONDS).isSuccess()).isFalse();
|
||||
assertThat(reader.forceFlush().join(10, TimeUnit.SECONDS).isSuccess()).isFalse();
|
||||
} finally {
|
||||
reader.shutdown();
|
||||
}
|
||||
verify(metricExporter, times(3)).flush();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Timeout(2)
|
||||
@SuppressLogger(PeriodicMetricReader.class)
|
||||
|
|
Loading…
Reference in New Issue