HAConfig.HAState.getStateMachine().registerListener(this);
public boolean transitionHAState(final HAConfig.Event event, final HAConfig haConfig) { if (event == null || haConfig == null) { return false; } final HAConfig.HAState currentHAState = haConfig.getState(); try { final HAConfig.HAState nextState = HAConfig.HAState.getStateMachine().getNextState(currentHAState, event); boolean result = HAConfig.HAState.getStateMachine().transitTo(haConfig, event, null, haConfigDao); if (result) { final String message = String.format("Transitioned host HA state from:%s to:%s due to event:%s for the host id:%d", currentHAState, nextState, event, haConfig.getResourceId()); if (LOG.isTraceEnabled()) { LOG.trace(message); } if (nextState == HAConfig.HAState.Recovering || nextState == HAConfig.HAState.Fencing || nextState == HAConfig.HAState.Fenced) { ActionEventUtils.onActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), Domain.ROOT_DOMAIN, EventTypes.EVENT_HA_STATE_TRANSITION, message); } } return result; } catch (NoTransitionException e) { if (LOG.isTraceEnabled()) { LOG.trace("Unable to find next HA state for current HA state: " + currentHAState + " for event: " + event + " for host" + haConfig.getResourceId()); } } return false; }
@Override public void sendAlert(final Host host, final HAConfig.HAState nextState) { String subject = "HA operation performed for host"; String body = subject; if (HAConfig.HAState.Fencing.equals(nextState)) { subject = String.format("HA Fencing of host id=%d, in dc id=%d performed", host.getId(), host.getDataCenterId()); body = String.format("HA Fencing has been performed for host id=%d, uuid=%s in datacenter id=%d", host.getId(), host.getUuid(), host.getDataCenterId()); } else if (HAConfig.HAState.Recovering.equals(nextState)) { subject = String.format("HA Recovery of host id=%d, in dc id=%d performed", host.getId(), host.getDataCenterId()); body = String.format("HA Recovery has been performed for host id=%d, uuid=%s in datacenter id=%d", host.getId(), host.getUuid(), host.getDataCenterId()); } alertManager.sendAlert(AlertService.AlertType.ALERT_TYPE_HA_ACTION, host.getDataCenterId(), host.getPodId(), subject, body); }