package org.apache.fullmatix.mysql;
import org.apache.helix.HelixManager;
import org.apache.helix.NotificationContext;
import org.apache.helix.model.InstanceConfig;
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;
import org.apache.log4j.Logger;
@StateModelInfo(initialState = "OFFLINE", states = {
"OFFLINE", "ONLINE"
})
public class DatabaseTransitionHandler extends StateModel {
private static final Logger LOG = Logger.getLogger(DatabaseTransitionHandler.class);
private HelixManager _manager;
private MySQLAdmin _mysqlAdmin;
private String _partition;
public DatabaseTransitionHandler(Context context, String database, String partition) {
_manager = context.getHelixManager();
_mysqlAdmin = context.getMysqlAdmin();
_partition = partition;
}
@Transition(from = "OFFLINE", to = "ONLINE")
public void onBecomeOnlineFromOffline(Message message, NotificationContext context) {
LOG.info(message.getTgtName() + " transitioning from " + message.getFromState() + " to "
+ message.getToState() + " for " + _partition);
LOG.info("Creating database: " + _partition);
_mysqlAdmin.createDatabase(_partition);
LOG.info(message.getTgtName() + " transitioned from " + message.getFromState() + " to "
+ message.getToState() + " for " + _partition);
}
@Transition(from = "ONLINE", to = "OFFLINE")
public void onBecomeOfflineFromOnline(Message message, NotificationContext context) {
LOG.info(_manager.getInstanceName() + " transitioning from " + message.getFromState() + " to "
+ message.getToState() + " for " + _partition);
LOG.info("Will no longer serve this database: " + _partition);
LOG.info(_manager.getInstanceName() + " transitioned from " + message.getFromState() + " to "
+ message.getToState() + " for " + _partition);
}
}