@Override protected RegionVersionVector<DiskStoreID> createCopy(DiskStoreID ownerId, ConcurrentHashMap<DiskStoreID, RegionVersionHolder<DiskStoreID>> vector, long version, ConcurrentHashMap<DiskStoreID, Long> gcVersions, long gcVersion, boolean singleMember, RegionVersionHolder<DiskStoreID> localExceptions) { return new DiskRegionVersionVector(ownerId, vector, version, gcVersions, gcVersion, singleMember, localExceptions); }
public static RegionVersionVector<?> create(VersionSource<?> versionMember, LocalRegion owner) { if (versionMember instanceof DiskStoreID) { return new DiskRegionVersionVector((DiskStoreID) versionMember, owner); } else { return new VMRegionVersionVector((InternalDistributedMember) versionMember, owner); } }
public void resetRVV() { this.versionVector = new DiskRegionVersionVector(ds.getDiskStoreID()); }
public static RegionVersionVector<?> create(boolean persistent, DataInput in) throws IOException, ClassNotFoundException { RegionVersionVector<?> rvv; if (persistent) { rvv = new DiskRegionVersionVector(); } else { rvv = new VMRegionVersionVector(); } InternalDataSerializer.invokeFromData(rvv, in); return rvv; }
protected AbstractDiskRegion(DiskStoreImpl ds, long id) { this.ds = ds; this.id = id; this.flags = EnumSet.noneOf(DiskRegionFlag.class); this.onlineMembers = new CopyOnWriteHashSet<PersistentMemberID>(); this.offlineMembers = new CopyOnWriteHashSet<PersistentMemberID>(); this.equalMembers = new CopyOnWriteHashSet<PersistentMemberID>(); this.isRecreated = true; this.backup = true; this.versionVector = new DiskRegionVersionVector(ds.getDiskStoreID()); this.numOverflowOnDisk = new AtomicLong(); this.numEntriesInVM = new AtomicLong(); this.numOverflowBytesOnDisk = new AtomicLong(); // We do not initialize the soplog set here. The soplog set needs // to be handled the complete set of recovered soplogs, which is not available // at the time a recovered disk region is first created. }
@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); }
@Test public void recordVersionIntoLocalMemberShouldFailIfRegionIsPersistent() { LocalRegion mockRegion = mock(LocalRegion.class); when(mockRegion.isInitialized()).thenReturn(true); when(mockRegion.getDataPolicy()).thenReturn(DataPolicy.PERSISTENT_REPLICATE); final String local = getIPLiteral(); DiskStoreID ownerId = new DiskStoreID(); DiskRegionVersionVector rvv = new DiskRegionVersionVector(ownerId, mockRegion); DiskVersionTag tag = new DiskVersionTag(); tag.setRegionVersion(1L); tag.setMemberID(ownerId); expectedException.expect(InternalGemFireError.class); rvv.recordVersion(ownerId, tag); }
@Test public void testExceptionsWithContains() { DiskStoreID ownerId = new DiskStoreID(0, 0); DiskStoreID id1 = new DiskStoreID(0, 1); DiskStoreID id2 = new DiskStoreID(1, 0); DiskRegionVersionVector rvv = new DiskRegionVersionVector(ownerId); doExceptionsWithContains(ownerId, rvv); doExceptionsWithContains(id1, rvv); }
@Test public void test48066_1() { DiskStoreID id0 = new DiskStoreID(0, 0); DiskRegionVersionVector rvv0 = new DiskRegionVersionVector(id0); for (int i = 1; i <= 3; i++) { rvv0.recordVersion(id0, i); } System.out.println("rvv0=" + rvv0.fullToString()); DiskRegionVersionVector rvv1 = (DiskRegionVersionVector) rvv0.getCloneForTransmission(); System.out.println("after clone, rvv1=" + rvv1.fullToString()); DiskRegionVersionVector rvv2 = new DiskRegionVersionVector(id0); for (int i = 1; i <= 10; i++) { rvv2.recordVersion(id0, i); } rvv2.recordVersions(rvv1); System.out.println("after init, rvv2=" + rvv2.fullToString()); rvv2.recordVersion(id0, 4); System.out.println("after record 4, rvv2=" + rvv2.fullToString()); assertEquals(4, rvv2.getCurrentVersion()); rvv2.recordVersion(id0, 7); System.out.println("after record 7, rvv2=" + rvv2.fullToString()); assertEquals(7, rvv2.getCurrentVersion()); }
@Test public void test48066_2() { DiskStoreID id0 = new DiskStoreID(0, 0); DiskRegionVersionVector rvv0 = new DiskRegionVersionVector(id0); for (int i = 1; i <= 10; i++) { rvv0.recordVersion(id0, i); } DiskRegionVersionVector rvv1 = new DiskRegionVersionVector(id0); rvv0.recordVersions(rvv1); System.out.println("rvv0=" + rvv0.fullToString()); rvv0.recordVersion(id0, 4); System.out.println("after record 4, rvv0=" + rvv0.fullToString()); assertEquals(4, rvv0.getCurrentVersion()); rvv0.recordVersion(id0, 7); System.out.println("after record 7, rvv0=" + rvv0.fullToString()); assertEquals(7, rvv0.getCurrentVersion()); assertFalse(rvv0.contains(id0, 5)); DiskRegionVersionVector rvv2 = (DiskRegionVersionVector) rvv0.getCloneForTransmission(); System.out.println("after clone, rvv2=" + rvv2.fullToString()); assertEquals(11, rvv0.getNextVersion()); assertFalse(rvv2.contains(id0, 5)); assertEquals(11, rvv2.getNextVersion()); }
@Test public void testSpecialException() { DiskStoreID id0 = new DiskStoreID(0, 0); DiskStoreID id1 = new DiskStoreID(0, 1); DiskStoreID id2 = new DiskStoreID(1, 0); DiskRegionVersionVector rvv0 = new DiskRegionVersionVector(id0); rvv0.getNextVersion(); rvv0.getNextVersion(); rvv0.getNextVersion(); rvv0.recordVersion(id1, 1); rvv0.recordVersion(id1, 2); DiskRegionVersionVector rvv1 = new DiskRegionVersionVector(id1); rvv1.recordVersions(rvv0); rvv1.recordVersion(id1, 3); RegionVersionHolder holder_at_rvv1 = rvv1.getLocalExceptions(); RegionVersionHolder holder_at_rvv0 = rvv0.getMemberToVersion().get(id1); holder_at_rvv1.addException(2, 4); assertFalse(rvv1.isNewerThanOrCanFillExceptionsFor(rvv0)); assertFalse(rvv0.isNewerThanOrCanFillExceptionsFor(rvv1)); assertTrue(rvv1.dominates(rvv0)); assertTrue(rvv0.dominates(rvv1)); }
DiskStoreID id1 = new DiskStoreID(0, 1); DiskRegionVersionVector rvv0 = new DiskRegionVersionVector(id0);
@Test public void testRVVSerialization() throws Exception { DiskStoreID ownerId = new DiskStoreID(0, 0); DiskStoreID id1 = new DiskStoreID(0, 1); DiskStoreID id2 = new DiskStoreID(1, 0); DiskRegionVersionVector rvv = new DiskRegionVersionVector(ownerId); rvv.recordVersion(id1, 5); rvv.recordVersion(id1, 6); rvv.recordVersion(id1, 7); rvv.recordVersion(id1, 9); rvv.recordVersion(id1, 20); rvv.recordVersion(id1, 11); rvv.recordVersion(id1, 12); rvv.recordGCVersion(id2, 5); rvv.recordGCVersion(id1, 3); assertTrue(rvv.sameAs(rvv.getCloneForTransmission())); HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT); DataSerializer.writeObject(rvv.getCloneForTransmission(), out); byte[] bytes = out.toByteArray(); DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes)); DiskRegionVersionVector rvv2 = DataSerializer.readObject(dis); assertTrue(rvv.sameAs(rvv2)); }
this.equalMembers = new CopyOnWriteHashSet<PersistentMemberID>(); this.isRecreated = false; this.versionVector = new DiskRegionVersionVector(ds.getDiskStoreID()); this.numOverflowOnDisk = new AtomicLong(); this.numEntriesInVM = new AtomicLong();
/** * Test that we can copy the member to version map correctly. */ @Test public void testCopyMemberToVersion() { DiskStoreID id0 = new DiskStoreID(0, 0); DiskStoreID id1 = new DiskStoreID(0, 1); DiskStoreID id2 = new DiskStoreID(1, 0); DiskRegionVersionVector rvv0 = new DiskRegionVersionVector(id0); rvv0.getNextVersion(); rvv0.getNextVersion(); rvv0.getNextVersion(); rvv0.recordVersion(id1, 1); rvv0.recordVersion(id1, 3); DiskRegionVersionVector rvv1 = new DiskRegionVersionVector(id1); rvv1.recordVersions(rvv0); assertEquals(3, rvv1.getCurrentVersion()); assertFalse(rvv1.contains(id1, 2)); assertTrue(rvv1.contains(id1, 1)); assertTrue(rvv1.contains(id1, 3)); assertTrue(rvv1.contains(id0, 3)); assertTrue(rvv0.sameAs(rvv1)); rvv1.recordVersion(id1, 2); assertTrue(rvv1.isNewerThanOrCanFillExceptionsFor(rvv0)); assertFalse(rvv0.isNewerThanOrCanFillExceptionsFor(rvv1)); assertTrue(rvv1.dominates(rvv0)); assertFalse(rvv0.dominates(rvv1)); }
DiskStoreID id2 = new DiskStoreID(0, 2); DiskRegionVersionVector rvv = new DiskRegionVersionVector(id0);