This is an automated email from the ASF dual-hosted git repository. ibessonov pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new 2706b6719e IGNITE-21198 Optimize memory usage in AbstractEventProducer#fireEvent (#3008) 2706b6719e is described below commit 2706b6719e1212af3516c4cbe047791b5ef08e72 Author: Ivan Bessonov <bessonov...@gmail.com> AuthorDate: Thu Jan 4 12:18:15 2024 +0300 IGNITE-21198 Optimize memory usage in AbstractEventProducer#fireEvent (#3008) --- .../internal/event/AbstractEventProducer.java | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/event/AbstractEventProducer.java b/modules/core/src/main/java/org/apache/ignite/internal/event/AbstractEventProducer.java index 155a7692dc..4a722e5dca 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/event/AbstractEventProducer.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/event/AbstractEventProducer.java @@ -81,20 +81,32 @@ public abstract class AbstractEventProducer<T extends Event, P extends EventPara return nullCompletedFuture(); } - CompletableFuture<?>[] futures = new CompletableFuture[listeners.size()]; + // Lazy init. + List<CompletableFuture<?>> futures = null; for (int i = 0; i < listeners.size(); i++) { EventListener<P> listener = listeners.get(i); - futures[i] = listener.notify(params, err) - .thenAccept(remove -> { - if (remove) { - removeListener(evt, listener); - } - }); + CompletableFuture<Boolean> future = listener.notify(params, err); + + if (future.isDone() && !future.isCompletedExceptionally()) { + if (future.join()) { + removeListener(evt, listener); + } + } else { + if (futures == null) { + futures = new ArrayList<>(); + } + + futures.add(future.thenAccept(remove -> { + if (remove) { + removeListener(evt, listener); + } + })); + } } - return allOf(futures); + return futures == null ? nullCompletedFuture() : allOf(futures.toArray(CompletableFuture[]::new)); } /**