diff --git a/core/src/main/java/org/infinispan/remoting/rpc/RpcManagerImpl.java b/core/src/main/java/org/infinispan/remoting/rpc/RpcManagerImpl.java index 587ad71d70a5..ad0605854ff4 100644 --- a/core/src/main/java/org/infinispan/remoting/rpc/RpcManagerImpl.java +++ b/core/src/main/java/org/infinispan/remoting/rpc/RpcManagerImpl.java @@ -128,7 +128,7 @@ public CompletableFuture> invokeRemotelyAsync(Collection< log.tracef("Using replication queue for command [%s]", rpc); } replicationQueue.add(rpc); - return CompletableFuture.completedFuture(InfinispanCollections.emptyMap()); + return CompletableFutures.returnEmptyMap(); } if (!configuration.clustering().cacheMode().isClustered()) throw new IllegalStateException("Trying to invoke a remote command but the cache is not clustered"); diff --git a/core/src/main/java/org/infinispan/remoting/transport/jgroups/JGroupsTransport.java b/core/src/main/java/org/infinispan/remoting/transport/jgroups/JGroupsTransport.java index c645fb8e4cb5..e2ed2af8a476 100644 --- a/core/src/main/java/org/infinispan/remoting/transport/jgroups/JGroupsTransport.java +++ b/core/src/main/java/org/infinispan/remoting/transport/jgroups/JGroupsTransport.java @@ -27,6 +27,7 @@ import org.infinispan.remoting.transport.AbstractTransport; import org.infinispan.remoting.transport.Address; import org.infinispan.remoting.transport.BackupResponse; +import org.infinispan.util.concurrent.CompletableFutures; import org.infinispan.util.TimeService; import org.infinispan.util.concurrent.TimeoutException; import org.infinispan.util.logging.Log; @@ -560,7 +561,7 @@ public CompletableFuture> invokeRemotelyAsync(Collection< if (singleRecipient) singleJGAddress = toJGroupsAddress(others.get(0)); } if (skipRpc) { - return CompletableFuture.completedFuture(InfinispanCollections.emptyMap()); + return CompletableFutures.returnEmptyMap(); } if (singleRecipient) { @@ -573,12 +574,12 @@ public CompletableFuture> invokeRemotelyAsync(Collection< } } else { - return CompletableFuture.completedFuture(InfinispanCollections.emptyMap()); + return CompletableFutures.returnEmptyMap(); } } if (mode.isAsynchronous()) { - return CompletableFuture.completedFuture(InfinispanCollections.emptyMap()); + return CompletableFutures.returnEmptyMap(); } if (singleResponseFuture != null) { diff --git a/core/src/main/java/org/infinispan/util/concurrent/CompletableFutures.java b/core/src/main/java/org/infinispan/util/concurrent/CompletableFutures.java index bfdb890cf376..152f4e77dedf 100644 --- a/core/src/main/java/org/infinispan/util/concurrent/CompletableFutures.java +++ b/core/src/main/java/org/infinispan/util/concurrent/CompletableFutures.java @@ -1,5 +1,6 @@ package org.infinispan.util.concurrent; +import org.infinispan.commons.util.InfinispanCollections; import org.infinispan.commons.util.concurrent.NotifyingNotifiableFuture; import java.util.concurrent.CompletableFuture; @@ -8,6 +9,8 @@ import static java.util.Objects.requireNonNull; +import java.util.Map; + /** * Utility methods connecting {@link CompletableFuture} futures and our {@link NotifyingNotifiableFuture} futures. * @@ -15,6 +18,13 @@ * @since 8.0 */ public class CompletableFutures { + + private static final CompletableFuture completedEmptyMapFuture = CompletableFuture.completedFuture(InfinispanCollections.emptyMap()); + + public static CompletableFuture> returnEmptyMap() { + return (CompletableFuture>) completedEmptyMapFuture; + } + public static void connect(NotifyingNotifiableFuture sink, CompletableFuture source) { CompletableFuture compoundSource = source.whenComplete((value, throwable) -> { if (throwable == null) {