/** * 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; }
/** * Retrieve a vector that can be sent to another member. This clones all * of the version information to protect against concurrent modification * during serialization */ public RegionVersionVector<T> getCloneForTransmission() { Map<T,RegionVersionHolder<T>> liveHolders; liveHolders = new HashMap<T,RegionVersionHolder<T>>(this.memberToVersion); ConcurrentHashMap<T, RegionVersionHolder<T>> clonedHolders = new ConcurrentHashMap<T, RegionVersionHolder<T>>( liveHolders.size(), LOAD_FACTOR, CONCURRENCY_LEVEL); for (Map.Entry<T, RegionVersionHolder<T>> entry: liveHolders.entrySet()) { clonedHolders.put(entry.getKey(), entry.getValue().clone()); } ConcurrentHashMap<T, Long> gcVersions = new ConcurrentHashMap<T, Long>( this.memberToGCVersion.size(), LOAD_FACTOR, CONCURRENCY_LEVEL); gcVersions.putAll(this.memberToGCVersion); RegionVersionHolder<T> clonedLocalHolder; clonedLocalHolder = this.localExceptions.clone(); //Make sure the holder that we send to the peer does //have an accurate RegionVersionHolder for our local version return createCopy(this.myId, clonedHolders, this.localVersion.get(), gcVersions, this.localGCVersion.get(), false, clonedLocalHolder); }
/** * Retrieve a vector that can be used as a SnapShot information. * Basically we need low cost copy of memberToVersion and localVersion. * Also calling method should synchronize on cache level lock * if it wants consistent view of snapshot across cache */ public RegionVersionVector<T> getCloneForTransmission() { Map<T,RegionVersionHolder<T>> liveHolders; // we need to take a lock? so that memberToVersion is not modifed as we copy them // Find out liveHolders = ObjectObjectHashMap.from(this.memberToVersion); ConcurrentHashMap<T, RegionVersionHolder<T>> clonedHolders = new ConcurrentHashMap<T, RegionVersionHolder<T>>(liveHolders.size(), LOAD_FACTOR, CONCURRENCY_LEVEL); for (Map.Entry<T, RegionVersionHolder<T>> entry: liveHolders.entrySet()) { clonedHolders.put(entry.getKey(), entry.getValue().clone()); } ConcurrentHashMap<T, Long> gcVersions = new ConcurrentHashMap<T, Long>( this.memberToGCVersion.size(), LOAD_FACTOR, CONCURRENCY_LEVEL); gcVersions.putAll(this.memberToGCVersion); RegionVersionHolder<T> clonedLocalHolder; clonedLocalHolder = this.localExceptions.clone(); //Make sure the holder that we send to the peer does //have an accurate RegionVersionHolder for our local version return createCopy(this.myId, clonedHolders, this.localVersion.get(), gcVersions, this.localGCVersion.get(), false, clonedLocalHolder); }
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();
public RegionVersionVector<T> getReinitializedSnapshotRVV() { LogWriterI18n logger = getLoggerI18n(); ConcurrentHashMap<T, RegionVersionHolder<T>> copySnapshot = new ConcurrentHashMap<T, RegionVersionHolder<T>>(memberToVersion); if (DEBUG && logger != null) { logger.info(LocalizedStrings.DEBUG, "reInitializing the snapshot rvv, current: " + copySnapshot + " with : " + memberToGCVersion); } // update the snapshot with local version too RegionVersionHolder holder = localExceptions.clone(); holder.id = myId; holder.version = localVersion.get(); copySnapshot.put(myId, holder); return createCopy(this.myId, copySnapshot, this.localVersion.get(), getMemberToGCVersionTest(), this.localGCVersion.get(), false, holder); }
/** * 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();
HashMap<DiskStoreID, RegionVersionHolder<DiskStoreID>> getAllMemberToVersion(RegionVersionVector rvv) { HashMap<DiskStoreID, RegionVersionHolder<DiskStoreID>> allMemberToVersion = new HashMap(rvv.getMemberToVersion()); RegionVersionHolder localHolder = rvv.getLocalExceptions().clone(); localHolder.setVersion(rvv.getCurrentVersion()); allMemberToVersion.put((DiskStoreID)rvv.getOwnerId(), localHolder); return allMemberToVersion; }
RegionVersionHolder vh2 = vh1.clone(); System.out.println("vh2" + vh1.clone()); vh3.recordVersion(i, null); System.out.println("vh3=" + vh3.clone()); System.out.println("after init, vh2=" + vh2.clone() + vh2.contains(2000)); System.out.println("after init, vh2=" + vh2 + " " + vh2.clone() + vh2.contains(1095) + " " + vh2.contains(1096)); vh2 = vh2.clone(); vh2.recordVersion(1096, null); System.out.println("after init, vh2=" + vh2 + " " + vh2.clone()); System.out.println("after init, vh2=" + vh2.clone()); System.out.println("after init, vh2=" + vh2.clone());
public void test1() { RegionVersionHolder vh1 = new RegionVersionHolder(member); vh1.recordVersion(15, null); RegionVersionHolder vh2 = vh1.clone(); System.out.println("after init, vh2="+vh2.clone()); assertTrue(vh2.contains(9)); RegionVersionHolder vh4 = vh2.clone(); vh2.recordVersion(12, null); vh4.recordVersion(12, null); System.out.println("after init, vh2="+vh2.clone()); System.out.println("after init, vh4="+vh4); System.out.println("after init, vh4="+vh4.clone()); vh4 = vh2.clone(); vh2.recordVersion(18, null); vh4.recordVersion(18, null); System.out.println("after init, vh2="+vh2.clone()); System.out.println("after init, vh4="+vh4); System.out.println("after init, vh4="+vh4.clone());
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); } }
/** * 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 = ObjectObjectHashMap.from(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)); }
/** * 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(); ObjectObjectHashMap<T, RegionVersionHolder<T>> results = ObjectObjectHashMap.from(memberToVersion); results.put(getOwnerId(), myExceptions); return results; }
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(); h.id = mbr; this.memberToVersion.put(mbr, h); } else { RegionVersionHolder<T> vh = otherHolder; long version = vh.version; updateLocalVersion(version); this.localExceptions.initializeFrom(vh); } } else { if (mbr.equals(this.myId)) { RegionVersionHolder<T> vh = otherHolder; long version = vh.version; updateLocalVersion(version); } // holders must be modified under synchronization h.initializeFrom(otherHolder); } }
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); } } } }
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)); }
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)); }
RegionVersionHolder vh2 = vh1.clone(); System.out.println("after clone, vh2="+vh2);