blob: ea35bd66f74772856f76b27be55b05a4616da094 [file] [log] [blame]
package org.apache.s4.comm.helix;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.helix.NotificationContext;
import org.apache.helix.model.Message;
import org.apache.helix.participant.statemachine.StateModel;
import org.apache.helix.participant.statemachine.StateModelInfo;
import org.apache.helix.participant.statemachine.Transition;
@StateModelInfo(states = { "LEADER,STANDBY" }, initialState = "OFFLINE")
public class S4StateModel extends StateModel {
private static Logger logger = LoggerFactory.getLogger(S4StateModel.class);
private final String streamName;
private final String partitionId;
public S4StateModel(String partitionName) {
String[] parts = partitionName.split("_");
this.streamName = parts[0];
this.partitionId = parts[1];
}
@Transition(from = "OFFLINE", to = "STANDBY")
public void becomeLeaderFromOffline(Message msg, NotificationContext context) {
logger.info("Transitioning from " + msg.getFromState() + " to " + msg.getToState() + "for "
+ msg.getPartitionName());
}
@Transition(from = "STANDBY", to = "LEADER")
public void becomeLeaderFromStandby(Message msg, NotificationContext context) {
logger.info("Transitioning from " + msg.getFromState() + " to " + msg.getToState() + "for "
+ msg.getPartitionName());
}
@Transition(from = "LEADER", to = "STANDBY")
public void becomeStandbyFromLeader(Message msg, NotificationContext context) {
logger.info("Transitioning from " + msg.getFromState() + " to " + msg.getToState() + "for "
+ msg.getPartitionName());
}
@Transition(from = "STANDBY", to = "OFFLINE")
public void becomeOfflineFromStandby(Message msg, NotificationContext context) {
logger.info("Transitioning from " + msg.getFromState() + " to " + msg.getToState() + "for "
+ msg.getPartitionName());
}
@Transition(from = "OFFLINE", to = "DROPPED")
public void dropPartition(Message msg, NotificationContext context) {
logger.info("Dropping partition" + msg.getPartitionName());
}
}