Class ClusterPublisherManagerImpl<K,​V>

  • All Implemented Interfaces:
    ClusterPublisherManager<K,​V>
    Direct Known Subclasses:
    PartitionAwareClusterPublisherManager

    public class ClusterPublisherManagerImpl<K,​V>
    extends Object
    implements ClusterPublisherManager<K,​V>
    ClusterPublisherManager that determines targets for the given segments and/or keys and then sends to local and remote nodes in parallel collecting results to be returned. This implement prioritizes running as much as possible on the local node, in some cases not even going remotely if all keys or segments are available locally.
    Since:
    10.0
    Author:
    wburns
    • Field Detail

      • log

        protected static final Log log
      • trace

        protected static final boolean trace
    • Constructor Detail

      • ClusterPublisherManagerImpl

        public ClusterPublisherManagerImpl()
    • Method Detail

      • start

        public void start()
      • entryReduction

        public <R> CompletionStage<R> entryReduction​(boolean parallelPublisher,
                                                     org.infinispan.commons.util.IntSet segments,
                                                     Set<K> keysToInclude,
                                                     InvocationContext ctx,
                                                     boolean includeLoader,
                                                     DeliveryGuarantee deliveryGuarantee,
                                                     Function<? super org.reactivestreams.Publisher<CacheEntry<K,​V>>,​? extends CompletionStage<R>> transformer,
                                                     Function<? super org.reactivestreams.Publisher<R>,​? extends CompletionStage<R>> finalizer)
        Description copied from interface: ClusterPublisherManager
        Performs the given transformer and finalizer on data in the cache, resulting in a single value. Depending on the deliveryGuarantee the transformer may be invoked 1..numSegments times. It could be that the transformer is invoked for every segment and produces a result. All of these results are then fed into the finalizer to produce a final result. If publisher is parallel the finalizer will be invoked on each node to ensure there is only a single result per node.
        Specified by:
        entryReduction in interface ClusterPublisherManager<K,​V>
        Type Parameters:
        R - return value type
        Parameters:
        parallelPublisher - Whether on each node the publisher should be parallelized remotely and locally
        segments - determines what entries should be evaluated by only using ones that map to the given segments (if null assumes all segments)
        keysToInclude - set of keys that should only be used (if null all entries for the given segments will be evaluated)
        ctx - context of the invoking operation, context entries override the values in the cache (may be null)
        includeLoader - whether to include entries from the underlying cache loader if any
        deliveryGuarantee - delivery guarantee for given entries
        transformer - reduces the given publisher of data eventually into a single value. Must not be null.
        finalizer - reduces all of the single values produced by the transformer or this finalizer into one final value. Must not be null.
        Returns:
        CompletionStage that contains the resulting value when complete
      • entryPublisher

        public <R> SegmentCompletionPublisher<R> entryPublisher​(org.infinispan.commons.util.IntSet segments,
                                                                Set<K> keysToInclude,
                                                                InvocationContext invocationContext,
                                                                boolean includeLoader,
                                                                DeliveryGuarantee deliveryGuarantee,
                                                                int batchSize,
                                                                Function<? super org.reactivestreams.Publisher<CacheEntry<K,​V>>,​? extends org.reactivestreams.Publisher<R>> transformer)
        Description copied from interface: ClusterPublisherManager
        Performs the given transformer on data in the cache, resulting in multiple values. If a single value is desired, the user should use ClusterPublisherManager.entryReduction(boolean, IntSet, Set, InvocationContext, boolean, DeliveryGuarantee, Function, Function) instead as it can optimize some things. Depending on the deliveryGuarantee the transformer may be invoked 1..numSegments times per node. Results from a given node will retrieve values up to batchSize values until some are consumed.
        Specified by:
        entryPublisher in interface ClusterPublisherManager<K,​V>
        Type Parameters:
        R - return value type
        Parameters:
        segments - determines what entries should be evaluated by only using ones that map to the given segments (if null assumes all segments)
        keysToInclude - set of keys that should only be used (if null all entries for the given segments will be evaluated)
        invocationContext - context of the invoking operation, context entries override the values in the cache (may be null)
        includeLoader - whether to include entries from the underlying cache loader if any
        deliveryGuarantee - delivery guarantee for given entries
        batchSize - how many entries to be returned at a given time
        transformer - transform the given stream of data into something else (requires non null)
        Returns:
        Publisher that when subscribed to will return the results and notify of segment completion if necessary