in geode-core/src/integrationTest/java/org/apache/geode/TXJUnitTest.java [4136:4345]
protected void checkSubRegionCollection(Region<String, String> reg1) {
AttributesFactory<String, String> attributesFactory = new AttributesFactory<>();
attributesFactory.setScope(Scope.DISTRIBUTED_NO_ACK);
Region<String, String> sub1 =
region.createSubregion("collectionSub1", attributesFactory.create());
attributesFactory = new AttributesFactory<>();
Region<String, String> sub2 =
region.createSubregion("collectionSub2", attributesFactory.create());
attributesFactory = new AttributesFactory<>();
attributesFactory.setScope(Scope.LOCAL);
Region<String, String> sub2_1 =
sub2.createSubregion("collectionSub2_1", attributesFactory.create());
checkCollectionSize(0);
try {
region.keySet().iterator().next();
fail();
} catch (NoSuchElementException expected) {
assertNull(expected.getMessage());
}
try {
region.values().iterator().next();
fail();
} catch (NoSuchElementException expected) {
assertNull(expected.getMessage());
}
try {
region.entrySet().iterator().next();
fail();
} catch (NoSuchElementException expected) {
assertNull(expected.getMessage());
}
reg1.create("key1", "value1");
checkCollectionSize(1);
{
Iterator it = region.keySet().iterator();
it.next();
try {
it.next();
fail();
} catch (NoSuchElementException expected) {
assertNull(expected.getMessage());
}
}
{
Iterator it = region.values().iterator();
it.next();
try {
it.next();
fail();
} catch (NoSuchElementException expected) {
assertNull(expected.getMessage());
}
}
{
Iterator it = region.entrySet().iterator();
it.next();
try {
it.next();
fail();
} catch (NoSuchElementException expected) {
assertNull(expected.getMessage());
}
}
reg1.create("key2", "value2");
checkCollectionSize(2);
reg1.localInvalidate("key2");
checkCollectionSize(2, 2, 1);
reg1.localInvalidate("key1");
checkCollectionSize(2, 2, 0);
reg1.localDestroy("key2");
checkCollectionSize(1, 1, 0);
reg1.localDestroy("key1");
checkCollectionSize(0);
// Non-TX recursive checks
sub2_1.create("key6", "value6");
checkCollectionSize(0, 1);
assertEquals(0, sub2.entrySet(false).size());
assertEquals(1, sub2.entrySet(true).size());
assertEquals(1, sub2_1.entrySet(true).size());
sub2.create("key5", "value5");
checkCollectionSize(0, 2);
assertEquals(1, sub2.entrySet(false).size());
assertEquals(2, sub2.entrySet(true).size());
sub1.create("key4", "value4");
checkCollectionSize(0, 3);
assertEquals(1, sub1.entrySet(false).size());
assertEquals(1, sub1.entrySet(true).size());
reg1.put("key1", "value1");
checkCollectionSize(1, 4);
sub2.localDestroy("key5");
checkCollectionSize(1, 3);
assertEquals(0, sub2.entrySet(false).size());
assertEquals(1, sub2.entrySet(true).size());
assertEquals(1, sub2_1.entrySet(false).size());
assertEquals(1, sub2_1.entrySet(true).size());
sub2_1.localDestroy("key6");
checkCollectionSize(1, 2);
assertEquals(0, sub2.entrySet(false).size());
assertEquals(0, sub2.entrySet(true).size());
assertEquals(0, sub2_1.entrySet(false).size());
sub1.localDestroy("key4");
checkCollectionSize(1, 1);
assertEquals(0, sub1.entrySet(false).size());
assertEquals(0, sub1.entrySet(true).size());
reg1.create("key3", "value3");
sub1.create("key4", "value4");
sub2.create("key5", "value5");
sub2_1.create("key6", "value6");
checkCollectionSize(2, 5);
txMgr.begin();
region.create("key2", "value2");
checkCollectionSize(3, 6);
reg1.localDestroy("key2");
checkCollectionSize(2, 5);
region.create("key2", "value2");
checkCollectionSize(3, 6);
reg1.destroy("key2");
checkCollectionSize(2, 5);
reg1.put("key1", "value2");
checkCollectionSize(2, 5);
region.create("key2", "value2");
checkCollectionSize(3, 6);
reg1.localDestroy("key3");
checkCollectionSize(2, 5);
reg1.create("key3", "value3");
checkCollectionSize(3, 6);
// TX recursive checks
sub2.destroy("key5");
checkCollectionSize(3, 5);
assertEquals(1, sub1.entrySet(false).size());
assertEquals(1, sub1.entrySet(true).size());
assertEquals(0, sub2.entrySet(false).size());
assertEquals(1, sub2.entrySet(true).size());
assertEquals(1, sub2_1.entrySet(false).size());
assertEquals(1, sub2_1.entrySet(true).size());
sub2_1.destroy("key6");
checkCollectionSize(3, 4);
assertEquals(1, sub1.entrySet(false).size());
assertEquals(1, sub1.entrySet(true).size());
assertEquals(0, sub2.entrySet(false).size());
assertEquals(0, sub2.entrySet(true).size());
assertEquals(0, sub2_1.entrySet(false).size());
assertEquals(0, sub2_1.entrySet(true).size());
sub1.localDestroy("key4");
checkCollectionSize(3, 3);
assertEquals(0, sub1.entrySet(false).size());
assertEquals(0, sub1.entrySet(true).size());
assertEquals(0, sub2.entrySet(false).size());
assertEquals(0, sub2.entrySet(true).size());
assertEquals(0, sub2_1.entrySet(false).size());
assertEquals(0, sub2_1.entrySet(true).size());
sub2.put("key5", "value5");
checkCollectionSize(3, 4);
assertEquals(0, sub1.entrySet(false).size());
assertEquals(0, sub1.entrySet(true).size());
assertEquals(1, sub2.entrySet(false).size());
assertEquals(1, sub2.entrySet(true).size());
assertEquals(0, sub2_1.entrySet(false).size());
assertEquals(0, sub2_1.entrySet(true).size());
sub2_1.put("key6", "value6");
checkCollectionSize(3, 5);
assertEquals(0, sub1.entrySet(false).size());
assertEquals(0, sub1.entrySet(true).size());
assertEquals(1, sub2.entrySet(false).size());
assertEquals(2, sub2.entrySet(true).size());
assertEquals(1, sub2_1.entrySet(false).size());
assertEquals(1, sub2_1.entrySet(true).size());
sub1.put("key4", "value4");
checkCollectionSize(3, 6);
assertEquals(1, sub1.entrySet(false).size());
assertEquals(1, sub1.entrySet(true).size());
assertEquals(1, sub2.entrySet(false).size());
assertEquals(2, sub2.entrySet(true).size());
assertEquals(1, sub2_1.entrySet(false).size());
assertEquals(1, sub2_1.entrySet(true).size());
sub2_1.put("key7", "value7");
checkCollectionSize(3, 7);
assertEquals(1, sub1.entrySet(false).size());
assertEquals(1, sub1.entrySet(true).size());
assertEquals(1, sub2.entrySet(false).size());
assertEquals(3, sub2.entrySet(true).size());
assertEquals(2, sub2_1.entrySet(false).size());
assertEquals(2, sub2_1.entrySet(true).size());
txMgr.rollback();
checkCollectionSize(2, 5);
// disabling these in a TX because they throw and don't work now!
// this.txMgr.begin();
sub2.destroyRegion();
checkCollectionSize(2, 3);
sub1.destroyRegion();
checkCollectionSize(2);
reg1.localDestroy("key1");
reg1.localDestroy("key3");
checkCollectionSize(0);
}