You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tk...@apache.org on 2024/05/17 06:33:22 UTC

(ignite-3) branch main updated: IGNITE-22257 Move IgniteUtils#copyStateTo to CompletableFutures (#3781)

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

tkalkirill 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 4a5a498502 IGNITE-22257 Move IgniteUtils#copyStateTo to CompletableFutures (#3781)
4a5a498502 is described below

commit 4a5a498502f75713db4b53ffa6d983880f711c42
Author: Kirill Tkalenko <tk...@yandex.ru>
AuthorDate: Fri May 17 09:33:17 2024 +0300

    IGNITE-22257 Move IgniteUtils#copyStateTo to CompletableFutures (#3781)
---
 .../internal/causality/BaseVersionedValue.java     |  2 +-
 .../ignite/internal/future/OrderingFuture.java     |  2 +-
 .../internal/streamer/StreamerSubscriber.java      |  2 +-
 .../ignite/internal/util/CompletableFutures.java   | 19 ++++++++++++++++
 .../apache/ignite/internal/util/IgniteUtils.java   | 19 ----------------
 .../internal/util/CompletableFuturesTest.java      | 25 ++++++++++++++++++++++
 .../ignite/internal/util/IgniteUtilsTest.java      |  2 +-
 .../disaster/DisasterRecoveryManager.java          |  2 +-
 8 files changed, 49 insertions(+), 24 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/causality/BaseVersionedValue.java b/modules/core/src/main/java/org/apache/ignite/internal/causality/BaseVersionedValue.java
index c87cf059bd..5ee07f1ff6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/causality/BaseVersionedValue.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/causality/BaseVersionedValue.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.causality;
 
 import static java.util.concurrent.CompletableFuture.completedFuture;
 import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
-import static org.apache.ignite.internal.util.IgniteUtils.copyStateTo;
+import static org.apache.ignite.internal.util.CompletableFutures.copyStateTo;
 
 import java.util.ArrayList;
 import java.util.Iterator;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/future/OrderingFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/future/OrderingFuture.java
index b61e51d3c5..956ba7ba0a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/future/OrderingFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/future/OrderingFuture.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.internal.future;
 
-import static org.apache.ignite.internal.util.IgniteUtils.copyStateTo;
+import static org.apache.ignite.internal.util.CompletableFutures.copyStateTo;
 
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.VarHandle;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/streamer/StreamerSubscriber.java b/modules/core/src/main/java/org/apache/ignite/internal/streamer/StreamerSubscriber.java
index 6072f27f4d..101c58e45b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/streamer/StreamerSubscriber.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/streamer/StreamerSubscriber.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.internal.streamer;
 
-import static org.apache.ignite.internal.util.IgniteUtils.copyStateTo;
+import static org.apache.ignite.internal.util.CompletableFutures.copyStateTo;
 
 import java.util.BitSet;
 import java.util.Collection;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/CompletableFutures.java b/modules/core/src/main/java/org/apache/ignite/internal/util/CompletableFutures.java
index 3bcbcca176..f02fff4ca7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/CompletableFutures.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/CompletableFutures.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
+import java.util.function.BiConsumer;
 import org.jetbrains.annotations.Nullable;
 
 /** Helper class for working with {@link CompletableFuture}. */
@@ -132,4 +133,22 @@ public class CompletableFutures {
             return completedFuture(result);
         }
     }
+
+    /**
+     * Creates a consumer that, when passed to a {@link CompletableFuture#whenComplete} call, will copy the outcome (either successful or
+     * not) of the target future to the given future.
+     *
+     * @param future Future to copy the outcome to.
+     * @param <T> Future result type.
+     * @return Consumer for transferring a future outcome to another future.
+     */
+    public static <T> BiConsumer<T, Throwable> copyStateTo(CompletableFuture<? super T> future) {
+        return (v, e) -> {
+            if (e != null) {
+                future.completeExceptionally(e);
+            } else {
+                future.complete(v);
+            }
+        };
+    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 5286ee2a76..536f38d2b6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -59,7 +59,6 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.IntSupplier;
@@ -1256,22 +1255,4 @@ public class IgniteUtils {
     public static CompletableFuture<Void> stopAsync(Collection<? extends IgniteComponent> components) {
         return stopAsync(components.stream());
     }
-
-    /**
-     * Creates a consumer that, when passed to a {@link CompletableFuture#whenComplete} call, will copy the outcome (either successful or
-     * not) of the target future to the given future.
-     *
-     * @param future Future to copy the outcome to.
-     * @param <T> Future result type.
-     * @return Consumer for transferring a future outcome to another future.
-     */
-    public static <T> BiConsumer<T, Throwable> copyStateTo(CompletableFuture<? super T> future) {
-        return (v, e) -> {
-            if (e != null) {
-                future.completeExceptionally(e);
-            } else {
-                future.complete(v);
-            }
-        };
-    }
 }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/CompletableFuturesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/CompletableFuturesTest.java
index 0d9dfb50ad..f311b3ad93 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/util/CompletableFuturesTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/util/CompletableFuturesTest.java
@@ -25,6 +25,7 @@ import static org.apache.ignite.internal.testframework.matchers.CompletableFutur
 import static org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willBe;
 import static org.apache.ignite.internal.util.CompletableFutures.booleanCompletedFuture;
 import static org.apache.ignite.internal.util.CompletableFutures.completedOrFailedFuture;
+import static org.apache.ignite.internal.util.CompletableFutures.copyStateTo;
 import static org.apache.ignite.internal.util.CompletableFutures.emptyCollectionCompletedFuture;
 import static org.apache.ignite.internal.util.CompletableFutures.emptyListCompletedFuture;
 import static org.apache.ignite.internal.util.CompletableFutures.emptyMapCompletedFuture;
@@ -165,4 +166,28 @@ public class CompletableFuturesTest {
 
         assertThat(caught, is(ex));
     }
+
+    @Test
+    void testCopyStateToWithException() {
+        var future0 = new CompletableFuture<String>();
+        var future1 = new CompletableFuture<String>();
+
+        var exception = new Exception("test");
+
+        future0.whenComplete(copyStateTo(future1));
+        future0.completeExceptionally(exception);
+
+        assertThat(future1, willThrow(exception.getClass(), "test"));
+    }
+
+    @Test
+    void testCopyStateTo() {
+        var future0 = new CompletableFuture<String>();
+        var future1 = new CompletableFuture<String>();
+
+        future0.whenComplete(copyStateTo(future1));
+        future0.complete("test");
+
+        assertThat(future1, willBe("test"));
+    }
 }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteUtilsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteUtilsTest.java
index 88c17299d9..0aa8037871 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteUtilsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/util/IgniteUtilsTest.java
@@ -22,11 +22,11 @@ import static java.util.concurrent.CompletableFuture.failedFuture;
 import static org.apache.ignite.internal.testframework.IgniteTestUtils.runAsync;
 import static org.apache.ignite.internal.testframework.matchers.CompletableFutureExceptionMatcher.willThrow;
 import static org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willBe;
+import static org.apache.ignite.internal.util.CompletableFutures.copyStateTo;
 import static org.apache.ignite.internal.util.CompletableFutures.nullCompletedFuture;
 import static org.apache.ignite.internal.util.CompletableFutures.trueCompletedFuture;
 import static org.apache.ignite.internal.util.IgniteUtils.awaitForWorkersStop;
 import static org.apache.ignite.internal.util.IgniteUtils.byteBufferToByteArray;
-import static org.apache.ignite.internal.util.IgniteUtils.copyStateTo;
 import static org.apache.ignite.internal.util.IgniteUtils.getUninterruptibly;
 import static org.apache.ignite.internal.util.IgniteUtils.isPow2;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/disaster/DisasterRecoveryManager.java b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/disaster/DisasterRecoveryManager.java
index 61e11429f3..6b2cbb8004 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/disaster/DisasterRecoveryManager.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/disaster/DisasterRecoveryManager.java
@@ -34,8 +34,8 @@ import static org.apache.ignite.internal.table.distributed.disaster.LocalPartiti
 import static org.apache.ignite.internal.table.distributed.disaster.LocalPartitionStateEnum.HEALTHY;
 import static org.apache.ignite.internal.table.distributed.disaster.LocalPartitionStateEnum.INITIALIZING;
 import static org.apache.ignite.internal.table.distributed.disaster.LocalPartitionStateEnum.INSTALLING_SNAPSHOT;
+import static org.apache.ignite.internal.util.CompletableFutures.copyStateTo;
 import static org.apache.ignite.internal.util.CompletableFutures.nullCompletedFuture;
-import static org.apache.ignite.internal.util.IgniteUtils.copyStateTo;
 import static org.apache.ignite.lang.ErrorGroups.DisasterRecovery.PARTITION_STATE_ERR;
 
 import java.util.ArrayList;