Author: mircea.markus
Date: 2009-01-08 18:18:44 -0500 (Thu, 08 Jan 2009)
New Revision: 7418
Modified:
core/trunk/src/test/java/org/jboss/cache/buddyreplication/Buddy3NodesNoPoolWithDataGravitationTest.java
Log:
more strict replication control
Modified:
core/trunk/src/test/java/org/jboss/cache/buddyreplication/Buddy3NodesNoPoolWithDataGravitationTest.java
===================================================================
---
core/trunk/src/test/java/org/jboss/cache/buddyreplication/Buddy3NodesNoPoolWithDataGravitationTest.java 2009-01-08
21:28:50 UTC (rev 7417)
+++
core/trunk/src/test/java/org/jboss/cache/buddyreplication/Buddy3NodesNoPoolWithDataGravitationTest.java 2009-01-08
23:18:44 UTC (rev 7418)
@@ -30,11 +30,18 @@
private String key = "key";
private String value = "value";
+ ReplicationListener replicationListener0;
+ ReplicationListener replicationListener1;
+ ReplicationListener replicationListener2;
@BeforeClass
public void createCaches() throws Exception
{
caches = createCaches(3, false, true);
+ replicationListener0 = ReplicationListener.getReplicationListener(caches.get(0));
+ replicationListener1 = ReplicationListener.getReplicationListener(caches.get(1));
+ replicationListener2 = ReplicationListener.getReplicationListener(caches.get(2));
+
}
public void testDataGravitationDontKillOwner() throws Exception
@@ -46,12 +53,8 @@
caches.get(0).put(fqn, key, value);
- TestingUtil.dumpCacheContents(caches);
-
assertEquals("Value should exist", value, caches.get(0).get(fqn, key));
- TestingUtil.dumpCacheContents(caches);
-
// use exists instead of get() to prevent going up the interceptor stack
assertTrue("Should be false", !caches.get(1).exists(fqn));
assertTrue("Should be false", !caches.get(2).exists(fqn));
@@ -60,15 +63,14 @@
assertTrue("Value be true", caches.get(1).exists(backupFqn));
assertFalse("Should be false", caches.get(2).exists(backupFqn));
- ReplicationListener replListener =
ReplicationListener.getReplicationListener(caches.get(1));
- replListener.expect(DataGravitationCleanupCommand.class);
+ replicationListener0.expect(DataGravitationCleanupCommand.class);
+ replicationListener1.expect(DataGravitationCleanupCommand.class);
// according to data gravitation, a call to *any* cache should retrieve the data,
and move the data to the new cache.
assertEquals("Value should have gravitated", value,
caches.get(2).get(fqn, key));
- replListener.waitForReplicationToOccur();
+ replicationListener0.waitForReplicationToOccur();
+ replicationListener1.waitForReplicationToOccur();
- TestingUtil.dumpCacheContents(caches);
-
// now lets test the eviction part of gravitation
Fqn newBackupFqn = fqnTransformer.getBackupFqn(caches.get(2).getLocalAddress(),
fqn);
@@ -88,17 +90,12 @@
}
-
public void testTransactionsCommit() throws Exception
{
-
-
caches.get(0).put(fqn, key, value);
Fqn oldBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE
+ "/" + fqnTransformer.getGroupNameFromAddress(caches.get(0).getLocalAddress())
+ "/test");
Fqn newBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE
+ "/" + fqnTransformer.getGroupNameFromAddress(caches.get(2).getLocalAddress())
+ "/test");
-// dumpCacheContents(caches);
-
TransactionManager txman = caches.get(2).getTransactionManager();
@@ -113,12 +110,12 @@
assertTrue(!caches.get(2).exists(newBackupFqn));
+ replicationListener0.expect(DataGravitationCleanupCommand.class);
+ replicationListener1.expect(DataGravitationCleanupCommand.class);
+
txman.begin();
-// dumpCacheContents(caches);
- // will cause gravitation
caches.get(2).get(fqn, key);
-// dumpCacheContents(caches);
assertTrue(caches.get(0).exists(fqn));
assertTrue(!caches.get(1).exists(fqn));
@@ -131,10 +128,9 @@
assertTrue(!caches.get(2).exists(newBackupFqn));
txman.commit();
- cleanupDelay(); // cleanup commands are async
-// dumpCacheContents(caches);
-
+ replicationListener0.waitForReplicationToOccur();
+ replicationListener1.waitForReplicationToOccur();
assertTrue(!caches.get(0).exists(fqn));
assertTrue(!caches.get(1).exists(fqn));
assertTrue(caches.get(2).exists(fqn));
@@ -145,16 +141,9 @@
assertTrue(!caches.get(1).exists(newBackupFqn));
assertTrue(!caches.get(2).exists(newBackupFqn));
-// dumpCacheContents(caches);
-
assertNoLocks(caches);
}
- private void cleanupDelay()
- {
- TestingUtil.sleepThread(250);
- }
-
public void testTransactionsRollback() throws Exception
{
TestingUtil.dumpCacheContents(caches.get(0));
@@ -165,8 +154,6 @@
Fqn oldBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE
+ "/" + fqnTransformer.getGroupNameFromAddress(caches.get(0).getLocalAddress())
+ "/test");
Fqn newBackupFqn = Fqn.fromString("/" + BuddyManager.BUDDY_BACKUP_SUBTREE
+ "/" + fqnTransformer.getGroupNameFromAddress(caches.get(2).getLocalAddress())
+ "/test");
-// dumpCacheContents(caches);
-
TransactionManager txman = caches.get(2).getTransactionManager();
@@ -183,9 +170,7 @@
txman.begin();
-// dumpCacheContents(caches);
caches.get(2).get(fqn, key);
-// dumpCacheContents(caches);
assertTrue(caches.get(0).exists(fqn));
assertTrue(!caches.get(1).exists(fqn));
@@ -199,8 +184,6 @@
txman.rollback();
-// dumpCacheContents(caches);
-
assertTrue(caches.get(0).exists(fqn));
assertTrue(!caches.get(1).exists(fqn));
assertTrue(!caches.get(2).exists(fqn));
@@ -243,10 +226,11 @@
assertNoLocks(caches);
// gravitate to 2:
- ReplicationListener replListener1 =
ReplicationListener.getReplicationListener(caches.get(0));
- replListener1.expect(DataGravitationCleanupCommand.class);
+ replicationListener0.expect(DataGravitationCleanupCommand.class);
+ replicationListener1.expect(DataGravitationCleanupCommand.class);
caches.get(2).getNode(fqn); // expectWithTx entire subtree to gravitate.
- replListener1.waitForReplicationToOccur(); // cleanup commands are async
+ replicationListener0.waitForReplicationToOccur();
+ replicationListener1.waitForReplicationToOccur();
Fqn newBackupFqn = fqnTransformer.getBackupFqn(caches.get(2).getLocalAddress(),
fqn);
Fqn newBackupFqn2 = fqnTransformer.getBackupFqn(caches.get(2).getLocalAddress(),
fqn2);
@@ -265,8 +249,6 @@
assertTrue(!caches.get(1).exists(newBackupFqn));
assertTrue(!caches.get(1).exists(newBackupFqn2));
- TestingUtil.dumpCacheContents(caches);
-
for (CacheSPI<Object, Object> cache : caches)
{
assertTrue(!cache.exists(backupFqn));
@@ -276,41 +258,6 @@
assertNoLocks(caches);
}
- private void testDataOwner(boolean optimistic) throws Exception
- {
- List<CacheSPI<Object, Object>> caches = createCaches(1, 2, false, true,
optimistic);
- cachesTL.set(caches);
-
- // add some stuff on the primary
- CacheSPI dataOwner = caches.get(0);
- CacheSPI buddy = caches.get(1);
-
- dataOwner.put(fqn, key, value);
-
- assert dataOwner.peek(fqn, false) != null : "Should have data";
- assert
dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null :
"Should have backup node for buddy";
- assert
dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null :
"Should NOT have backup node for self!";
-
- assert buddy.peek(fqn, false) == null : "Should not have data";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null :
"Should NOT have backup node for self!";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null :
"Should have backup node for buddy";
- assert buddy.peek(fqnTransformer.getBackupFqn(dataOwner.getLocalAddress(), fqn),
false) != null : "Should have backup data";
-
- // now do a gravitate call.
- assert buddy.get(fqn, key).equals(value) : "Data should have
gravitated!";
- // gravitation cleanup calls are async.
- cleanupDelay();
-
- assert buddy.peek(fqn, false) != null : "Should have data";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null :
"Should have backup node for buddy";
- assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) == null :
"Should NOT have backup node for self!";
-
- assert dataOwner.peek(fqn, false) == null : "Should not have data";
- assert
dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) == null :
"Should NOT have backup node for self!";
- assert
dataOwner.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null :
"Should have backup node for buddy";
- assert dataOwner.peek(fqnTransformer.getBackupFqn(buddy.getLocalAddress(), fqn),
false) != null : "Should have backup data";
- }
-
public void testStaleRegionOnDataOwner() throws Exception
{
// add some stuff on the primary
@@ -329,10 +276,11 @@
assert second.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(first.getLocalAddress())), false) != null :
"Should have backup node for second";
assert second.peek(fqnTransformer.getBackupFqn(first.getLocalAddress(), fqn),
false) != null : "Should have backup data";
+ replicationListener0.expect(DataGravitationCleanupCommand.class);
// now do a gravitate call.
assert second.get(fqn, key).equals(value) : "Data should have
gravitated!";
// gravitation cleanup calls are async.
- cleanupDelay();
+ replicationListener0.waitForReplicationToOccur();
assert second.peek(fqn, false) != null : "Should have data";
assert second.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(first.getLocalAddress())), false) != null :
"Should have backup node for second";
@@ -370,12 +318,13 @@
assert buddy.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(dataOwner.getLocalAddress())), false) != null :
"Should have backup node for buddy";
assert buddy.peek(fqnTransformer.getBackupFqn(dataOwner.getLocalAddress(), fqn),
false) != null : "Should have backup data";
+ replicationListener0.expect(DataGravitationCleanupCommand.class);
+ replicationListener1.expect(DataGravitationCleanupCommand.class);
// now do a gravitate call.
assert thirdInstance.get(fqn, key).equals(value) : "Data should have
gravitated!";
-
- // gravitation cleanup calls are async.
- TestingUtil.sleepThread(250);
-
+ replicationListener0.waitForReplicationToOccur();
+ replicationListener1.waitForReplicationToOccur();
+
assert thirdInstance.peek(fqn, false) != null : "Should have data";
assert
thirdInstance.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(buddy.getLocalAddress())), false) != null :
"Should have backup node for buddy";
assert
thirdInstance.peek(Fqn.fromRelativeElements(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN,
fqnTransformer.getGroupNameFromAddress(thirdInstance.getLocalAddress())), false) == null :
"Should NOT have backup node for self!";
@@ -454,8 +403,10 @@
}
}
}
-
- @Test (enabled = true, dependsOnMethods =
{"testConcurrency","testStaleRegionOnBuddy","testStaleRegionOnDataOwner",
"testDataGravitationDontKillOwner", "testTransactionsCommit",
"testTransactionsRollback", "testSubtreeRetrieval"})
+
+ @Test(enabled = true, dependsOnMethods = {"testConcurrency",
"testStaleRegionOnBuddy", "testStaleRegionOnDataOwner",
+ "testDataGravitationDontKillOwner",
"testTransactionsCommit", "testTransactionsRollback",
+ "testSubtreeRetrieval"})
public void testCompleteStateSurvival() throws Exception
{
CacheBlockListener blockListener = new CacheBlockListener();