blob: 9eebd0617ae19010935d1aeced61e321483e6251 [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());
}
}