lianetm commented on code in PR #15640:
URL: https://github.com/apache/kafka/pull/15640#discussion_r1585466853
##########
clients/src/main/java/org/apache/kafka/clients/consumer/internals/events/CompletableEvent.java:
##########
@@ -16,9 +16,118 @@
*/
package org.apache.kafka.clients.consumer.internals.events;
+import org.apache.kafka.common.utils.Time;
+import org.apache.kafka.common.utils.Timer;
+
+import java.time.Duration;
+import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeoutException;
+
+import static java.util.Objects.requireNonNull;
+/**
+ * {@code CompletableEvent} is an interface that is used by both {@link
CompletableApplicationEvent} and
+ * {@link CompletableBackgroundEvent} for common processing and logic. A
{@code CompletableEvent} is one that
+ * allows the caller to get the {@link #future() future} related to the event
and the event's
+ * {@link #deadlineMs() expiration timestamp}.
+ *
+ * @param <T> Return type for the event when completed
+ */
public interface CompletableEvent<T> {
+ /**
+ * Returns the {@link CompletableFuture future} associated with this
event. Any event will have some related
+ * logic that is executed on its behalf. The event can complete in one of
the following ways:
+ *
+ * <ul>
+ * <li>
+ * Success: when the logic for the event completes successfully,
the data generated by that event
+ * (if applicable) is passed to {@link
CompletableFuture#complete(Object)}. In the case where the generic
+ * bound type is specified as {@link Void}, {@code null} is
provided.</li>
+ * <li>
+ * Error: when the the event logic generates an error, the error
is passed to
+ * {@link CompletableFuture#completeExceptionally(Throwable)}.
+ * </li>
+ * <li>
+ * Timeout: when the time spent executing the event logic exceeds
the {@link #deadlineMs() deadline}, an
+ * instance of {@link TimeoutException} should be created and
passed to
+ * {@link CompletableFuture#completeExceptionally(Throwable)}.
+ * </li>
+ * <li>
+ * Cancelled: when an event remains incomplete when the consumer
closes, the future will be
+ * {@link CompletableFuture#cancel(boolean) cancelled}. Attempts
to {@link Future#get() get the result}
Review Comment:
The reaper actually calls `completeExceptionally` with a
`CancellationException` instead of calling `CompletableFuture#cancel(boolean)`.
Unless I'm missing a subtle semantic diff they should achieve the same, but
still, adding a link to `cancel` here would not be accurate I would say.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]