[
https://issues.apache.org/jira/browse/FLINK-4361?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15506416#comment-15506416
]
ASF GitHub Bot commented on FLINK-4361:
---------------------------------------
Github user mxm commented on a diff in the pull request:
https://github.com/apache/flink/pull/2472#discussion_r79599026
--- Diff:
flink-runtime/src/main/java/org/apache/flink/runtime/concurrent/Future.java ---
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.runtime.concurrent;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Flink's basic future abstraction. A future represents an asynchronous
operation whose result
+ * will be contained in this instance upon completion.
+ *
+ * @param <T> type of the future's result
+ */
+public interface Future<T> {
+
+ /**
+ * Checks if the future has been completed. A future is completed, if
the result has been
+ * delivered.
+ *
+ * @return true if the future is completed; otherwise false
+ */
+ boolean isDone();
+
+ /**
+ * Tries to cancel the future's operation. Note that not all future
operations can be canceled.
+ * The result of the cancelling will be returned.
+ *
+ * @param mayInterruptIfRunning true iff the future operation may be
interrupted
+ * @return true if the cancelling was successful; otherwise false
+ */
+ boolean cancel(boolean mayInterruptIfRunning);
+
+ /**
+ * Gets the result value of the future. If the future has not been
completed, then this
+ * operation will block indefinitely until the result has been
delivered.
+ *
+ * @return the result value
+ * @throws CancellationException if the future has been cancelled
+ * @throws InterruptedException if the current thread was interrupted
while waiting for the result
+ * @throws ExecutionException if the future has been completed with an
exception
+ */
+ T get() throws InterruptedException, ExecutionException;
+
+ /**
+ * Gets the result value of the future. If the future has not been
done, then this operation
+ * will block the given timeout value. If the result has not been
delivered within the timeout,
+ * then the method throws an {@link TimeoutException}.
+ *
+ * @param timeout the time to wait for the future to be done
+ * @param unit time unit for the timeout argument
+ * @return the result value
+ * @throws CancellationException if the future has been cancelled
+ * @throws InterruptedException if the current thread was interrupted
while waiting for the result
+ * @throws ExecutionException if the future has been completed with an
exception
+ * @throws TimeoutException if the future has not been completed within
the given timeout
+ */
+ T get(long timeout, TimeUnit unit) throws InterruptedException,
ExecutionException, TimeoutException;
+
+ /**
+ * Gets the value of the future. If the future has not been completed
when calling this
+ * function, the given value is returned.
+ *
+ * @param valueIfAbsent value which is returned if the future has not
been completed
+ * @return value of the future or the given value if the future has not
been completed
+ * @throws ExecutionException if the future has been completed with an
exception
+ */
+ T getNow(T valueIfAbsent) throws ExecutionException;
+
+ /**
+ * Applies the given function to the value of the future. The result of
the apply function is
+ * the value of the newly returned future.
+ * <p>
+ * The apply function is executed asynchronously by the given executor.
+ *
+ * @param applyFunction function to apply to the future's value
+ * @param executor used to execute the given apply function
asynchronously
+ * @param <R> type of the apply function's return value
+ * @return future representing the return value of the given apply
function
+ */
+ <R> Future<R> thenApplyAsync(ApplyFunction<? super T, ? extends R>
applyFunction, Executor executor);
+
+ /**
+ * Applies the accept function to the value of the future. Unlike the
{@link ApplyFunction}, the
+ * {@link AcceptFunction} does not return a value. The returned future,
thus, represents only
+ * the completion of the accept callback.
+ * <p>
+ * The accept function is executed asynchronously by the given executor.
+ *
+ * @param acceptFunction function to apply to the future's value
+ * @param executor used to execute the given apply function
asynchronously
+ * @return future representing the completion of the accept callback
+ */
+ Future<Void> thenAcceptAsync(AcceptFunction<? super T> acceptFunction,
Executor executor);
+
+ /**
+ * Applies the given function to the value of the future if the future
has been completed
+ * exceptionally. The completing exception is given to the apply
function which can return a new
+ * value which is the value of the returned future.
+ * <p>
+ * The apply function is executed asynchronously by the given executor.
+ *
+ * @param exceptionallyFunction to apply to the future's value if it is
an exception
+ * @param executor used to execute the given apply function
asynchronously
+ * @param <R> type of the apply function's return value
+ * @return future representing the return value of the given apply
function
+ */
+ <R> Future<R> exceptionallyAsync(ApplyFunction<Throwable, ? extends R>
exceptionallyFunction, Executor executor);
+
+ /**
+ * Applies the given function to the value of the future. The apply
function can return a future
--- End diff --
> can return a future
should be
> must return a future
or
> returns a future
?
> Introduce Flink's own future abstraction
> ----------------------------------------
>
> Key: FLINK-4361
> URL: https://issues.apache.org/jira/browse/FLINK-4361
> Project: Flink
> Issue Type: Sub-task
> Components: Distributed Coordination
> Reporter: Stephan Ewen
> Assignee: Till Rohrmann
>
> In order to keep the abstraction Scala Independent, we should not rely on
> Scala Futures
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)