fix: preflight required kafka sink
This commit is contained in:
@@ -67,10 +67,19 @@ public final class DisruptorEventBus implements AutoCloseable {
|
||||
public CompletableFuture<Void> publishAndAwait(VehicleEvent event, String requiredSinkName) {
|
||||
String requiredSink = Objects.requireNonNull(requiredSinkName, "requiredSinkName");
|
||||
published.incrementAndGet();
|
||||
List<CompletableFuture<Void>> requiredFutures = new ArrayList<>();
|
||||
for (EventSink sink : sinks) {
|
||||
if (!sink.accepts(event)) continue;
|
||||
List<EventSink> acceptingSinks = sinks.stream()
|
||||
.filter(sink -> sink.accepts(event))
|
||||
.toList();
|
||||
List<EventSink> requiredSinks = acceptingSinks.stream()
|
||||
.filter(sink -> requiredSink.equals(sink.name()))
|
||||
.toList();
|
||||
if (requiredSinks.isEmpty()) {
|
||||
return CompletableFuture.failedFuture(new IllegalStateException(
|
||||
"required sink '" + requiredSink + "' did not accept event " + event.eventId()));
|
||||
}
|
||||
|
||||
List<CompletableFuture<Void>> requiredFutures = new ArrayList<>();
|
||||
for (EventSink sink : acceptingSinks) {
|
||||
CompletableFuture<Void> future = CompletableFuture
|
||||
.supplyAsync(() -> publishToSinkAndTrack(sink, event), awaitExecutor)
|
||||
.thenCompose(f -> f);
|
||||
@@ -78,10 +87,6 @@ public final class DisruptorEventBus implements AutoCloseable {
|
||||
requiredFutures.add(future);
|
||||
}
|
||||
}
|
||||
if (requiredFutures.isEmpty()) {
|
||||
return CompletableFuture.failedFuture(new IllegalStateException(
|
||||
"required sink '" + requiredSink + "' did not accept event " + event.eventId()));
|
||||
}
|
||||
return CompletableFuture.allOf(requiredFutures.toArray(CompletableFuture[]::new));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user