// it does do a persist)
return new Shard(newShardBuilder()) {
@Override
- public void onReceiveCommand(final Object message) throws Exception {
+ public void handleCommand(final Object message) {
if(message instanceof ElectionTimeout && firstElectionTimeout) {
// Got the first ElectionTimeout. We don't forward it to the
// base Shard yet until we've sent the RegisterChangeListener
onFirstElectionTimeout.countDown();
} else {
- super.onReceiveCommand(message);
+ super.handleCommand(message);
}
}
};
}
};
+ setupInMemorySnapshotStore();
+
final MockDataChangeListener listener = new MockDataChangeListener(1);
final ActorRef dclActor = actorFactory.createActor(DataChangeListener.props(listener),
"testRegisterChangeListenerWhenNotLeaderInitially-DataChangeListener");
Props.create(new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()),
"testRegisterChangeListenerWhenNotLeaderInitially");
- // Write initial data into the in-memory store.
final YangInstanceIdentifier path = TestModel.TEST_PATH;
- writeToStore(shard, path, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
// Wait until the shard receives the first ElectionTimeout message.
assertEquals("Got first ElectionTimeout", true,
@Override
public Shard create() throws Exception {
- return new Shard(Shard.builder().id(shardID).datastoreContext(
- dataStoreContextBuilder.persistent(false).build()).schemaContext(SCHEMA_CONTEXT)) {
+ return new Shard(newShardBuilder()) {
@Override
- public void onReceiveCommand(final Object message) throws Exception {
+ public void handleCommand(final Object message) {
if(message instanceof ElectionTimeout && firstElectionTimeout) {
firstElectionTimeout = false;
final ActorRef self = getSelf();
onFirstElectionTimeout.countDown();
} else {
- super.onReceiveCommand(message);
+ super.handleCommand(message);
}
}
};
}
};
+ setupInMemorySnapshotStore();
+
final MockDataTreeChangeListener listener = new MockDataTreeChangeListener(1);
final ActorRef dclActor = actorFactory.createActor(DataTreeChangeListenerActor.props(listener),
"testDataTreeChangeListenerNotifiedWhenNotTheLeaderOnRegistration-DataChangeListener");
"testDataTreeChangeListenerNotifiedWhenNotTheLeaderOnRegistration");
final YangInstanceIdentifier path = TestModel.TEST_PATH;
- writeToStore(shard, path, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
assertEquals("Got first ElectionTimeout", true,
onFirstElectionTimeout.await(5, TimeUnit.SECONDS));
expectMsgClass(duration("5 seconds"), FindLeaderReply.class);
assertFalse("Expected the shard not to be the leader", findLeadeReply.getLeaderActor().isPresent());
- writeToStore(shard, path, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
onChangeListenerRegistered.countDown();
}
@Test
- public void testReadyWithImmediateCommit() throws Exception{
+ public void testReadyWithReadWriteImmediateCommit() throws Exception{
testReadyWithImmediateCommit(true);
+ }
+
+ @Test
+ public void testReadyWithWriteOnlyImmediateCommit() throws Exception{
testReadyWithImmediateCommit(false);
}
}
@Test
- public void testCommitWithPersistenceDisabled() throws Throwable {
+ public void testReadWriteCommitWithPersistenceDisabled() throws Throwable {
+ testCommitWithPersistenceDisabled(true);
+ }
+
+ @Test
+ public void testWriteOnlyCommitWithPersistenceDisabled() throws Throwable {
testCommitWithPersistenceDisabled(true);
- testCommitWithPersistenceDisabled(false);
}
private void testCommitWithPersistenceDisabled(final boolean readWrite) throws Throwable {
}
@Test
- public void testCommitWhenTransactionHasNoModifications() {
+ public void testReadWriteCommitWhenTransactionHasNoModifications() {
testCommitWhenTransactionHasNoModifications(true);
+ }
+
+ @Test
+ public void testWriteOnlyCommitWhenTransactionHasNoModifications() {
testCommitWhenTransactionHasNoModifications(false);
}
}
@Test
- public void testCommitWhenTransactionHasModifications() {
+ public void testReadWriteCommitWhenTransactionHasModifications() {
testCommitWhenTransactionHasModifications(true);
+ }
+
+ @Test
+ public void testWriteOnlyCommitWhenTransactionHasModifications() {
testCommitWhenTransactionHasModifications(false);
}
final ShardDataTreeCohort cohort1 = mock(ShardDataTreeCohort.class, "cohort1");
doReturn(Futures.immediateFuture(Boolean.TRUE)).when(cohort1).canCommit();
doReturn(Futures.immediateFuture(null)).when(cohort1).preCommit();
- doReturn(Futures.immediateFailedFuture(new IllegalStateException("mock"))).when(cohort1).commit();
+ doReturn(Futures.immediateFailedFuture(new RuntimeException("mock"))).when(cohort1).commit();
doReturn(mockCandidate("cohort1-candidate")).when(cohort1).getCandidate();
final String transactionID2 = "tx2";
public Shard create() throws Exception {
return new Shard(newShardBuilder()) {
@Override
- public void onReceiveCommand(final Object message) throws Exception {
- super.onReceiveCommand(message);
- if(message.equals(TX_COMMIT_TIMEOUT_CHECK_MESSAGE)) {
+ public void handleCommand(final Object message) {
+ super.handleCommand(message);
+ if(TX_COMMIT_TIMEOUT_CHECK_MESSAGE.equals(message)) {
if(cleaupCheckLatch.get() != null) {
cleaupCheckLatch.get().countDown();
}
public void handleCommand(final Object message) {
super.handleCommand(message);
- if (message instanceof SaveSnapshotSuccess || message.equals("commit_snapshot")) {
+ // XXX: commit_snapshot equality check references RaftActorSnapshotMessageSupport.COMMIT_SNAPSHOT
+ if (message instanceof SaveSnapshotSuccess || "commit_snapshot".equals(message.toString())) {
latch.get().countDown();
}
}
newShardProps().withDispatcher(Dispatchers.DefaultDispatcherId()),
"testFollowerInitialSyncStatus");
- shard.underlyingActor().onReceiveCommand(new FollowerInitialSyncUpStatus(false, "member-1-shard-inventory-operational"));
+ shard.underlyingActor().handleNonRaftCommand(new FollowerInitialSyncUpStatus(false, "member-1-shard-inventory-operational"));
assertEquals(false, shard.underlyingActor().getShardMBean().getFollowerInitialSyncStatus());
- shard.underlyingActor().onReceiveCommand(new FollowerInitialSyncUpStatus(true, "member-1-shard-inventory-operational"));
+ shard.underlyingActor().handleNonRaftCommand(new FollowerInitialSyncUpStatus(true, "member-1-shard-inventory-operational"));
assertEquals(true, shard.underlyingActor().getShardMBean().getFollowerInitialSyncStatus());
}
public void testClusteredDataChangeListenerDelayedRegistration() throws Exception {
new ShardTestKit(getSystem()) {{
String testName = "testClusteredDataChangeListenerDelayedRegistration";
- dataStoreContextBuilder.shardElectionTimeoutFactor(1000);
+ dataStoreContextBuilder.shardElectionTimeoutFactor(1000).
+ customRaftPolicyImplementation(DisableElectionsRaftPolicy.class.getName());
final MockDataChangeListener listener = new MockDataChangeListener(1);
final ActorRef dclActor = actorFactory.createActor(DataChangeListener.props(listener),
actorFactory.generateActorId(testName + "-DataChangeListener"));
+ setupInMemorySnapshotStore();
+
final TestActorRef<Shard> shard = actorFactory.createTestActor(
newShardBuilder().props().withDispatcher(Dispatchers.DefaultDispatcherId()),
actorFactory.generateActorId(testName + "-shard"));
RegisterChangeListenerReply.class);
assertNotNull("getListenerRegistrationPath", reply.getListenerRegistrationPath());
- writeToStore(shard, path, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
-
- shard.tell(new ElectionTimeout(), ActorRef.noSender());
+ shard.tell(DatastoreContext.newBuilderFrom(dataStoreContextBuilder.build()).
+ customRaftPolicyImplementation(null).build(), ActorRef.noSender());
listener.waitForChangeEvents();
}};
"akka://test/user/" + followerShardID.toString())).schemaContext(SCHEMA_CONTEXT).props().
withDispatcher(Dispatchers.DefaultDispatcherId()), leaderShardID.toString());
- leaderShard.tell(new ElectionTimeout(), ActorRef.noSender());
+ leaderShard.tell(ElectionTimeout.INSTANCE, ActorRef.noSender());
String leaderPath = waitUntilLeader(followerShard);
assertEquals("Shard leader path", leaderShard.path().toString(), leaderPath);
public void testClusteredDataTreeChangeListenerDelayedRegistration() throws Exception {
new ShardTestKit(getSystem()) {{
String testName = "testClusteredDataTreeChangeListenerDelayedRegistration";
- dataStoreContextBuilder.shardElectionTimeoutFactor(1000);
+ dataStoreContextBuilder.shardElectionTimeoutFactor(1000).
+ customRaftPolicyImplementation(DisableElectionsRaftPolicy.class.getName());
final MockDataTreeChangeListener listener = new MockDataTreeChangeListener(1);
final ActorRef dclActor = actorFactory.createActor(DataTreeChangeListenerActor.props(listener),
actorFactory.generateActorId(testName + "-DataTreeChangeListener"));
+ setupInMemorySnapshotStore();
+
final TestActorRef<Shard> shard = actorFactory.createTestActor(
newShardBuilder().props().withDispatcher(Dispatchers.DefaultDispatcherId()),
actorFactory.generateActorId(testName + "-shard"));
RegisterDataTreeChangeListenerReply.class);
assertNotNull("getListenerRegistrationPath", reply.getListenerRegistrationPath());
- writeToStore(shard, path, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
-
- shard.tell(new ElectionTimeout(), ActorRef.noSender());
+ shard.tell(DatastoreContext.newBuilderFrom(dataStoreContextBuilder.build()).
+ customRaftPolicyImplementation(null).build(), ActorRef.noSender());
listener.waitForChangeEvents();
}};
"akka://test/user/" + followerShardID.toString())).schemaContext(SCHEMA_CONTEXT).props().
withDispatcher(Dispatchers.DefaultDispatcherId()), leaderShardID.toString());
- leaderShard.tell(new ElectionTimeout(), ActorRef.noSender());
+ leaderShard.tell(ElectionTimeout.INSTANCE, ActorRef.noSender());
String leaderPath = waitUntilLeader(followerShard);
assertEquals("Shard leader path", leaderShard.path().toString(), leaderPath);