private ActorRef roleChangeNotifier;
private final CountDownLatch initializeBehaviorComplete = new CountDownLatch(1);
private RaftActorRecoverySupport raftActorRecoverySupport;
+ private RaftActorSnapshotMessageSupport snapshotMessageSupport;
public static final class MockRaftActorCreator implements Creator<MockRaftActor> {
private static final long serialVersionUID = 1L;
private final Optional<ConfigParams> config;
private final DataPersistenceProvider dataPersistenceProvider;
private final ActorRef roleChangeNotifier;
+ private RaftActorSnapshotMessageSupport snapshotMessageSupport;
private MockRaftActorCreator(Map<String, String> peerAddresses, String id,
Optional<ConfigParams> config, DataPersistenceProvider dataPersistenceProvider,
MockRaftActor mockRaftActor = new MockRaftActor(id, peerAddresses, config,
dataPersistenceProvider);
mockRaftActor.roleChangeNotifier = this.roleChangeNotifier;
+ mockRaftActor.snapshotMessageSupport = snapshotMessageSupport;
return mockRaftActor;
}
}
public MockRaftActor(String id, Map<String, String> peerAddresses, Optional<ConfigParams> config,
DataPersistenceProvider dataPersistenceProvider) {
- super(id, peerAddresses, config);
+ super(id, peerAddresses, config, (short) 0);
state = new ArrayList<>();
this.actorDelegate = mock(RaftActor.class);
this.recoveryCohortDelegate = mock(RaftActorRecoveryCohort.class);
return raftActorRecoverySupport != null ? raftActorRecoverySupport : super.newRaftActorRecoverySupport();
}
+ @Override
+ protected RaftActorSnapshotMessageSupport newRaftActorSnapshotMessageSupport() {
+ return snapshotMessageSupport != null ? snapshotMessageSupport : super.newRaftActorSnapshotMessageSupport();
+ }
+
public void waitForRecoveryComplete() {
try {
assertEquals("Recovery complete", true, recoveryComplete.await(5, TimeUnit.SECONDS));
return Props.create(new MockRaftActorCreator(peerAddresses, id, config, null, null));
}
+ public static Props props(final String id, final Map<String, String> peerAddresses,
+ Optional<ConfigParams> config, RaftActorSnapshotMessageSupport snapshotMessageSupport){
+ MockRaftActorCreator creator = new MockRaftActorCreator(peerAddresses, id, config, null, null);
+ creator.snapshotMessageSupport = snapshotMessageSupport;
+ return Props.create(creator);
+ }
+
public static Props props(final String id, final Map<String, String> peerAddresses,
Optional<ConfigParams> config, DataPersistenceProvider dataPersistenceProvider){
return Props.create(new MockRaftActorCreator(peerAddresses, id, config, dataPersistenceProvider, null));
return Props.create(new MockRaftActorCreator(peerAddresses, id, config, dataPersistenceProvider, roleChangeNotifier));
}
-
@Override protected void applyState(ActorRef clientActor, String identifier, Object data) {
actorDelegate.applyState(clientActor, identifier, data);
- LOG.info("{}: applyState called", persistenceId());
+ LOG.info("{}: applyState called: {}", persistenceId(), data);
+
+ state.add(data);
}
@Override
return this.getId();
}
- private Object toObject(byte[] bs) throws ClassNotFoundException, IOException {
+ public static Object toObject(byte[] bs) throws ClassNotFoundException, IOException {
Object obj = null;
ByteArrayInputStream bis = null;
ObjectInputStream ois = null;