@Test public void testGatewayTagBit() { assertEquals(false, vt.isGatewayTag()); vt.setIsGatewayTag(true); assertEquals(true, vt.isGatewayTag()); vt.setIsGatewayTag(false); assertEquals(false, vt.isGatewayTag()); }
tag1.setVersionTimeStamp(1); tag1.setDistributedSystemId(1); tag1.setIsGatewayTag(true); tag2.setIsGatewayTag(true);
@Test public void applyingGatewayEventsFromDifferentDSShouldAcceptBiggerTimestamp() { // create 2 gateway events: // tag1 with smaller distributed system ids (DSIDs) and bigger timestamp // tag2 with bigger DSID and smaller timestamp // set tag2 into stamp. Apply event with tag1 should pass // i.e. We compare timestamp first, then DSID GemFireCacheImpl cache = mock(GemFireCacheImpl.class); LocalRegion lr = mock(LocalRegion.class); String value = "value"; AbstractRegionEntry re = new TestableRegionEntry(lr, value); InternalDistributedMember member1 = mock(InternalDistributedMember.class); EntryEventImpl entryEvent1 = new EntryEventImpl(); entryEvent1.setRegion(lr); when(lr.getCache()).thenReturn(cache); when(cache.getGatewayConflictResolver()).thenReturn(null); VersionTag tag1 = VersionTag.create(member1); tag1.setVersionTimeStamp(2); tag1.setDistributedSystemId(1); tag1.setIsGatewayTag(true); VersionTag tag2 = VersionTag.create(member1); tag2.setVersionTimeStamp(1); tag2.setDistributedSystemId(2); tag2.setIsGatewayTag(true); ((TestableRegionEntry) re).setVersions(tag2); assertEquals(2, ((TestableRegionEntry) re).getDistributedSystemId()); // apply tag1 with bigger timestamp should pass entryEvent1.setVersionTag(tag1); re.processVersionTag(entryEvent1); }
tag1.setVersionTimeStamp(1); tag1.setDistributedSystemId(3); tag1.setIsGatewayTag(true); tag2.setIsGatewayTag(true);
@Test public void applyingGatewayEventsFromSmallerDSWithSameTimestampShouldThrowCMEIfNoResolver() { // create 2 gateway events with different distributed system ids (DSIDs), with same timestamp // set the one with bigger DSID into stamp. // Apply the one with smaller DSID show throw CME GemFireCacheImpl cache = mock(GemFireCacheImpl.class); LocalRegion lr = mock(LocalRegion.class); String value = "value"; AbstractRegionEntry re = new TestableRegionEntry(lr, value); InternalDistributedMember member1 = mock(InternalDistributedMember.class); EntryEventImpl entryEvent1 = new EntryEventImpl(); entryEvent1.setRegion(lr); when(lr.getCache()).thenReturn(cache); when(cache.getGatewayConflictResolver()).thenReturn(null); VersionTag tag1 = VersionTag.create(member1); tag1.setVersionTimeStamp(1); tag1.setDistributedSystemId(1); tag1.setIsGatewayTag(true); VersionTag tag2 = VersionTag.create(member1); tag2.setVersionTimeStamp(1); tag2.setDistributedSystemId(2); tag2.setIsGatewayTag(true); ((TestableRegionEntry) re).setVersions(tag2); assertEquals(2, ((TestableRegionEntry) re).getDistributedSystemId()); // apply tag1 with smaller timestamp should throw CME entryEvent1.setVersionTag(tag1); expectedException.expect(ConcurrentCacheModificationException.class); expectedException.expectMessage("conflicting WAN event detected"); re.processVersionTag(entryEvent1); }
@Test public void stampWithoutDSIDShouldAcceptAnyTag() { GemFireCacheImpl cache = mock(GemFireCacheImpl.class); LocalRegion lr = mock(LocalRegion.class); String value = "value"; AbstractRegionEntry re = new TestableRegionEntry(lr, value); InternalDistributedMember member1 = mock(InternalDistributedMember.class); EntryEventImpl entryEvent1 = new EntryEventImpl(); entryEvent1.setRegion(lr); when(lr.getCache()).thenReturn(cache); when(cache.getGatewayConflictResolver()).thenReturn(null); VersionTag tag1 = VersionTag.create(member1); tag1.setVersionTimeStamp(1); tag1.setDistributedSystemId(-1); tag1.setIsGatewayTag(true); VersionTag tag2 = VersionTag.create(member1); tag2.setVersionTimeStamp(2); tag2.setDistributedSystemId(2); tag2.setIsGatewayTag(true); ((TestableRegionEntry) re).setVersions(tag1); assertEquals(tag1.getVersionTimeStamp(), re.getVersionStamp().asVersionTag().getVersionTimeStamp()); assertEquals(-1, ((TestableRegionEntry) re).getDistributedSystemId()); // apply tag2 should be accepted entryEvent1.setVersionTag(tag2); re.processVersionTag(entryEvent1); }
@Test public void gatewayEventsFromSameDSInCorrectOrderOfTimestampShouldPass() { // create 2 gateway events with the same dsid, but different timestamp // apply them in correct order, it should pass GemFireCacheImpl cache = mock(GemFireCacheImpl.class); LocalRegion lr = mock(LocalRegion.class); String value = "value"; AbstractRegionEntry re = new TestableRegionEntry(lr, value); InternalDistributedMember member1 = mock(InternalDistributedMember.class); EntryEventImpl entryEvent1 = new EntryEventImpl(); entryEvent1.setRegion(lr); when(lr.getCache()).thenReturn(cache); when(cache.getGatewayConflictResolver()).thenReturn(null); VersionTag tag1 = VersionTag.create(member1); tag1.setVersionTimeStamp(1); tag1.setDistributedSystemId(3); tag1.setIsGatewayTag(true); VersionTag tag2 = VersionTag.create(member1); tag2.setVersionTimeStamp(2); tag2.setDistributedSystemId(3); tag2.setIsGatewayTag(true); ((TestableRegionEntry) re).setVersions(tag1); assertEquals(tag1.getVersionTimeStamp(), re.getVersionStamp().asVersionTag().getVersionTimeStamp()); assertEquals(3, ((TestableRegionEntry) re).getDistributedSystemId()); // apply tag2 should be accepted entryEvent1.setVersionTag(tag2); re.processVersionTag(entryEvent1); }
if (versionTimeStamp > 0) { VersionTag tag = VersionTag.create(region.getVersionMember()); tag.setIsGatewayTag(true); tag.setVersionTimeStamp(versionTimeStamp); tag.setDistributedSystemId(dsid); if (versionTimeStamp > 0) { VersionTag tag = VersionTag.create(region.getVersionMember()); tag.setIsGatewayTag(true); tag.setVersionTimeStamp(versionTimeStamp); tag.setDistributedSystemId(dsid); if (versionTimeStamp > 0) { VersionTag tag = VersionTag.create(region.getVersionMember()); tag.setIsGatewayTag(true); tag.setVersionTimeStamp(versionTimeStamp); tag.setDistributedSystemId(dsid); tag.setIsGatewayTag(true); tag.setVersionTimeStamp(versionTimeStamp); tag.setDistributedSystemId(dsid);