import org.opendaylight.controller.cluster.raft.base.messages.CaptureSnapshotReply;
import org.opendaylight.controller.cluster.raft.behaviors.Leader;
import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
+import org.opendaylight.yangtools.concepts.Identifier;
+import org.opendaylight.yangtools.util.AbstractStringIdentifier;
/**
* A sample actor showing how the RaftActor is to be extended
*/
public class ExampleActor extends RaftActor implements RaftActorRecoveryCohort, RaftActorSnapshotCohort {
+ private static final class PayloadIdentifier extends AbstractStringIdentifier<PayloadIdentifier> {
+ private static final long serialVersionUID = 1L;
+
+ PayloadIdentifier(final long identifier) {
+ super(String.valueOf(identifier));
+ }
+ }
private final Map<String, String> state = new HashMap<>();
public ExampleActor(String id, Map<String, String> peerAddresses,
Optional<ConfigParams> configParams) {
- super(id, peerAddresses, configParams);
+ super(id, peerAddresses, configParams, (short)0);
setPersistence(true);
roleChangeNotifier = createRoleChangeNotifier(id);
}
return Props.create(ExampleActor.class, id, peerAddresses, configParams);
}
- @Override public void onReceiveCommand(Object message) throws Exception{
+ @Override
+ protected void handleNonRaftCommand(Object message) {
if(message instanceof KeyValue){
if(isLeader()) {
- String persistId = Long.toString(persistIdentifier++);
- persistData(getSender(), persistId, (Payload) message);
+ persistData(getSender(), new PayloadIdentifier(persistIdentifier++), (Payload) message);
} else {
if(getLeader() != null) {
getLeader().forward(message, getContext());
if (getRaftState() == RaftState.Leader || getRaftState() == RaftState.IsolatedLeader) {
final String followers = ((Leader)this.getCurrentBehavior()).printFollowerStates();
LOG.debug("{} = {}, Peers={}, followers={}", getId(), getRaftState(),
- getRaftActorContext().getPeerAddresses().keySet(), followers);
+ getRaftActorContext().getPeerIds(), followers);
} else {
LOG.debug("{} = {}, Peers={}", getId(), getRaftState(),
- getRaftActorContext().getPeerAddresses().keySet());
+ getRaftActorContext().getPeerIds());
}
}
} else {
- super.onReceiveCommand(message);
+ super.handleNonRaftCommand(message);
}
}
return roleChangeNotifier;
}
- @Override protected void applyState(final ActorRef clientActor, final String identifier,
- final Object data) {
+ @Override
+ protected void applyState(final ActorRef clientActor, final Identifier identifier, final Object data) {
if(data instanceof KeyValue){
KeyValue kv = (KeyValue) data;
state.put(kv.getKey(), kv.getValue());
}
}
- private ByteString fromObject(Object snapshot) throws Exception {
+ private static ByteString fromObject(Object snapshot) throws Exception {
ByteArrayOutputStream b = null;
ObjectOutputStream o = null;
try {
}
}
- private Object toObject(byte [] bs) throws ClassNotFoundException, IOException {
+ private static Object toObject(byte [] bs) throws ClassNotFoundException, IOException {
Object obj = null;
ByteArrayInputStream bis = null;
ObjectInputStream ois = null;
}
- @Override public void onReceiveRecover(Object message)throws Exception {
- super.onReceiveRecover(message);
- }
-
@Override public String persistenceId() {
return getId();
}
protected RaftActorSnapshotCohort getRaftActorSnapshotCohort() {
return this;
}
+
+ @Override
+ public byte[] getRestoreFromSnapshot() {
+ return null;
+ }
}