public void testInitialized() { RegionVersionHolder vh1 = new RegionVersionHolder(member); vh1.recordVersion(56, null); vh1.recordVersion(57, null); vh1.recordVersion(58, null); vh1.recordVersion(59, null); vh1.recordVersion(60, null); vh1 = vh1.clone(); System.out.println("This node init, vh1="+vh1); RegionVersionHolder vh2 = new RegionVersionHolder(member); for(int i=1;i<57;i++) { vh2.recordVersion(i,null); } vh2 = vh2.clone(); System.out.println("GII node init, vh2="+vh2); vh1.initializeFrom(vh2); vh1 = vh1.clone(); System.out.println("After initialize, vh1="+vh1); //vh1.recordVersion(57,null); vh1.recordVersion(58,null); vh1.recordVersion(59,null); vh1.recordVersion(60,null); System.out.println("After initialize and record version, vh1="+vh1); vh1 = vh1.clone(); vh1.recordVersion(57,null); System.out.println("After initialize and record version after clone, vh1="+vh1); assertTrue(vh1.contains(58)); }
if (this.bitSet == null) { if (this.version < version-1) { this.addException(this.version, version); if (RegionVersionVector.DEBUG && logger != null) { logger.info(LocalizedStrings.DEBUG, "added rvv exception e{rv" + this.version + " - rv" + version + "}"); sp = this.getSpecialException(); this.addOlderVersion(version, logger); this.flushBitSetDuringRecording(version, logger); this.addOlderVersion(version, logger); } else { sp = this.getSpecialException(); if (sp != null) { this.addOlderVersion(version, logger); removeSpecialException(); this.bitSet.set((int)(version - this.bitSetVersion)); sp = this.getSpecialException(); if (sp != null) { removeSpecialException(); this.addOlderVersion(version, logger);
mergeBitSet(); if (getVersion() != other.getVersion()) { return false; RegionVersionHolder<T> vh1 = this.clone(); RegionVersionHolder<T> vh2 = other.clone(); vh1.removeSpecialException(); vh2.removeSpecialException(); if (vh1.exceptions == null || vh1.exceptions.isEmpty()) { if (vh2.exceptions != null && !vh2.exceptions.isEmpty()) { List<RVVException> e1 = canonicalExceptions(vh1.exceptions); List<RVVException> e2 = canonicalExceptions(vh2.exceptions); Iterator<RVVException> it1 = e1.iterator(); Iterator<RVVException> it2 = e2.iterator();
public void testInitialize3() { RegionVersionHolder vh1 = new RegionVersionHolder(member); for(int i=0;i<=1074; i++) { vh1.recordVersion(i, null); } RegionVersionHolder vh2 = new RegionVersionHolder(member); vh2.recordVersion(1075,null); vh1.makeReadyForRecording(); vh2.initializeFrom(vh1.clone()); vh2.makeReadyForRecording(); vh2.recordVersion(1075,null); System.out.println("vh1" + vh2.clone()); // vh2.recordVersion(1098, null); // // System.out.println("vh1" + vh2.clone()); // System.out.println(vh2.contains(1097)); }
private boolean isGCVersionDominatedByHolder(Long gcVersion, RegionVersionHolder<T>otherHolder) { if (gcVersion == null || gcVersion.longValue() == 0) { return true; } else { RegionVersionHolder<T> holder = new RegionVersionHolder<T>(gcVersion.longValue()); return !holder.isNewerThanOrCanFillExceptionsFor(otherHolder); } }
public void test48066() { RegionVersionHolder vh = new RegionVersionHolder(member); BitSet bs = new BitSet(); bs.set(0, 8679); vh.initializeFrom(new RegionVersionHolder(0)); System.out.println("init from:\t" +vh); vh.recordVersion(1,null); vh.recordVersion(2,null); vh.recordVersion(14,null); vh.recordVersion(62,null); vh.recordVersion(95,null); vh.recordVersion(96,null); vh.recordVersion(97,null); vh.recordVersion(98,null); vh.recordVersion(99,null); vh.recordVersion(100,null); vh.recordVersion(123,null); vh.recordVersion(144,null); vh.recordVersion(146,null); vh.recordVersion(147,null); vh.recordVersion(148,null); vh.recordVersion(149,null); vh.recordVersion(150,null); vh.recordVersion(151,null); vh.recordVersion(152,null); vh.recordVersion(153,null); vh.recordVersion(154,null); vh.recordVersion(155,null); vh.recordVersion(156,null);
RegionVersionHolder vh2 = new RegionVersionHolder(member); vh2.initializeFrom(vh1); assertEquals("RVV=" + vh2, 100, vh2.getVersion()); vh2.initializeFrom(vh1); assertEquals(100, vh2.getVersion()); compareWithBitSet(bs1, vh2); RegionVersionHolder vh4 = vh2.clone(); assertEquals(105, vh4.version); assertEquals(100, vh4.getVersion()); compareWithBitSet(bs1, vh4); vh1.addException(100,106); assertTrue(vh2.sameAs(vh1)); compareWithBitSet(bs2, vh2); validateExceptions(vh2);
if (source == null || getVersion() > source.getVersion()) { return true; RegionVersionHolder<T> other = source.clone(); mergeBitSet(); // dump the bit-set exceptions into the regular exceptions list other.mergeBitSet(); List<RVVException> mine = canonicalExceptions(this.exceptions); Iterator<RVVException> myIterator = mine.iterator(); List<RVVException> his = canonicalExceptions(other.exceptions); Iterator<RVVException> otherIterator = his.iterator(); || isSpecialException(otherException, other)) { otherException = otherIterator.hasNext()? otherIterator.next() : null; return true; if (isSpecialException(myException, this)) { if (isSpecialException(otherException, other)) {
public void initializeVersionHolder(T mbr, RegionVersionHolder<T> otherHolder) { RegionVersionHolder<T> h = this.memberToVersion.get(mbr); if (h == null) { if (!mbr.equals(this.myId)) { h = otherHolder.clone(); h.makeReadyForRecording(); this.memberToVersion.put(mbr, h); } else { RegionVersionHolder<T> vh = otherHolder; long version = vh.version; updateLocalVersion(version); this.localExceptions.initializeFrom(vh); } } else { // holders must be modified under synchronization h.initializeFrom(otherHolder); } }
/** create a live version vector for a region */ public RegionVersionVector(T ownerId, LocalRegion owner) { this.myId = ownerId; this.isLiveVector = true; this.regionName = owner == null? "" : "region " + owner.getFullPath(); this.localExceptions = new RegionVersionHolder<T>(0); this.memberToVersion = new ConcurrentHashMap<T, RegionVersionHolder<T>>(INITIAL_CAPACITY, LOAD_FACTOR, CONCURRENCY_LEVEL); this.memberToGCVersion = new ConcurrentHashMap<T, Long> (INITIAL_CAPACITY, LOAD_FACTOR, CONCURRENCY_LEVEL); }
if (holder == null) { mbr = getCanonicalId(mbr); holder = new RegionVersionHolder<T>(mbr); memberToVersion.put(holder.id, holder); holder.recordVersion(version, logger); this.memberToVersion.get(member).contains(version));
RegionVersionHolder vh1 = new RegionVersionHolder(member); RegionVersionHolder vh2 = new RegionVersionHolder(member); assertEquals("vector is incorrect on item "+ i,!exceptions.contains(i), vh1.contains(i)); vh2.initializeFrom(vh1); assertEquals("vector is incorrect on item "+ i,!exceptions.contains(i), vh2.contains(i));
/** * Retrieve a vector that can be sent to another member. This clones only * the version information for the given ID.<p> * The clone returned by this method does not have distributed garbage-collection * information. */ public RegionVersionVector<T> getCloneForTransmission(T mbr) { Map<T,RegionVersionHolder<T>> liveHolders; liveHolders = new HashMap<T, RegionVersionHolder<T>>(this.memberToVersion); RegionVersionHolder<T> holder = liveHolders.get(mbr); if (holder == null) { holder = new RegionVersionHolder<T>(-1); } else { holder = holder.clone(); } return createCopy( this.myId, new ConcurrentHashMap<T, RegionVersionHolder<T>>(Collections.singletonMap(mbr, holder)), 0, new ConcurrentHashMap<T, Long>(INITIAL_CAPACITY, LOAD_FACTOR, CONCURRENCY_LEVEL), 0, true, new RegionVersionHolder<T>(-1)); }
justification="sync on localExceptions guards concurrent modification but this is a replacement") public void initRecoveredVersion(T member, RegionVersionHolder<T> v, boolean latestOplog) { RegionVersionHolder<T> recovered = v.clone(); recovered.removeExceptionsOlderThan(gcVersion);
/** * Get a map of the member to the version and exception list for that member, * including the local member. */ public Map<T, RegionVersionHolder<T>> getMemberToVersion() { RegionVersionHolder<T> myExceptions; myExceptions = this.localExceptions.clone(); HashMap<T, RegionVersionHolder<T>> results = new HashMap<T, RegionVersionHolder<T>>(memberToVersion); results.put(getOwnerId(), myExceptions); return results; }
@Override public synchronized RegionVersionHolder<T> clone() { RegionVersionHolder<T> clone = new RegionVersionHolder<T>(this.version); clone.id = this.id; clone.isDepartedMember = this.isDepartedMember; clone.exceptions = new LinkedList<RVVException>(); for (RVVException e: this.exceptions) { if(isSpecialException(e,this)){ hasSpecialEx = true; clone.bitSet = (BitSet)this.bitSet.clone(); clone.bitSetVersion = this.bitSetVersion; clone.mergeBitSet();
/** * return the current version for this member */ public long getCurrentVersion() { synchronized(localExceptions) { syncLocalVersion(); return localExceptions.getVersion(); } }
mergeBitSet(); RegionVersionHolder<T> other = source.clone(); other.mergeBitSet();
RegionVersionHolder rvh = rgn.getVersionVector().getHolderForMember(this.lostMemberVersionID); if (rvh != null) { holderToSync = rvh.clone(); if (holderToSync.isNewerThanOrCanFillExceptionsFor(holderOfRequest)) { logger.trace(LogMarker.GII, "synchronizeWith detected mismatch region version holder for lost member {}. Old is {}, new is {}", lostMemberVersionID, holderOfRequest, holderToSync);
public void reInitializeSnapshotRvv() { final GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); if (cache != null && cache.snapshotEnabled()) { synchronized (this.memberToVersionSnapshot) { LogWriterI18n logger = getLoggerI18n(); if (DEBUG && logger != null) { logger.info(LocalizedStrings.DEBUG, "reInitializing the snapshot rvv, current: " + this.memberToVersionSnapshot + " with : " + memberToVersion + " localVersion " + getCurrentVersion() + " localException " + this.localExceptions); } for (Map.Entry<T, RegionVersionHolder<T>> entry : this.memberToVersion.entrySet()) { RegionVersionHolder holder = entry.getValue().clone(); holder.makeReadyForRecording(); holder.id = entry.getValue().id; this.memberToVersionSnapshot.put(entry.getKey(), holder); } // update the snapshot with local version too RegionVersionHolder holder = localExceptions.clone(); holder.makeReadyForRecording(); holder.id = myId; holder.version = getCurrentVersion(); this.memberToVersionSnapshot.put(myId, holder); if (DEBUG && logger != null) { logger.info(LocalizedStrings.DEBUG, "after reInitializing the snapshot : " + this.memberToVersionSnapshot); } } } }