CDS: Fix intermittent DistributedDataStoreRemotingIntegrationTest failure 84/26784/2
authorTom Pantelis <tpanteli@brocade.com>
Thu, 10 Sep 2015 17:24:01 +0000 (13:24 -0400)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 10 Sep 2015 19:47:59 +0000 (19:47 +0000)
I've seen the testReadyLocalTransactionForwardedToLeader test fail
several times both locally and in jenkins:

DistributedDataStoreRemotingIntegrationTest.testReadyLocalTransactionForwardedToLeader:535
assertion failed: expected class
org.opendaylight.controller.protobuff.messages.cohort3pc.ThreePhaseCommitCohortMessages$CommitTransactionReply, found class akka.actor.Status$Failure

It's a timing issue where the follower may not yet have the leader.
After this patch the test ran 100 times w/o failure.

Change-Id: I542a7e87516e8d1f846cda6e2abc4d473e3de961
Signed-off-by: Tom Pantelis <tpanteli@brocade.com>
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java

index 90600f952926de70e615377d7a97c61b9a9ec2eb..c29cc4eea14888a05bca5e51121e0286f31723ce 100644 (file)
@@ -514,6 +514,7 @@ public class DistributedDataStoreRemotingIntegrationTest {
     @Test
     public void testReadyLocalTransactionForwardedToLeader() throws Exception {
         initDatastores("testReadyLocalTransactionForwardedToLeader");
     @Test
     public void testReadyLocalTransactionForwardedToLeader() throws Exception {
         initDatastores("testReadyLocalTransactionForwardedToLeader");
+        followerTestKit.waitUntilLeader(followerDistributedDataStore.getActorContext(), "cars");
 
         Optional<ActorRef> carsFollowerShard = followerDistributedDataStore.getActorContext().findLocalShard("cars");
         assertEquals("Cars follower shard found", true, carsFollowerShard.isPresent());
 
         Optional<ActorRef> carsFollowerShard = followerDistributedDataStore.getActorContext().findLocalShard("cars");
         assertEquals("Cars follower shard found", true, carsFollowerShard.isPresent());
@@ -532,7 +533,13 @@ public class DistributedDataStoreRemotingIntegrationTest {
         ReadyLocalTransaction readyLocal = new ReadyLocalTransaction(transactionID , modification, true);
 
         carsFollowerShard.get().tell(readyLocal, followerTestKit.getRef());
         ReadyLocalTransaction readyLocal = new ReadyLocalTransaction(transactionID , modification, true);
 
         carsFollowerShard.get().tell(readyLocal, followerTestKit.getRef());
-        followerTestKit.expectMsgClass(CommitTransactionReply.SERIALIZABLE_CLASS);
+        Object resp = followerTestKit.expectMsgClass(Object.class);
+        if(resp instanceof akka.actor.Status.Failure) {
+            throw new AssertionError("Unexpected failure response", ((akka.actor.Status.Failure)resp).cause());
+        }
+
+        assertTrue("Expected response of type " + CommitTransactionReply.SERIALIZABLE_CLASS,
+                CommitTransactionReply.SERIALIZABLE_CLASS.equals(resp.getClass()));
 
         verifyCars(leaderDistributedDataStore.newReadOnlyTransaction(), car);
     }
 
         verifyCars(leaderDistributedDataStore.newReadOnlyTransaction(), car);
     }