Coherence deadlock in Proxy Server between OldCache.removeMapListener and Channel.registerRequest (Doc ID 2176890.1)

Last updated on JULY 24, 2017

Applies to:

Oracle Coherence - Version 12.1.3.0.0 to 12.1.3.0.5 [Release 12c]
Information in this document applies to any platform.

Symptoms

 Deadlock in Coherence Proxy between OldCache.removeMapListener and Channel.registerRequest is found occasionally and the detail of the deadlock  is as following stacktrace:

"JobThreadPool-4":
at com.tangosol.coherence.component.net.extend.Channel.registerRequest(Channel.CDB:14)
- waiting to lock <0x00000005eaddc600> (a com.tangosol.util.SparseArray)
at com.tangosol.coherence.component.net.extend.Channel.send(Channel.CDB:8)
at com.tangosol.coherence.component.net.extend.RemoteNamedCache$BinaryCache.removeRemoteMapListener(RemoteNamedCache.CDB:16)
at com.tangosol.coherence.component.net.extend.RemoteNamedCache$BinaryCache.removeMapListener(RemoteNamedCache.CDB:37)
at com.tangosol.coherence.component.net.extend.RemoteNamedCache.removeMapListener(RemoteNamedCache.CDB:1)
at com.tangosol.coherence.component.util.SafeNamedCache.removeMapListener(SafeNamedCache.CDB:11)
at com.tangosol.net.cache.CachingMap.unregisterListener(CachingMap.java:1563)
at com.tangosol.net.cache.CachingMap$FrontMapListener.entryDeleted(CachingMap.java:1803)
at com.tangosol.util.MapEvent.dispatch(MapEvent.java:274)
at com.tangosol.util.MapEvent.dispatch(MapEvent.java:226)
at com.tangosol.util.MapListenerSupport.fireEvent(MapListenerSupport.java:573)
at com.tangosol.net.cache.OldCache.dispatchEvent(OldCache.java:1980)
- locked <0x00000005eadef100> (a com.tangosol.net.cache.LocalCache)
at com.tangosol.net.cache.OldCache$Entry.discard(OldCache.java:2400)
at com.tangosol.net.cache.OldCache.removeEvicted(OldCache.java:1594)
- locked <0x00000005eadef100> (a com.tangosol.net.cache.LocalCache)
at com.tangosol.net.cache.LocalCache.removeEvicted(LocalCache.java:548)
- locked <0x00000005eadef100> (a com.tangosol.net.cache.LocalCache)
at com.tangosol.net.cache.OldCache.removeIfExpired(OldCache.java:1618)
- locked <0x00000005eadef100> (a com.tangosol.net.cache.LocalCache)
at com.tangosol.net.cache.OldCache.getEntryInternal(OldCache.java:1554)
at com.tangosol.net.cache.OldCache.evictAll(OldCache.java:527)
at com.tangosol.net.cache.OldCache.evict(OldCache.java:593)
- locked <0x00000005eadef100> (a com.tangosol.net.cache.LocalCache)
at com.tangosol.net.cache.OldCache.getEntry(OldCache.java:195)
at com.tangosol.net.cache.LocalCache.getEntry(LocalCache.java:208)
at com.tangosol.net.cache.OldCache.get(OldCache.java:181)
at com.tangosol.net.cache.LocalCache.get(LocalCache.java:195)
at com.tangosol.net.cache.CachingMap.get(CachingMap.java:472)
at com.huawei.bes.common.adapter.cache.impl.GridCacheImpl.getData(GridCacheImpl.java:36)
at com.huawei.bes.common.adapter.cache.impl.GridCacheImpl.get(GridCacheImpl.java:150)
at com.huawei.bes.common.adapter.cache.impl.CacheManagerFacade.getCache(CacheManagerFacade.java:159)
at com.huawei.bes.sm.framework.cache.mgr.ICacheManagerDefaultImpl.getCache(ICacheManagerDefaultImpl.java:80)
at com.huawei.bes.sm.framework.cache.dflt.DefaultIncrementalCache.loadFromCache(DefaultIncrementalCache.java:83)
at com.huawei.bes.sm.framework.cache.AbstractCache.queryWithCondition(AbstractCache.java:252)
at com.huawei.bes.sm.auc.service.LoginLogService.setLoginLogInfo(LoginLogService.java:185)
at com.huawei.bes.sm.auc.service.LoginLogService.insertLogForTask(LoginLogService.java:164)
at com.huawei.bes.sm.auc.task.expiresessionclear.ExpireSessionClearBOImpl.clearSession(ExpireSessionClearBOImpl.java:155)
at com.huawei.bes.sm.auc.task.expiresessionclear.ExpireSessionClearBOImpl.clearExpireSession(ExpireSessionClearBOImpl.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.huawei.soa.bdf.service.mixconnector.method.impl.PojoMethod.invoke(PojoMethod.java:31)
at com.huawei.soa.bdf.service.mixconnector.method.impl.MixSdkMethod.doInvoke(MixSdkMethod.java:160)
at com.huawei.soa.bdf.service.mixconnector.method.impl.MixSdkMethod.invoke(MixSdkMethod.java:88)
at com.huawei.soa.bdf.service.mixconnector.interceptor.MixServiceMethodInterceptor.invoke(MixServiceMethodInterceptor.java:63)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at com.huawei.soa.bdf.transaction.LocalTransactionInterceptor.invoke(LocalTransactionInterceptor.java:59)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy2410.clearExpireSession(Unknown Source)
at com.huawei.bes.sm.auc.task.expiresessionclear.ExpireSessionClearTask.runTask(ExpireSessionClearTask.java:40)
at com.huawei.bes.sm.auc.task.expiresessionclear.ExpireSessionClearTask.execute(ExpireSessionClearTask.java:100)
at com.huawei.bes.common.job.executing.JobWrapper.call(JobWrapper.java:280)
at com.huawei.bes.common.job.executing.JobWrapper.call(JobWrapper.java:37)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
"bes-proxy-service:TcpInitiator":
at com.tangosol.net.cache.OldCache.removeMapListener(OldCache.java:455)
- waiting to lock <0x00000005eadef100> (a com.tangosol.net.cache.LocalCache)
at com.tangosol.net.cache.CachingMap$FrontMapListener.unregister(CachingMap.java:1833)
at com.tangosol.net.cache.CachingMap.unregisterFrontListener(CachingMap.java:1594)
at com.tangosol.net.cache.CachingMap.resetFrontMap(CachingMap.java:1741)
at com.tangosol.net.cache.CachingMap$DeactivationListener.entryDeleted(CachingMap.java:1730)
at com.tangosol.util.MapEvent.dispatch(MapEvent.java:274)
at com.tangosol.coherence.component.util.CacheEvent.dispatchSafe(CacheEvent.CDB:14)
at com.tangosol.coherence.component.net.extend.RemoteNamedCache.unregisterChannel(RemoteNamedCache.CDB:12)
at com.tangosol.coherence.component.net.extend.Channel.closeInternal(Channel.CDB:53)
- locked <0x00000005eaddc600> (a com.tangosol.util.SparseArray)
at com.tangosol.coherence.component.net.extend.Connection.closeInternal(Connection.CDB:24)
- locked <0x00000005d6c8ffd0> (a com.tangosol.util.SparseArray)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.peer.initiator.TcpInitiator$TcpConnection.closeInternal(TcpInitiator.CDB:6)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Peer$MessageFactory$CloseConnection.onRun(Peer.CDB:1)
at com.tangosol.coherence.component.net.extend.message.Request.run(Request.CDB:4)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Peer.onMessage(Peer.CDB:1)
at com.tangosol.coherence.component.net.extend.Channel.execute(Channel.CDB:61)
at com.tangosol.coherence.component.net.extend.Channel.receive(Channel.CDB:26)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Peer.onNotify(Peer.CDB:103)
at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:45)
at java.lang.Thread.run(Thread.java:745)

Found 1 deadlock.

Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms