Skip to content

Commit

Permalink
ISPN-5963 Avoid allocating CompletableFuture instances for empty maps
Browse files Browse the repository at this point in the history
  • Loading branch information
Sanne authored and tristantarrant committed Nov 23, 2015
1 parent 233af68 commit 8e58677
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
Expand Up @@ -128,7 +128,7 @@ public CompletableFuture<Map<Address, Response>> 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");
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -560,7 +561,7 @@ public CompletableFuture<Map<Address, Response>> invokeRemotelyAsync(Collection<
if (singleRecipient) singleJGAddress = toJGroupsAddress(others.get(0));
}
if (skipRpc) {
return CompletableFuture.completedFuture(InfinispanCollections.emptyMap());
return CompletableFutures.returnEmptyMap();
}

if (singleRecipient) {
Expand All @@ -573,12 +574,12 @@ public CompletableFuture<Map<Address, Response>> 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) {
Expand Down
@@ -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;
Expand All @@ -8,13 +9,22 @@

import static java.util.Objects.requireNonNull;

import java.util.Map;

/**
* Utility methods connecting {@link CompletableFuture} futures and our {@link NotifyingNotifiableFuture} futures.
*
* @author Dan Berindei
* @since 8.0
*/
public class CompletableFutures {

private static final CompletableFuture completedEmptyMapFuture = CompletableFuture.completedFuture(InfinispanCollections.emptyMap());

public static <K,V> CompletableFuture<Map<K, V>> returnEmptyMap() {
return (CompletableFuture<Map<K, V>>) completedEmptyMapFuture;
}

public static <T> void connect(NotifyingNotifiableFuture<T> sink, CompletableFuture<T> source) {
CompletableFuture<T> compoundSource = source.whenComplete((value, throwable) -> {
if (throwable == null) {
Expand Down

0 comments on commit 8e58677

Please sign in to comment.