public void testSimpleOutOfOffHeapMemoryMemberDisconnects() { final DistributedSystem system = getSystem(); final Cache cache = getCache(); final DistributionManager dm = (DistributionManager) ((InternalDistributedSystem) system).getDistributionManager(); Region<Object, Object> region = cache.createRegionFactory(getRegionShortcut()).setOffHeap(true).create(getRegionName()); OutOfOffHeapMemoryException ooohme; try { Object value = new byte[1024]; for (int i = 0; true; i++) { region.put("key-" + i, value); } } catch (OutOfOffHeapMemoryException e) { ooohme = e; } assertNotNull(ooohme); with() .pollInterval(100, TimeUnit.MILLISECONDS) .await() .atMost(10, TimeUnit.SECONDS) .until(() -> cache.isClosed() && !system.isConnected() && dm.isClosed()); // wait for cache instance to be nulled out with() .pollInterval(100, TimeUnit.MILLISECONDS) .await() .atMost(10, TimeUnit.SECONDS) .until( () -> GemFireCacheImpl.getInstance() == null && InternalDistributedSystem.getAnyInstance() == null); assertNull(GemFireCacheImpl.getInstance()); // verify system was closed out due to OutOfOffHeapMemoryException assertFalse(system.isConnected()); InternalDistributedSystem ids = (InternalDistributedSystem) system; try { ids.getDistributionManager(); fail( "InternalDistributedSystem.getDistributionManager() should throw DistributedSystemDisconnectedException"); } catch (DistributedSystemDisconnectedException expected) { assertRootCause(expected, OutOfOffHeapMemoryException.class); } // verify dm was closed out due to OutOfOffHeapMemoryException assertTrue(dm.isClosed()); try { dm.throwIfDistributionStopped(); fail( "DistributionManager.throwIfDistributionStopped() should throw DistributedSystemDisconnectedException"); } catch (DistributedSystemDisconnectedException expected) { assertRootCause(expected, OutOfOffHeapMemoryException.class); } // verify cache was closed out due to OutOfOffHeapMemoryException assertTrue(cache.isClosed()); try { cache.getCancelCriterion().checkCancelInProgress(null); fail( "GemFireCacheImpl.getCancelCriterion().checkCancelInProgress should throw DistributedSystemDisconnectedException"); } catch (DistributedSystemDisconnectedException expected) { assertRootCause(expected, OutOfOffHeapMemoryException.class); } }