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;