Search in sources :

Example 1 with CacheListenerException

use of org.infinispan.commons.CacheListenerException 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 2 with CacheListenerException

use of org.infinispan.commons.CacheListenerException in project infinispan by infinispan.

the class AbstractJCache method put.

protected V put(BasicCache<K, V> cache, BasicCache<K, V> createCheckCache, K key, V value, boolean isPutIfAbsent) {
    // Use a separate cache reference to check whether entry is created or
    // not. A separate reference allows for listener notifications to be
    // skipped selectively.
    V prev = createCheckCache.get(key);
    boolean isCreated = prev == null;
    // If putIfAbsent and entry already present, skip early
    if (!isCreated && isPutIfAbsent)
        return prev;
    V ret;
    Duration ttl = isCreated ? Expiration.getExpiry(expiryPolicy, Expiration.Operation.CREATION) : Expiration.getExpiry(expiryPolicy, Expiration.Operation.UPDATE);
    try {
        if (ttl == null || ttl.isEternal()) {
            ret = isPutIfAbsent ? cache.putIfAbsent(key, value) : cache.put(key, value);
        } else if (ttl.equals(Duration.ZERO)) {
            // If the entry is modified, explicitly remove it.
            if (!isCreated)
                ret = cache.remove(key);
            else
                ret = null;
        } else {
            long duration = ttl.getDurationAmount();
            TimeUnit timeUnit = ttl.getTimeUnit();
            ret = isPutIfAbsent ? cache.putIfAbsent(key, value, duration, timeUnit) : cache.put(key, value, duration, timeUnit);
        }
        return ret;
    } catch (CacheListenerException e) {
        throw Exceptions.launderCacheListenerException(e);
    }
}
Also used : CacheListenerException(org.infinispan.commons.CacheListenerException) TimeUnit(java.util.concurrent.TimeUnit) Duration(javax.cache.expiry.Duration)

Aggregations

CacheListenerException (org.infinispan.commons.CacheListenerException)2 Completable (io.reactivex.rxjava3.core.Completable)1 Flowable (io.reactivex.rxjava3.core.Flowable)1 Annotation (java.lang.annotation.Annotation)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Set (java.util.Set)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 TimeUnit (java.util.concurrent.TimeUnit)1 Function (java.util.function.Function)1 Duration (javax.cache.expiry.Duration)1