/** * return the current version for this member */ public long getCurrentVersion() { synchronized (localExceptions) { syncLocalVersion(); return localExceptions.getVersion(); } }
/** * get the last recorded region version number for the given member */ public long getVersionForMember(T mbr) { RegionVersionHolder<T> holder = this.memberToVersion.get(mbr); if (holder == null) { if (mbr.equals(myId)) { return getCurrentVersion(); } else { return 0; } } else { return holder.getVersion(); } }
/** * returns true if this version holder has seen the given version number */ synchronized boolean contains(long v) { if (v > getVersion()) { return false; } else { if (this.bitSet != null && v >= this.bitSetVersion) { return this.bitSet.get((int) (v - this.bitSetVersion)); } if (this.exceptions == null) { return true; } for (Iterator<RVVException> it = this.exceptions.iterator(); it.hasNext();) { RVVException e = it.next(); if (e.nextVersion <= v) { return true; // there is no RVVException for this version } if (e.previousVersion < v) { return e.contains(v); } } return true; } }
private void createSpecialException(RegionVersionHolder h) { h.addException(h.getVersion() - 1, h.getVersion() + 1); }
if (getVersion() != other.getVersion()) { return false;
@Override public void cmnClearRegion(long drId, ConcurrentHashMap<DiskStoreID, RegionVersionHolder<DiskStoreID>> memberToVersion) { DiskRegionView drv = getDiskRegionById(drId); if (drv.getClearRVV() == null) { this.ifLiveRecordCount++; } // otherwise previous clear is cancelled so don't change liveRecordCount this.ifTotalRecordCount++; DiskStoreID ownerId = parent.getDiskStoreID(); // Create a fake RVV for clear purposes. We only need to memberToVersion information RegionVersionHolder<DiskStoreID> ownerExceptions = memberToVersion.remove(ownerId); long ownerVersion = ownerExceptions == null ? 0 : ownerExceptions.getVersion(); RegionVersionVector rvv = new DiskRegionVersionVector(ownerId, memberToVersion, ownerVersion, new ConcurrentHashMap(), 0L, false, ownerExceptions); drv.setClearRVV(rvv); }
if (source == null || getVersion() > source.getVersion()) { return true;
@Test public void test48066_1() { RegionVersionHolder vh1 = new RegionVersionHolder(member); for (int i = 1; i <= 3; i++) { vh1.recordVersion(i); } System.out.println("vh1=" + vh1); RegionVersionHolder vh2 = vh1.clone(); System.out.println("after clone, vh2=" + vh2); { RegionVersionHolder vh3 = new RegionVersionHolder(member); for (int i = 1; i <= 10; i++) { vh3.recordVersion(i); } // create special exception 10(3-11), bitsetVerson=3 vh3.initializeFrom(vh2); System.out.println("after init, vh3=" + vh3); assertEquals(3, vh3.getVersion()); // to make bsv3,bs=[0,1] vh3.recordVersion(4); System.out.println("after record 4, vh3="); assertEquals(4, vh3.getVersion()); vh3.recordVersion(7); System.out.println("after record 7, vh3=" + vh3); assertEquals(7, vh3.getVersion()); } }
private void recordZeroDoesNothing(boolean useBitSet) { RegionVersionHolder h = createHolder(useBitSet); h.recordVersion(0l); assertEquals(0, h.getExceptionCount()); assertEquals(0l, h.getVersion()); }
private void skippedVersionCreatesException(boolean useBitSet) { RegionVersionHolder h = createHolder(useBitSet); h.recordVersion(2l); assertEquals(1, h.getExceptionCount()); assertEquals(2l, h.getVersion()); }
vh2.initializeFrom(vh1); assertEquals("RVV=" + vh2, 100, vh2.getVersion()); assertEquals(100, vh2.getVersion()); compareWithBitSet(bs1, vh2); assertEquals(100, vh4.getVersion()); compareWithBitSet(bs1, vh4);
private void fillLargeException(boolean useBitSet) { RegionVersionHolder h = createHolder(useBitSet); long bigVersion = RegionVersionHolder.BIT_SET_WIDTH + 1; h.recordVersion(bigVersion); for (long i = 0l; i < bigVersion; i++) { h.recordVersion(i); } assertEquals("expected no exceptions in " + h, 0, h.getExceptionCount()); assertEquals(bigVersion, h.getVersion()); }
private void recordSequentialVersions(boolean useBitSet) { RegionVersionHolder h = createHolder(useBitSet); h.recordVersion(1l); h.recordVersion(2l); h.recordVersion(3l); assertEquals(0, h.getExceptionCount()); assertEquals(3l, h.getVersion()); }
private void fillException(boolean useBitSet) { RegionVersionHolder h = createHolder(useBitSet); h.recordVersion(3l); h.recordVersion(1l); h.recordVersion(2l); h.recordVersion(2l); assertEquals(0, h.getExceptionCount()); assertEquals(3l, h.getVersion()); }
@Test public void testReceiveDuplicateAfterBitSetFlushWithBitSet() { RegionVersionHolder h = createHolder(true); long bigVersion = RegionVersionHolder.BIT_SET_WIDTH + 1; h.recordVersion(bigVersion); for (long i = 0l; i < bigVersion; i++) { h.recordVersion(i); } h.recordVersion(bigVersion); assertEquals("expected no exceptions in " + h, 0, h.getExceptionCount()); assertEquals(bigVersion, h.getVersion()); }
System.out.println("clone: \t\t" + clone); assertTrue("Expected a version greater than 7746 but got this: " + clone, clone.getVersion() >= 7746);