[
https://jira.jboss.org/browse/ISPN-771?page=com.atlassian.jira.plugin.sys...
]
Manik Surtani commented on ISPN-771:
------------------------------------
The check isn't a guard, it is how you select which listener to remove.
When you call AbstractListenerImpl.removeListener(),
https://github.com/infinispan/infinispan/blob/master/core/src/main/java/o...
gets a collection of *all* listeners registered under a particular annotation. The check
in
https://github.com/infinispan/infinispan/blob/master/core/src/main/java/o...
just ensures we remove the correct listener.
When an AS application is deployed/undeployed, is the cache restarted? Because if it is,
AbstractListenerImpl.stop() should be called which should clear all registered listeners.
org.infinispan.notifications.AbstractListenerImpl.listenersMap
ViewChanged entries keep increasing during start/stop/start/stop cycle (AS application
deploy/undeploy)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: ISPN-771
URL:
https://jira.jboss.org/browse/ISPN-771
Project: Infinispan
Issue Type: Bug
Reporter: Scott Marlow
Assignee: Manik Surtani
Fix For: 4.2.0.CR1
org.infinispan.notifications.AbstractListenerImpl.listenersMap has a
org.infinispan.notifications.cachemanagerlistener.annotation.ViewChanged that is
always increasing number of entries (per deploy/undeploy with AS)
[0]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[1]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[2]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[3]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[4]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
[N]org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.target =
org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup
keeps increasing until we run out of memory
Looks like we miss removing these because:
org.infinispan.notifications.AbstractListenerImpl.removeListenerInvocation
private void removeListenerInvocation(Class<? extends Annotation> annotation,
Object listener) {
if (listener == null) return;
List<ListenerInvocation> l = getListenerCollectionForAnnotation(annotation);
Set<Object> markedForRemoval = new HashSet<Object>();
for (ListenerInvocation li : l) {
if (listener.equals(li.target)) markedForRemoval.add(li); // NEVER EQUALS
}
l.removeAll(markedForRemoval);
}
listener =
org.jboss.web.tomcat.service.session.distributedcache.ispn.DefaultLockManagerSource@1d2d2db8
0:li.target=org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup@2eedd32f
1:li.target=org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup@18b9ae20
2:li.target=org.infinispan.transaction.xa.TransactionTable$StaleTransactionCleanup@226d7ba7
... same li.target class for all entries, so they don't get removed
class org.jboss.web.tomcat.service.session.distributedcache.ispn.DefaultLockManagerSource
implements LockManagerSource
class org.infinispan.transaction.xa.TransactionTable.StaleTransactionCleanup is a pojo
with onViewChange method.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira