public boolean goWithFullGII(DistributedRegion rgn, RegionVersionVector requesterRVV) { if (getSender().getVersionObject().compareTo(Version.GFE_80) < 0) { // pre-8.0 could not handle a delta-GII return true; } if (!rgn.getDataPolicy().withPersistence()) { // non-persistent regions always do full GII if (logger.isDebugEnabled()) { logger.debug("Region {} is not a persistent region, do full GII", rgn.getFullPath()); } return true; } if (!rgn.getVersionVector().isRVVGCDominatedBy(requesterRVV)) { if (logger.isDebugEnabled()) { logger.debug("Region {}'s local RVVGC is not dominated by remote RVV={}, do full GII", rgn.getFullPath(), requesterRVV); } return true; } return false; }
@Test public void isRvvGcDominatedByRequesterRvvReturnsTrueIfRequesterRvvForLostMemberDominates() throws Exception { InternalDistributedMember lostMember = mock(InternalDistributedMember.class); ConcurrentHashMap<InternalDistributedMember, Long> memberToGcVersion = new ConcurrentHashMap<>(); memberToGcVersion.put(lostMember, new Long(1) /* lostMemberGcVersion */); RegionVersionVector providerRvv = new VMRegionVersionVector(lostMember, null, 0, memberToGcVersion, 0, true, null); ConcurrentHashMap<InternalDistributedMember, RegionVersionHolder<InternalDistributedMember>> memberToRegionVersionHolder = new ConcurrentHashMap<>(); RegionVersionHolder regionVersionHolder = new RegionVersionHolder(lostMember); regionVersionHolder.setVersion(2); memberToRegionVersionHolder.put(lostMember, regionVersionHolder); RegionVersionVector requesterRvv = new VMRegionVersionVector(lostMember, memberToRegionVersionHolder, 0, null, 0, true, null); assertThat(providerRvv.isRVVGCDominatedBy(requesterRvv)).isTrue(); }
@Test public void isRvvGcDominatedByRequesterRvvReturnsFalseIfRequesterRvvForLostMemberDominates() throws Exception { InternalDistributedMember lostMember = mock(InternalDistributedMember.class); ConcurrentHashMap<InternalDistributedMember, Long> memberToGcVersion = new ConcurrentHashMap<>(); memberToGcVersion.put(lostMember, new Long(1) /* lostMemberGcVersion */); RegionVersionVector providerRvv = new VMRegionVersionVector(lostMember, null, 0, memberToGcVersion, 0, true, null); ConcurrentHashMap<InternalDistributedMember, RegionVersionHolder<InternalDistributedMember>> memberToRegionVersionHolder = new ConcurrentHashMap<>(); RegionVersionHolder regionVersionHolder = new RegionVersionHolder(lostMember); regionVersionHolder.setVersion(0); memberToRegionVersionHolder.put(lostMember, regionVersionHolder); RegionVersionVector requesterRvv = new VMRegionVersionVector(lostMember, memberToRegionVersionHolder, 0, null, 0, true, null); assertThat(providerRvv.isRVVGCDominatedBy(requesterRvv)).isFalse(); }
@Test public void isRvvGcDominatedByRequesterRvvReturnsTrueIfRequesterRvvDominates() throws Exception { final String local = getIPLiteral(); InternalDistributedMember provider = new InternalDistributedMember(local, 101); InternalDistributedMember requester = new InternalDistributedMember(local, 102); ConcurrentHashMap<InternalDistributedMember, Long> memberToGcVersion = new ConcurrentHashMap<>(); memberToGcVersion.put(requester, new Long(1)); RegionVersionVector providerRvv = new VMRegionVersionVector(provider, null, 1, memberToGcVersion, 1, false, null); ConcurrentHashMap<InternalDistributedMember, RegionVersionHolder<InternalDistributedMember>> memberToRegionVersionHolder = new ConcurrentHashMap<>(); RegionVersionHolder regionVersionHolder = new RegionVersionHolder(provider); regionVersionHolder.setVersion(2); memberToRegionVersionHolder.put(provider, regionVersionHolder); RegionVersionVector requesterRvv = new VMRegionVersionVector(requester, memberToRegionVersionHolder, 2, null, 0, false, regionVersionHolder); assertThat(providerRvv.isRVVGCDominatedBy(requesterRvv)).isTrue(); }
@Test public void isRvvGcDominatedByRequesterRvvReturnsTrueIfRequesterRvvDominatesWithNoGcVersion() throws Exception { final String local = getIPLiteral(); InternalDistributedMember provider = new InternalDistributedMember(local, 101); InternalDistributedMember requester = new InternalDistributedMember(local, 102); ConcurrentHashMap<InternalDistributedMember, Long> memberToGcVersion = new ConcurrentHashMap<>(); RegionVersionVector providerRvv = new VMRegionVersionVector(provider, null, 1, memberToGcVersion, 1, false, null); ConcurrentHashMap<InternalDistributedMember, RegionVersionHolder<InternalDistributedMember>> memberToRegionVersionHolder = new ConcurrentHashMap<>(); RegionVersionHolder regionVersionHolder = new RegionVersionHolder(provider); regionVersionHolder.setVersion(2); memberToRegionVersionHolder.put(provider, regionVersionHolder); RegionVersionVector requesterRvv = new VMRegionVersionVector(requester, memberToRegionVersionHolder, 0, null, 0, false, null); assertThat(providerRvv.isRVVGCDominatedBy(requesterRvv)).isTrue(); }
@Test public void isRvvGcDominatedByRequesterRvvReturnsFalseIfRequesterRvvDominates() throws Exception { final String local = getIPLiteral(); InternalDistributedMember provider = new InternalDistributedMember(local, 101); InternalDistributedMember requester = new InternalDistributedMember(local, 102); ConcurrentHashMap<InternalDistributedMember, Long> memberToGcVersion = new ConcurrentHashMap<>(); memberToGcVersion.put(requester, new Long(3)); RegionVersionHolder pRegionVersionHolder = new RegionVersionHolder(provider); pRegionVersionHolder.setVersion(4); RegionVersionVector providerRvv = new VMRegionVersionVector(provider, null, 1, memberToGcVersion, 1, false, pRegionVersionHolder); ConcurrentHashMap<InternalDistributedMember, RegionVersionHolder<InternalDistributedMember>> memberToRegionVersionHolder = new ConcurrentHashMap<>(); RegionVersionHolder regionVersionHolder = new RegionVersionHolder(provider); regionVersionHolder.setVersion(2); memberToRegionVersionHolder.put(provider, regionVersionHolder); RegionVersionVector requesterRvv = new VMRegionVersionVector(requester, memberToRegionVersionHolder, 2, null, 0, false, regionVersionHolder); assertThat(providerRvv.isRVVGCDominatedBy(requesterRvv)).isFalse(); }
@Test public void isRvvGcDominatedByRequesterRvvReturnsFalseIfRequesterRvvDominatesProvider() throws Exception { final String local = getIPLiteral(); InternalDistributedMember provider = new InternalDistributedMember(local, 101); InternalDistributedMember requester = new InternalDistributedMember(local, 102); RegionVersionVector providerRvv = new VMRegionVersionVector(provider, null, 1, null, 1, false, null); ConcurrentHashMap<InternalDistributedMember, RegionVersionHolder<InternalDistributedMember>> memberToRegionVersionHolder = new ConcurrentHashMap<>(); RegionVersionHolder regionVersionHolder = new RegionVersionHolder(provider); regionVersionHolder.setVersion(0); memberToRegionVersionHolder.put(provider, regionVersionHolder); RegionVersionVector requesterRvv = new VMRegionVersionVector(requester, memberToRegionVersionHolder, 0, null, 0, false, null); assertThat(providerRvv.isRVVGCDominatedBy(requesterRvv)).isFalse(); }
@Test public void isRvvGcDominatedByRequesterRvvReturnsFalseIfProviderRvvIsNotPresent() throws Exception { final String local = getIPLiteral(); InternalDistributedMember provider = new InternalDistributedMember(local, 101); InternalDistributedMember requester = new InternalDistributedMember(local, 102); RegionVersionVector providerRvv = new VMRegionVersionVector(provider, null, 1, null, 1, false, null); ConcurrentHashMap<InternalDistributedMember, RegionVersionHolder<InternalDistributedMember>> memberToRegionVersionHolder = new ConcurrentHashMap<>(); RegionVersionHolder regionVersionHolder = new RegionVersionHolder(provider); regionVersionHolder.setVersion(0); // memberToRegionVersionHolder.put(provider, regionVersionHolder); RegionVersionVector requesterRvv = new VMRegionVersionVector(requester, memberToRegionVersionHolder, 0, null, 0, false, null); assertThat(providerRvv.isRVVGCDominatedBy(requesterRvv)).isFalse(); }