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>
@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());
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);
}