You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Swapnil Bawaskar (JIRA)" <ji...@apache.org> on 2016/10/01 22:23:28 UTC

[jira] [Updated] (GEODE-1915) Registering instantiators can cause a deadlock with gateways

     [ https://issues.apache.org/jira/browse/GEODE-1915?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Swapnil Bawaskar updated GEODE-1915:
------------------------------------
    Fix Version/s: 1.0.0-incubating

> Registering instantiators can cause a deadlock with gateways
> ------------------------------------------------------------
>
>                 Key: GEODE-1915
>                 URL: https://issues.apache.org/jira/browse/GEODE-1915
>             Project: Geode
>          Issue Type: Bug
>          Components: wan
>            Reporter: Dan Smith
>            Assignee: Dan Smith
>             Fix For: 1.0.0-incubating
>
>
> If two WAN sites are connected bidirectionally, registering an instantiator in one of the sites can cause a deadlock. 
> The issue is that when an instantiator is registered, a message is sent synchronously from one site to the other, while holding a static lock on the InternalInstantiator class. Unfortunately, when the second site receives the registration, it tries to send it back to the first site. In the first site, the registeration message then is stuck trying to get the same lock.
> {code}
> "ServerConnection on port 28517 Thread 4" #80 daemon prio=5 os_prio=0 tid=0x00007fce78007000 nid=0xc48a runnable [0x00007fce377f7000]
>    java.lang.Thread.State: RUNNABLE
> 	at java.net.SocketInputStream.socketRead0(Native Method)
> 	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
> 	at java.net.SocketInputStream.read(SocketInputStream.java:170)
> 	at java.net.SocketInputStream.read(SocketInputStream.java:141)
> 	at org.apache.geode.internal.cache.tier.sockets.Message.fetchHeader(Message.java:693)
> 	at org.apache.geode.internal.cache.tier.sockets.Message.readHeaderAndPayload(Message.java:710)
> 	at org.apache.geode.internal.cache.tier.sockets.Message.read(Message.java:661)
> 	at org.apache.geode.internal.cache.tier.sockets.Message.recv(Message.java:1103)
> 	- locked <0x00000000fb3aec38> (a java.nio.HeapByteBuffer)
> 	at org.apache.geode.cache.client.internal.AbstractOp.attemptReadResponse(AbstractOp.java:171)
> 	at org.apache.geode.cache.client.internal.AbstractOp.attempt(AbstractOp.java:388)
> 	at org.apache.geode.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:272)
> 	- locked <0x00000000fb3ad430> (a org.apache.geode.cache.client.internal.ConnectionImpl)
> 	at org.apache.geode.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:328)
> 	at org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:937)
> 	at org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:155)
> 	at org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:711)
> 	at org.apache.geode.cache.client.internal.RegisterInstantiatorsOp.execute(RegisterInstantiatorsOp.java:49)
> 	at org.apache.geode.internal.cache.PoolManagerImpl.allPoolsRegisterInstantiator(PoolManagerImpl.java:227)
> 	at org.apache.geode.internal.InternalInstantiator.sendRegistrationMessageToServers(InternalInstantiator.java:219)
> 	at org.apache.geode.internal.InternalInstantiator._register(InternalInstantiator.java:174)
> 	- locked <0x00000000fb3ad678> (a java.lang.Class for org.apache.geode.internal.InternalInstantiator)
> 	at org.apache.geode.internal.InternalInstantiator.register(InternalInstantiator.java:310)
> 	at org.apache.geode.internal.cache.tier.sockets.command.RegisterInstantiators.cmdExecute(RegisterInstantiators.java:100)
> 	at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:145)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:783)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:913)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1180)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:546)
> 	at java.lang.Thread.run(Thread.java:745)
> "ServerConnection on port 28517 Thread 3" #78 daemon prio=5 os_prio=0 tid=0x00007fce78005000 nid=0xc487 waiting for monitor entry [0x00007fce379fa000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
> 	at org.apache.geode.internal.InternalInstantiator._register(InternalInstantiator.java:117)
> 	- waiting to lock <0x00000000fb3ad678> (a java.lang.Class for org.apache.geode.internal.InternalInstantiator)
> 	at org.apache.geode.internal.InternalInstantiator.register(InternalInstantiator.java:310)
> 	at org.apache.geode.internal.cache.tier.sockets.command.RegisterInstantiators.cmdExecute(RegisterInstantiators.java:100)
> 	at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:145)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:783)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:913)
> 	at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1180)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:546)
> 	at java.lang.Thread.run(Thread.java:745)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)