All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.client.hotrod.impl.operations.HotRodBulkOperation Maven / Gradle / Ivy

There is a newer version: 9.3.1.Final
Show newest version
package org.infinispan.client.hotrod.impl.operations;

import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.CompletionStage;
import java.util.function.BiFunction;
import java.util.function.Function;

import org.infinispan.client.hotrod.DataFormat;
import org.infinispan.commons.util.concurrent.AggregateCompletionStage;
import org.infinispan.commons.util.concurrent.CompletionStages;

/**
 * An HotRod operation that span across multiple remote nodes concurrently (like getAll / putAll).
 *
 * @author Guillaume Darmont / [email protected]
 */
public abstract class HotRodBulkOperation> {
   protected final DataFormat dataFormat;
   protected final Function opFunction;

   public HotRodBulkOperation(DataFormat dataFormat, Function opFunction) {
      this.dataFormat = dataFormat;
      this.opFunction = opFunction;
   }

   public final CompletionStage executeOperations(Function routingFunction,
                                                        BiFunction> invoker) {
      Collection results = Collections.synchronizedList(new ArrayList<>());
      AggregateCompletionStage> acs = CompletionStages.aggregateCompletionStage(results);

      Map map = gatherOperations(routingFunction);

      map.forEach((addr, op) -> acs.dependsOn(invoker.apply(op, addr)
            .thenAccept(results::add)));

      return reduce(acs.freeze());
   }

   protected SocketAddress getAddressForKey(Object key, byte[] keyBytes, Function routingFunction) {
      return routingFunction.apply(dataFormat.isObjectStorage() ? key : keyBytes);
   }

   protected abstract Map gatherOperations(Function routingFunction);

   public abstract CompletionStage reduce(CompletionStage> stage);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy