This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git


The following commit(s) were added to refs/heads/master by this push:
     new 8744f06e7 [SSHD-1338] Restore binary compatibility with 2.9.2
8744f06e7 is described below

commit 8744f06e7c3ff24bc98535a91f6052ff7cf2f8d3
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Tue Jan 23 11:55:24 2024 +0100

    [SSHD-1338] Restore binary compatibility with 2.9.2
---
 .../apache/sshd/common/future/CancelOption.java    |  2 +-
 .../sshd/common/future/VerifiableFuture.java       | 47 +++++++++++
 .../apache/sshd/common/future/WaitableFuture.java  | 91 ++++++++++++++++++++++
 3 files changed, 139 insertions(+), 1 deletion(-)

diff --git 
a/sshd-common/src/main/java/org/apache/sshd/common/future/CancelOption.java 
b/sshd-common/src/main/java/org/apache/sshd/common/future/CancelOption.java
index 05162d6ed..749b0384d 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/future/CancelOption.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/future/CancelOption.java
@@ -40,7 +40,7 @@ public enum CancelOption {
     /**
      * Indicates that even if waiting on a future times out or is interrupted, 
it shall not be canceled.
      * <p>
-     * {@link #CANCEL_ON_TIMEOUT} and {@link #CANCEL_ON_INTERRUPT} take 
predence over this flag. The main purpose of
+     * {@link #CANCEL_ON_TIMEOUT} and {@link #CANCEL_ON_INTERRUPT} take 
precedence over this flag. The main purpose of
      * this flag is to be able to call {@code verify(timeout, 
NO_CANCELLATION)} to suppress cancelling a future on
      * time-outs or interrupts altogether. By default, {@code verify(timeout)} 
will cancel the future on both time-outs
      * and interrupts.
diff --git 
a/sshd-common/src/main/java/org/apache/sshd/common/future/VerifiableFuture.java 
b/sshd-common/src/main/java/org/apache/sshd/common/future/VerifiableFuture.java
index d3f93a47e..e44aeff3a 100644
--- 
a/sshd-common/src/main/java/org/apache/sshd/common/future/VerifiableFuture.java
+++ 
b/sshd-common/src/main/java/org/apache/sshd/common/future/VerifiableFuture.java
@@ -32,6 +32,17 @@ import java.util.concurrent.TimeUnit;
  */
 @FunctionalInterface
 public interface VerifiableFuture<T> {
+    /**
+     * Wait {@link Long#MAX_VALUE} msec. and verify that the operation was 
successful
+     *
+     * @return             The (same) future instance
+     * @throws IOException If failed to verify successfully on time
+     * @see                #verify(long, CancelOption[])
+     */
+    default T verify() throws IOException {
+        return verify(Long.MAX_VALUE, new CancelOption[0]);
+    }
+
     /**
      * Wait {@link Long#MAX_VALUE} msec. and verify that the operation was 
successful
      *
@@ -45,6 +56,19 @@ public interface VerifiableFuture<T> {
         return verify(Long.MAX_VALUE, options);
     }
 
+    /**
+     * Wait and verify that the operation was successful
+     *
+     * @param  timeout     The number of time units to wait
+     * @param  unit        The wait {@link TimeUnit}
+     * @return             The (same) future instance
+     * @throws IOException If failed to verify successfully on time
+     * @see                #verify(long, CancelOption[])
+     */
+    default T verify(long timeout, TimeUnit unit) throws IOException {
+        return verify(timeout, unit, new CancelOption[0]);
+    }
+
     /**
      * Wait and verify that the operation was successful
      *
@@ -60,6 +84,18 @@ public interface VerifiableFuture<T> {
         return verify(unit.toMillis(timeout), options);
     }
 
+    /**
+     * Wait and verify that the operation was successful
+     *
+     * @param  timeout     The maximum duration to wait, <code>null</code> to 
wait forever
+     * @return             The (same) future instance
+     * @throws IOException If failed to verify successfully on time
+     * @see                #verify(long, CancelOption[])
+     */
+    default T verify(Duration timeout) throws IOException {
+        return verify(timeout, new CancelOption[0]);
+    }
+
     /**
      * Wait and verify that the operation was successful
      *
@@ -74,6 +110,17 @@ public interface VerifiableFuture<T> {
         return timeout != null ? verify(timeout.toMillis(), options) : 
verify(options);
     }
 
+    /**
+     * Wait and verify that the operation was successful
+     *
+     * @param  timeoutMillis Wait timeout in milliseconds
+     * @return               The (same) future instance
+     * @throws IOException   If failed to verify successfully on time
+     */
+    default T verify(long timeoutMillis) throws IOException {
+        return verify(timeoutMillis, new CancelOption[0]);
+    }
+
     /**
      * Wait and verify that the operation was successful
      *
diff --git 
a/sshd-common/src/main/java/org/apache/sshd/common/future/WaitableFuture.java 
b/sshd-common/src/main/java/org/apache/sshd/common/future/WaitableFuture.java
index 594c42b22..06398f463 100644
--- 
a/sshd-common/src/main/java/org/apache/sshd/common/future/WaitableFuture.java
+++ 
b/sshd-common/src/main/java/org/apache/sshd/common/future/WaitableFuture.java
@@ -36,6 +36,18 @@ public interface WaitableFuture {
      */
     Object getId();
 
+    /**
+     * Wait {@link Long#MAX_VALUE} msec. for the asynchronous operation to 
complete. The attached listeners will be
+     * notified when the operation is completed.
+     *
+     * @return             {@code true} if the operation is completed.
+     * @throws IOException if failed - specifically {@link 
java.io.InterruptedIOException} if waiting was interrupted
+     * @see                #await(long, CancelOption[])
+     */
+    default boolean await() throws IOException {
+        return await(new CancelOption[0]);
+    }
+
     /**
      * Wait {@link Long#MAX_VALUE} msec. for the asynchronous operation to 
complete. The attached listeners will be
      * notified when the operation is completed.
@@ -50,6 +62,19 @@ public interface WaitableFuture {
         return await(Long.MAX_VALUE, options);
     }
 
+    /**
+     * Wait for the asynchronous operation to complete with the specified 
timeout.
+     *
+     * @param  timeout     The number of time units to wait
+     * @param  unit        The {@link TimeUnit} for waiting
+     * @return             {@code true} if the operation is completed.
+     * @throws IOException if failed - specifically {@link 
java.io.InterruptedIOException} if waiting was interrupted
+     * @see                #await(long, CancelOption[])
+     */
+    default boolean await(long timeout, TimeUnit unit) throws IOException {
+        return await(timeout, unit, new CancelOption[0]);
+    }
+
     /**
      * Wait for the asynchronous operation to complete with the specified 
timeout.
      *
@@ -65,6 +90,18 @@ public interface WaitableFuture {
         return await(unit.toMillis(timeout), options);
     }
 
+    /**
+     * Wait for the asynchronous operation to complete with the specified 
timeout.
+     *
+     * @param  timeout     The maximum duration to wait, <code>null</code> to 
wait forever
+     * @return             {@code true} if the operation is completed.
+     * @throws IOException if failed - specifically {@link 
java.io.InterruptedIOException} if waiting was interrupted
+     * @see                #await(long, CancelOption[])
+     */
+    default boolean await(Duration timeout) throws IOException {
+        return await(timeout, new CancelOption[0]);
+    }
+
     /**
      * Wait for the asynchronous operation to complete with the specified 
timeout.
      *
@@ -79,6 +116,17 @@ public interface WaitableFuture {
         return timeout != null ? await(timeout.toMillis(), options) : 
await(options);
     }
 
+    /**
+     * Wait for the asynchronous operation to complete with the specified 
timeout.
+     *
+     * @param  timeoutMillis Wait time in milliseconds
+     * @return               {@code true} if the operation is completed.
+     * @throws IOException   if failed - specifically {@link 
java.io.InterruptedIOException} if waiting was interrupted
+     */
+    default boolean await(long timeoutMillis) throws IOException {
+        return await(timeoutMillis, new CancelOption[0]);
+    }
+
     /**
      * Wait for the asynchronous operation to complete with the specified 
timeout.
      *
@@ -90,6 +138,17 @@ public interface WaitableFuture {
      */
     boolean await(long timeoutMillis, CancelOption... options) throws 
IOException;
 
+    /**
+     * Wait {@link Long#MAX_VALUE} msec. for the asynchronous operation to 
complete uninterruptibly. The attached
+     * listeners will be notified when the operation is completed.
+     *
+     * @return {@code true} if the operation is completed.
+     * @see    #awaitUninterruptibly(long, CancelOption[])
+     */
+    default boolean awaitUninterruptibly() {
+        return awaitUninterruptibly(new CancelOption[0]);
+    }
+
     /**
      * Wait {@link Long#MAX_VALUE} msec. for the asynchronous operation to 
complete uninterruptibly. The attached
      * listeners will be notified when the operation is completed.
@@ -103,6 +162,18 @@ public interface WaitableFuture {
         return awaitUninterruptibly(Long.MAX_VALUE, options);
     }
 
+    /**
+     * Wait for the asynchronous operation to complete with the specified 
timeout uninterruptibly.
+     *
+     * @param  timeout The number of time units to wait
+     * @param  unit    The {@link TimeUnit} for waiting
+     * @return         {@code true} if the operation is completed.
+     * @see            #awaitUninterruptibly(long, CancelOption[])
+     */
+    default boolean awaitUninterruptibly(long timeout, TimeUnit unit) {
+        return awaitUninterruptibly(timeout, unit, new CancelOption[0]);
+    }
+
     /**
      * Wait for the asynchronous operation to complete with the specified 
timeout uninterruptibly.
      *
@@ -117,6 +188,16 @@ public interface WaitableFuture {
         return awaitUninterruptibly(unit.toMillis(timeout), options);
     }
 
+    /**
+     * Wait for the asynchronous operation to complete with the specified 
timeout uninterruptibly.
+     *
+     * @param  timeoutMillis Wait time, <code>null</code> to wait forever
+     * @return               {@code true} if the operation is finished.
+     */
+    default boolean awaitUninterruptibly(Duration timeoutMillis) {
+        return awaitUninterruptibly(timeoutMillis, new CancelOption[0]);
+    }
+
     /**
      * Wait for the asynchronous operation to complete with the specified 
timeout uninterruptibly.
      *
@@ -129,6 +210,16 @@ public interface WaitableFuture {
         return timeoutMillis != null ? 
awaitUninterruptibly(timeoutMillis.toMillis(), options) : 
awaitUninterruptibly(options);
     }
 
+    /**
+     * Wait for the asynchronous operation to complete with the specified 
timeout uninterruptibly.
+     *
+     * @param  timeoutMillis Wait time in milliseconds
+     * @return               {@code true} if the operation is finished.
+     */
+    default boolean awaitUninterruptibly(long timeoutMillis) {
+        return awaitUninterruptibly(timeoutMillis, new CancelOption[0]);
+    }
+
     /**
      * Wait for the asynchronous operation to complete with the specified 
timeout uninterruptibly.
      *

Reply via email to