You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Barry Oglesby (JIRA)" <ji...@apache.org> on 2017/09/28 19:52:00 UTC

[jira] [Created] (GEODE-3718) The InternalResourceManager fails to shutdown if a redundancy recovery task is scheduled but hasn't fired yet

Barry Oglesby created GEODE-3718:
------------------------------------

             Summary: The InternalResourceManager fails to shutdown if a redundancy recovery task is scheduled but hasn't fired yet
                 Key: GEODE-3718
                 URL: https://issues.apache.org/jira/browse/GEODE-3718
             Project: Geode
          Issue Type: Bug
          Components: core
            Reporter: Barry Oglesby


This happens with recovery-delay or startup-recovery-delay > 0.

The thread gets stuck here:
{noformat}
"Thread-20" #133 prio=10 os_prio=31 tid=0x00007fa85b886000 nid=0x890b waiting on condition [0x000070001269e000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007bc408900> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
	at java.util.concurrent.ThreadPoolExecutor.awaitTermination(ThreadPoolExecutor.java:1465)
	at org.apache.geode.internal.cache.control.InternalResourceManager.stopExecutor(InternalResourceManager.java:375)
	at org.apache.geode.internal.cache.control.InternalResourceManager.close(InternalResourceManager.java:187)
	at org.apache.geode.internal.cache.GemFireCacheImpl.close(GemFireCacheImpl.java:2161)
	- locked <0x00000007bc0bc520> (a java.lang.Class for org.apache.geode.internal.cache.GemFireCacheImpl)
	at org.apache.geode.distributed.internal.InternalDistributedSystem.disconnect(InternalDistributedSystem.java:1367)
	- locked <0x00000007bc0bc520> (a java.lang.Class for org.apache.geode.internal.cache.GemFireCacheImpl)
	at org.apache.geode.distributed.internal.InternalDistributedSystem.disconnect(InternalDistributedSystem.java:1017)
	at org.apache.geode.management.internal.beans.MemberMBeanBridge$1.run(MemberMBeanBridge.java:986)
	at java.lang.Thread.run(Thread.java:745)
{noformat}

The InternalResourceManager is waiting for the termination of its scheduledExecutor.

The PRHARedundancyProvider initializes its recoveryExecutor using the InternalResourceManager's scheduledExecutor:
{noformat}
recoveryExecutor = new OneTaskOnlyExecutor(resourceManager.getExecutor(),
  new OneTaskOnlyExecutor.ConflatedTaskListener() {
    public void taskDropped() {
      InternalResourceManager.getResourceObserver().recoveryConflated(region);
    }
  });
{noformat}
The scheduleRedundancyRecovery method schedules a RecoveryRunnable if necessary.

If that task hasn't fired yet, the InternalResourceManager doesn't close, and the JVM stays up.




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)