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)

Reply via email to