@Test public void testDisabledThresholds() throws Exception { final InternalResourceManager irm = this.cache.getResourceManager(); final OffHeapMemoryMonitor monitor = irm.getOffHeapMonitor(); final RegionFactory regionFactory = this.cache.createRegionFactory(RegionShortcut.LOCAL); regionFactory.setOffHeap(true); final EvictionAttributesImpl evictionAttrs = new EvictionAttributesImpl(); evictionAttrs.setAlgorithm(EvictionAlgorithm.NONE); regionFactory.setEvictionAttributes(evictionAttrs); final Region region = regionFactory.create("testDefaultThresholdsRegion"); TestMemoryThresholdListener listener = new TestMemoryThresholdListener(); irm.addResourceListener(ResourceType.OFFHEAP_MEMORY, listener); region.put("1", new Byte[550000]); region.put("2", new Byte[200000]); assertEquals(0, irm.getStats().getOffHeapEvictionStartEvents()); assertEquals(0, irm.getStats().getOffHeapEvictionStopEvents()); assertEquals(0, irm.getStats().getOffHeapCriticalEvents()); assertEquals(0, irm.getStats().getOffHeapSafeEvents()); assertEquals(0, listener.getEvictionThresholdCalls()); assertEquals(0, listener.getCriticalThresholdCalls()); // Enable eviction threshold and make sure event is generated monitor.setEvictionThreshold(50f); assertEquals(1, irm.getStats().getOffHeapEvictionStartEvents()); assertEquals(0, irm.getStats().getOffHeapCriticalEvents()); assertEquals(1, listener.getEvictionThresholdCalls()); assertEquals(0, listener.getCriticalThresholdCalls()); // Enable critical threshold and make sure event is generated region.put("3", new Byte[200000]); monitor.setCriticalThreshold(70f); assertEquals(1, irm.getStats().getOffHeapEvictionStartEvents()); assertEquals(1, irm.getStats().getOffHeapCriticalEvents()); assertEquals(2, listener.getEvictionThresholdCalls()); assertEquals(1, listener.getCriticalThresholdCalls()); // Disable thresholds and verify events monitor.setEvictionThreshold(0f); monitor.setCriticalThreshold(0f); assertEquals(1, irm.getStats().getOffHeapEvictionStartEvents()); assertEquals(1, irm.getStats().getOffHeapEvictionStopEvents()); assertEquals(1, irm.getStats().getOffHeapCriticalEvents()); assertEquals(1, irm.getStats().getOffHeapSafeEvents()); assertEquals(2, listener.getEvictionThresholdCalls()); assertEquals(2, listener.getCriticalThresholdCalls()); assertEquals(0, listener.getNormalCalls()); assertEquals(2, listener.getEvictionDisabledCalls()); assertEquals(2, listener.getCriticalDisabledCalls()); }
@Test public void testGeneratingEvents() throws Exception { InternalResourceManager internalManager = this.cache.getResourceManager(); OffHeapMemoryMonitor monitor = internalManager.getOffHeapMonitor(); monitor.setEvictionThreshold(50.0f); monitor.setCriticalThreshold(75.0f); monitor.stopMonitoring(true); assertEquals(524288, internalManager.getStats().getOffHeapEvictionThreshold()); assertEquals(786432, internalManager.getStats().getOffHeapCriticalThreshold()); // Register a bunch of listeners for (int i = 0; i < 10; i++) { ResourceListener listener = new TestMemoryThresholdListener(); internalManager.addResourceListener(ResourceType.OFFHEAP_MEMORY, listener); } assertEquals( 10 + SYSTEM_LISTENERS, internalManager.getResourceListeners(ResourceType.OFFHEAP_MEMORY).size()); // Start at normal setThenTestListenersAndStats(400000, 0, 0, 0, 0, 0, 0, 0); // Move to eviction setThenTestListenersAndStats(550000, 0, 1, 0, 0, 1, 0, 0); // Stay at eviction setThenTestListenersAndStats(560000, 0, 1, 0, 0, 1, 0, 0); // Move to critical setThenTestListenersAndStats(850000, 0, 1, 0, 1, 2, 1, 0); // Stay at critical (above critical clear margin) setThenTestListenersAndStats(786431, 0, 1, 0, 1, 2, 1, 0); setThenTestListenersAndStats(765465, 0, 1, 0, 1, 2, 1, 0); // Move to eviction setThenTestListenersAndStats(765454, 0, 1, 1, 1, 3, 1, 0); // Stay at eviction (above eviction clear margin) setThenTestListenersAndStats(524281, 0, 1, 1, 1, 3, 1, 0); setThenTestListenersAndStats(503321, 0, 1, 1, 1, 3, 1, 0); // Move to normal setThenTestListenersAndStats(503310, 1, 1, 1, 1, 3, 1, 1); // Disable eviction and verify normal event monitor.setEvictionThreshold(0f); setThenTestListenersAndStats(503315, 1, 1, 1, 1, 3, 1, 2); // Enable eviction verify normal event monitor.setEvictionThreshold(50f); setThenTestListenersAndStats(503315, 1, 1, 1, 1, 3, 1, 3); // Disable critical verify normal event monitor.setCriticalThreshold(0f); setThenTestListenersAndStats(503315, 1, 1, 1, 1, 3, 1, 4); // Enable critical verify normal event monitor.setCriticalThreshold(75f); setThenTestListenersAndStats(503315, 1, 1, 1, 1, 3, 1, 5); }