@Override public void initialCriticalMembers(boolean localMemoryIsCritical, Set<InternalDistributedMember> criticalMembers) { Set<InternalDistributedMember> others = getCacheDistributionAdvisor().adviseGeneric(); for (InternalDistributedMember idm : criticalMembers) { if (others.contains(idm)) { addCriticalMember(idm); } } }
@Test public void testThatMemoryThresholdInfoRelectsStateOfRegion() { InternalDistributedMember internalDM = mock(InternalDistributedMember.class); DistributedRegion distRegion = prepare(true, false); distRegion.addCriticalMember(internalDM); MemoryThresholdInfo info = distRegion.getAtomicThresholdInfo(); assertThat(distRegion.isMemoryThresholdReached()).isTrue(); assertThat(distRegion.getAtomicThresholdInfo().getMembersThatReachedThreshold()) .containsExactly(internalDM); assertThat(info.isMemoryThresholdReached()).isTrue(); assertThat(info.getMembersThatReachedThreshold()).containsExactly(internalDM); }
@Test public void testThatMemoryThresholdInfoDoesNotChangeWhenRegionChanges() { InternalDistributedMember internalDM = mock(InternalDistributedMember.class); DistributedRegion distRegion = prepare(true, false); MemoryThresholdInfo info = distRegion.getAtomicThresholdInfo(); distRegion.addCriticalMember(internalDM); assertThat(distRegion.isMemoryThresholdReached()).isTrue(); assertThat(distRegion.getAtomicThresholdInfo().getMembersThatReachedThreshold()) .containsExactly(internalDM); assertThat(info.isMemoryThresholdReached()).isFalse(); assertThat(info.getMembersThatReachedThreshold()).isEmpty(); }
@Override protected void setMemoryThresholdFlag(MemoryEvent event) { Set<InternalDistributedMember> others = getCacheDistributionAdvisor().adviseGeneric(); if (event.isLocal() || others.contains(event.getMember())) { if (event.getState().isCritical() && !event.getPreviousState().isCritical() && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { addCriticalMember(event.getMember()); } else if (!event.getState().isCritical() && event.getPreviousState().isCritical() && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { removeCriticalMember(event.getMember()); } } }