Search in sources :

Example 1 with ClusterListenerReplicateCallable

use of org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable in project infinispan by infinispan.

the class StateTransferGetListenersCommand method invokeAsync.

@Override
public CompletionStage<Collection<ClusterListenerReplicateCallable<Object, Object>>> invokeAsync(ComponentRegistry registry) throws Throwable {
    StateProvider stateProvider = registry.getStateTransferManager().getStateProvider();
    Collection<ClusterListenerReplicateCallable<Object, Object>> listeners = stateProvider.getClusterListenersToInstall();
    return CompletableFuture.completedFuture(listeners);
}
Also used : StateProvider(org.infinispan.statetransfer.StateProvider) ClusterListenerReplicateCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable)

Example 2 with ClusterListenerReplicateCallable

use of org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable in project infinispan by infinispan.

the class CacheNotifierImpl method registerClusterListeners.

private <C> CompletionStage<Void> registerClusterListeners(List<Address> members, UUID generatedId, Address ourAddress, CacheEventFilter<? super K, ? super V> filter, CacheEventConverter<? super K, ? super V, C> converter, Listener l, Object listener, DataConversion keyDataConversion, DataConversion valueDataConversion, boolean useStorageFormat) {
    if (log.isTraceEnabled()) {
        log.tracef("Replicating cluster listener to other nodes %s for cluster listener with id %s", members, generatedId);
    }
    ClusterListenerReplicateCallable<K, V> callable = new ClusterListenerReplicateCallable(cache.wired().getName(), generatedId, ourAddress, filter, converter, l.sync(), findListenerCallbacks(listener), keyDataConversion, valueDataConversion, useStorageFormat);
    TriConsumer<Address, Void, Throwable> handleSuspect = (a, ignore, t) -> {
        if (t != null && !(t instanceof SuspectException)) {
            log.debugf(t, "Address: %s encountered an exception while adding cluster listener", a);
            throw new CacheListenerException(t);
        }
    };
    // Send to all nodes but ours
    CompletionStage<Void> completionStage = clusterExecutor.filterTargets(a -> !ourAddress.equals(a)).submitConsumer(callable, handleSuspect);
    // the listener - unfortunately if there are no nodes it throws a SuspectException, so we ignore that
    return completionStage.thenCompose(v -> clusterExecutor.filterTargets(a -> !members.contains(a) && !a.equals(ourAddress)).submitConsumer(callable, handleSuspect).exceptionally(t -> {
        // Ignore any suspect exception
        if (!(t instanceof SuspectException)) {
            throw new CacheListenerException(t);
        }
        return null;
    }));
}
Also used : WriteCommand(org.infinispan.commands.write.WriteCommand) LogFactory(org.infinispan.util.logging.LogFactory) CacheListenerException(org.infinispan.commons.CacheListenerException) Wrapper(org.infinispan.commons.dataconversion.Wrapper) PartitionStatusChanged(org.infinispan.notifications.cachelistener.annotation.PartitionStatusChanged) GlobalConfiguration(org.infinispan.configuration.global.GlobalConfiguration) PersistenceAvailabilityChanged(org.infinispan.notifications.cachelistener.annotation.PersistenceAvailabilityChanged) Scopes(org.infinispan.factories.scopes.Scopes) BasicComponentRegistry(org.infinispan.factories.impl.BasicComponentRegistry) CONTAINER(org.infinispan.util.logging.Log.CONTAINER) AdvancedCache(org.infinispan.AdvancedCache) CACHE_ENTRY_INVALIDATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_INVALIDATED) TxInvocationContext(org.infinispan.context.impl.TxInvocationContext) CacheEventFilterAsKeyValueFilter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterAsKeyValueFilter) Map(java.util.Map) Transaction(javax.transaction.Transaction) Listener(org.infinispan.notifications.Listener) ClusterEventManager(org.infinispan.notifications.cachelistener.cluster.ClusterEventManager) ConsistentHash(org.infinispan.distribution.ch.ConsistentHash) CacheEntryPassivatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryPassivatedEvent) Set(java.util.Set) TransactionCompletedEvent(org.infinispan.notifications.cachelistener.event.TransactionCompletedEvent) CacheTopology(org.infinispan.topology.CacheTopology) CACHE_ENTRY_PASSIVATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_PASSIVATED) CacheEntryLoadedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryLoadedEvent) CACHE_ENTRY_MODIFIED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_MODIFIED) CacheEntryCreated(org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated) CacheEventFilterConverter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverter) CacheIntermediatePublisher(org.infinispan.stream.impl.CacheIntermediatePublisher) CompletionStage(java.util.concurrent.CompletionStage) TRANSACTION_REGISTERED(org.infinispan.notifications.cachelistener.event.Event.Type.TRANSACTION_REGISTERED) DataConversion(org.infinispan.encoding.DataConversion) AsyncInterceptorChain(org.infinispan.interceptors.AsyncInterceptorChain) AvailabilityMode(org.infinispan.partitionhandling.AvailabilityMode) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) CacheEntryRemoved(org.infinispan.notifications.cachelistener.annotation.CacheEntryRemoved) TopologyChanged(org.infinispan.notifications.cachelistener.annotation.TopologyChanged) CacheEventFilterConverterAsKeyValueFilterConverter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverterAsKeyValueFilterConverter) CacheEntryPassivated(org.infinispan.notifications.cachelistener.annotation.CacheEntryPassivated) CacheEntryInvalidated(org.infinispan.notifications.cachelistener.annotation.CacheEntryInvalidated) CacheEntriesEvictedEvent(org.infinispan.notifications.cachelistener.event.CacheEntriesEvictedEvent) CacheEntryVisitedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryVisitedEvent) CACHE_ENTRY_EXPIRED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_EXPIRED) PersistenceAvailabilityChangedEvent(org.infinispan.notifications.cachelistener.event.PersistenceAvailabilityChangedEvent) AbstractListenerImpl(org.infinispan.notifications.impl.AbstractListenerImpl) SegmentPublisherSupplier(org.infinispan.reactive.publisher.impl.SegmentPublisherSupplier) EnumUtil(org.infinispan.commons.util.EnumUtil) ArrayList(java.util.ArrayList) Start(org.infinispan.factories.annotations.Start) PARTITION_STATUS_CHANGED(org.infinispan.notifications.cachelistener.event.Event.Type.PARTITION_STATUS_CHANGED) CacheFilters(org.infinispan.filter.CacheFilters) CACHE_ENTRY_REMOVED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_REMOVED) EventType(org.infinispan.notifications.cachelistener.filter.EventType) ClusterExecutor(org.infinispan.manager.ClusterExecutor) TransactionCompleted(org.infinispan.notifications.cachelistener.annotation.TransactionCompleted) PublisherTransformers(org.infinispan.reactive.publisher.PublisherTransformers) Address(org.infinispan.remoting.transport.Address) Transcoder(org.infinispan.commons.dataconversion.Transcoder) CACHE_ENTRY_CREATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_CREATED) InternalEntryFactory(org.infinispan.container.impl.InternalEntryFactory) CacheEntry(org.infinispan.container.entries.CacheEntry) CacheEventFilter(org.infinispan.notifications.cachelistener.filter.CacheEventFilter) ClusterListenerReplicateCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable) TOPOLOGY_CHANGED(org.infinispan.notifications.cachelistener.event.Event.Type.TOPOLOGY_CHANGED) Inject(org.infinispan.factories.annotations.Inject) PERSISTENCE_AVAILABILITY_CHANGED(org.infinispan.notifications.cachelistener.event.Event.Type.PERSISTENCE_AVAILABILITY_CHANGED) CacheEntryInvalidatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryInvalidatedEvent) ClusterEvent(org.infinispan.notifications.cachelistener.cluster.ClusterEvent) CacheEntryEvent(org.infinispan.notifications.cachelistener.event.CacheEntryEvent) CacheEventConverterAsConverter(org.infinispan.notifications.cachelistener.filter.CacheEventConverterAsConverter) GlobalTransaction(org.infinispan.transaction.xa.GlobalTransaction) Event(org.infinispan.notifications.cachelistener.event.Event) CACHE_ENTRY_LOADED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_LOADED) DataRehashedEvent(org.infinispan.notifications.cachelistener.event.DataRehashedEvent) SuspectException(org.infinispan.remoting.transport.jgroups.SuspectException) AggregateCompletionStage(org.infinispan.util.concurrent.AggregateCompletionStage) TransactionRegisteredEvent(org.infinispan.notifications.cachelistener.event.TransactionRegisteredEvent) ClusterListenerRemoveCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerRemoveCallable) MapOperation(org.infinispan.stream.impl.intops.object.MapOperation) CACHE_ENTRY_EVICTED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_EVICTED) CacheEntryModifiedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryModifiedEvent) IndexedFilter(org.infinispan.notifications.cachelistener.filter.IndexedFilter) InvocationContext(org.infinispan.context.InvocationContext) ComponentRef(org.infinispan.factories.impl.ComponentRef) CompletableFutures(org.infinispan.util.concurrent.CompletableFutures) CacheEntryRemovedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryRemovedEvent) DeliveryGuarantee(org.infinispan.reactive.publisher.impl.DeliveryGuarantee) FilterOperation(org.infinispan.stream.impl.intops.object.FilterOperation) Scope(org.infinispan.factories.scopes.Scope) TriConsumer(org.infinispan.util.function.TriConsumer) CACHE_ENTRY_VISITED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_VISITED) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) CacheEventConverter(org.infinispan.notifications.cachelistener.filter.CacheEventConverter) UUID(java.util.UUID) CacheEntryExpired(org.infinispan.notifications.cachelistener.annotation.CacheEntryExpired) Objects(java.util.Objects) List(java.util.List) TRANSACTION_COMPLETED(org.infinispan.notifications.cachelistener.event.Event.Type.TRANSACTION_COMPLETED) ClusterPublisherManager(org.infinispan.reactive.publisher.impl.ClusterPublisherManager) Annotation(java.lang.annotation.Annotation) TransactionRegistered(org.infinispan.notifications.cachelistener.annotation.TransactionRegistered) FilterIndexingServiceProvider(org.infinispan.notifications.cachelistener.filter.FilterIndexingServiceProvider) EventImpl(org.infinispan.notifications.cachelistener.event.impl.EventImpl) CacheEntryLoaded(org.infinispan.notifications.cachelistener.annotation.CacheEntryLoaded) FlagAffectedCommand(org.infinispan.commands.FlagAffectedCommand) ClusterCacheNotifier(org.infinispan.notifications.cachelistener.cluster.ClusterCacheNotifier) DataRehashed(org.infinispan.notifications.cachelistener.annotation.DataRehashed) CommandInvocationId(org.infinispan.commands.CommandInvocationId) ServiceFinder(org.infinispan.commons.util.ServiceFinder) HashMap(java.util.HashMap) Metadata(org.infinispan.metadata.Metadata) Function(java.util.function.Function) ConcurrentMap(java.util.concurrent.ConcurrentMap) HashSet(java.util.HashSet) FlagBitSets(org.infinispan.context.impl.FlagBitSets) DATA_REHASHED(org.infinispan.notifications.cachelistener.event.Event.Type.DATA_REHASHED) MediaType(org.infinispan.commons.dataconversion.MediaType) CacheEntryVisited(org.infinispan.notifications.cachelistener.annotation.CacheEntryVisited) CacheEntryExpiredEvent(org.infinispan.notifications.cachelistener.event.CacheEntryExpiredEvent) KeyPartitioner(org.infinispan.distribution.ch.KeyPartitioner) IntermediateOperation(org.infinispan.stream.impl.intops.IntermediateOperation) CacheEntryModified(org.infinispan.notifications.cachelistener.annotation.CacheEntryModified) Log(org.infinispan.util.logging.Log) SegmentSpecificCommand(org.infinispan.commands.SegmentSpecificCommand) EncoderRegistry(org.infinispan.marshall.core.EncoderRegistry) CACHE_ENTRY_ACTIVATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_ACTIVATED) ClusteringDependentLogic(org.infinispan.interceptors.locking.ClusteringDependentLogic) CacheEntriesEvicted(org.infinispan.notifications.cachelistener.annotation.CacheEntriesEvicted) CacheException(org.infinispan.commons.CacheException) Flowable(io.reactivex.rxjava3.core.Flowable) DelegatingCacheEntryListenerInvocation(org.infinispan.notifications.cachelistener.filter.DelegatingCacheEntryListenerInvocation) ListenerInvocation(org.infinispan.notifications.impl.ListenerInvocation) Util(org.infinispan.commons.util.Util) CacheEntryActivated(org.infinispan.notifications.cachelistener.annotation.CacheEntryActivated) PartitionStatusChangedEvent(org.infinispan.notifications.cachelistener.event.PartitionStatusChangedEvent) RpcManager(org.infinispan.remoting.rpc.RpcManager) Completable(io.reactivex.rxjava3.core.Completable) CacheEntryActivatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryActivatedEvent) RemoteClusterListener(org.infinispan.notifications.cachelistener.cluster.RemoteClusterListener) TopologyChangedEvent(org.infinispan.notifications.cachelistener.event.TopologyChangedEvent) Status(javax.transaction.Status) CacheMode(org.infinispan.configuration.cache.CacheMode) EncoderEntryMapper(org.infinispan.cache.impl.EncoderEntryMapper) Configuration(org.infinispan.configuration.cache.Configuration) TransactionManager(javax.transaction.TransactionManager) CacheEntryCreatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent) CacheListenerException(org.infinispan.commons.CacheListenerException) Address(org.infinispan.remoting.transport.Address) ClusterListenerReplicateCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable) SuspectException(org.infinispan.remoting.transport.jgroups.SuspectException)

Example 3 with ClusterListenerReplicateCallable

use of org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable in project infinispan by infinispan.

the class CacheNotifierImpl method registerClusterListenerCallablesToInstall.

private void registerClusterListenerCallablesToInstall(Set<Object> enlistedAlready, Set<ClusterListenerReplicateCallable<K, V>> callables, List<CacheEntryListenerInvocation<K, V>> listenerInvocations) {
    for (CacheEntryListenerInvocation<K, V> listener : listenerInvocations) {
        if (!enlistedAlready.contains(listener.getTarget())) {
            // If clustered means it is local - so use our address
            if (listener.isClustered()) {
                Set<Class<? extends Annotation>> filterAnnotations = listener.getFilterAnnotations();
                callables.add(new ClusterListenerReplicateCallable(cache.wired().getName(), listener.getIdentifier(), rpcManager.getAddress(), listener.getFilter(), listener.getConverter(), listener.isSync(), filterAnnotations, listener.getKeyDataConversion(), listener.getValueDataConversion(), listener.useStorageFormat()));
                enlistedAlready.add(listener.getTarget());
            } else if (listener.getTarget() instanceof RemoteClusterListener) {
                RemoteClusterListener lcl = (RemoteClusterListener) listener.getTarget();
                Set<Class<? extends Annotation>> filterAnnotations = listener.getFilterAnnotations();
                callables.add(new ClusterListenerReplicateCallable(cache.wired().getName(), lcl.getId(), lcl.getOwnerAddress(), listener.getFilter(), listener.getConverter(), listener.isSync(), filterAnnotations, listener.getKeyDataConversion(), listener.getValueDataConversion(), listener.useStorageFormat()));
                enlistedAlready.add(listener.getTarget());
            }
        }
    }
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) ClusterListenerReplicateCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable) RemoteClusterListener(org.infinispan.notifications.cachelistener.cluster.RemoteClusterListener) Annotation(java.lang.annotation.Annotation)

Example 4 with ClusterListenerReplicateCallable

use of org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable in project infinispan by infinispan.

the class StateConsumerImpl method getClusterListeners.

private CompletionStage<Collection<ClusterListenerReplicateCallable<Object, Object>>> getClusterListeners(int topologyId, List<Address> sources) {
    // Try the first member. If the request fails, fall back to the second member and so on.
    if (sources.isEmpty()) {
        if (// TODO Ignore self again
        log.isTraceEnabled())
            log.trace("Unable to acquire cluster listeners from other members, assuming none are present");
        return CompletableFuture.completedFuture(Collections.emptySet());
    }
    Address source = sources.get(0);
    // Don't send the request to self
    if (sources.get(0).equals(rpcManager.getAddress())) {
        return getClusterListeners(topologyId, sources.subList(1, sources.size()));
    }
    if (log.isTraceEnabled())
        log.tracef("Requesting cluster listeners of cache %s from node %s", cacheName, sources);
    CacheRpcCommand cmd = commandsFactory.buildStateTransferGetListenersCommand(topologyId);
    CompletionStage<ValidResponse> remoteStage = rpcManager.invokeCommand(source, cmd, SingleResponseCollector.validOnly(), rpcOptions);
    return handleAndCompose(remoteStage, (response, throwable) -> {
        if (throwable != null) {
            log.exceptionDuringClusterListenerRetrieval(source, throwable);
        }
        if (response instanceof SuccessfulResponse) {
            return CompletableFuture.completedFuture((Collection<ClusterListenerReplicateCallable<Object, Object>>) response.getResponseValue());
        } else {
            log.unsuccessfulResponseForClusterListeners(source, response);
            return getClusterListeners(topologyId, sources.subList(1, sources.size()));
        }
    });
}
Also used : SuccessfulResponse(org.infinispan.remoting.responses.SuccessfulResponse) Address(org.infinispan.remoting.transport.Address) ValidResponse(org.infinispan.remoting.responses.ValidResponse) ClusterListenerReplicateCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable) CacheRpcCommand(org.infinispan.commands.remote.CacheRpcCommand)

Aggregations

ClusterListenerReplicateCallable (org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable)4 Annotation (java.lang.annotation.Annotation)2 HashSet (java.util.HashSet)2 Set (java.util.Set)2 RemoteClusterListener (org.infinispan.notifications.cachelistener.cluster.RemoteClusterListener)2 Completable (io.reactivex.rxjava3.core.Completable)1 Flowable (io.reactivex.rxjava3.core.Flowable)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Objects (java.util.Objects)1 UUID (java.util.UUID)1 CompletionStage (java.util.concurrent.CompletionStage)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)1 Function (java.util.function.Function)1 Status (javax.transaction.Status)1