fix: preflight required kafka sink

This commit is contained in:
lingniu
2026-06-23 17:36:24 +08:00
parent a80b38bd04
commit f9aa214dc2
2 changed files with 32 additions and 7 deletions

View File

@@ -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));
}