Andrei Plugaru created GEODE-10524:
--------------------------------------
Summary: Program hangs in Geode code if thread is interrupted
Key: GEODE-10524
URL: https://issues.apache.org/jira/browse/GEODE-10524
Project: Geode
Issue Type: Bug
Affects Versions: 1.15.2
Reporter: Andrei Plugaru
Configuration: Locator and Server are running as different process using peer
to peer configuration. I am having a REPLICATE region with GLOBAL scope.
If I am calling methods like put/replace on that region *after* the thread has
been interrupted, it is entering an infinite loop. This is the stack trace from
a thread dump:
{code:java}
at
org.apache.geode.distributed.internal.locks.DLockGrantor.waitWhileInitializing(DLockGrantor.java:379)
at
org.apache.geode.distributed.internal.locks.DLockGrantor.waitForGrantor(DLockGrantor.java:304)
at
org.apache.geode.distributed.internal.locks.DLockReleaseProcessor$DLockReleaseMessage.basicProcess(DLockReleaseProcessor.java:256)
at
org.apache.geode.distributed.internal.locks.DLockReleaseProcessor$DLockReleaseMessage.processLocally(DLockReleaseProcessor.java:218)
at
org.apache.geode.distributed.internal.locks.DLockReleaseProcessor.release(DLockReleaseProcessor.java:78)
at
org.apache.geode.distributed.internal.locks.DLockService.callReleaseProcessor(DLockService.java:1318)
at
org.apache.geode.distributed.internal.locks.DLockService.callReleaseProcessor(DLockService.java:1311)
at
org.apache.geode.distributed.internal.locks.DLockService.unlock(DLockService.java:1797)
at
org.apache.geode.internal.cache.DistributedRegion$DistributedLock.unlock(DistributedRegion.java:3225)
at
org.apache.geode.internal.cache.DistributedRegion.virtualPut(DistributedRegion.java:433)
at
org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5635)
at
org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:157)
at
org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5084)
at
org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1651)
at
org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1638)
at
org.apache.geode.internal.cache.AbstractRegion.put(AbstractRegion.java:445)
{code}
Even though, in a normal situation, the interrupted status shouldn't really be
set, I don't think that having it set should cause an infinite loop.
This is the code that should replicate the issue:
{code:java}
Cache cache = new CacheFactory()
.set("locators", "localhost[10334]")
.set("log-level", "error")
.create();
Region<String, String> customerRegion =
cache.<String,
String>createRegionFactory(RegionShortcut.REPLICATE).setScope(Scope.GLOBAL)
.create("customers");
customerRegion.put("key1", "value1");
Thread.currentThread().interrupt();
customerRegion.put("key1", "value2");
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)