@Override
public void beforeChangeClusterState(ClusterInventory inventory, ClusterStateEvent event, ClusterState nextState) {
if (!event.toString().equals(ClusterStateEvent.disable.toString()) && !event.toString().equals(ClusterStateEvent.enable.toString())) {
logger.debug("Unsupport ClusterStateEvent: " + event + ", won't propgate to extensions of host");
return;
}
HostStateEvent hostEvent = HostStateEvent.valueOf(event.toString());
List<HostVO> vos = findHostUnderClusterByUuid(inventory.getUuid());
if (!vos.isEmpty()) {
for (HostVO h : vos) {
if (h.getState() == HostState.Maintenance || h.getState() == HostState.PreMaintenance) {
continue;
}
ChangeHostStateMsg msg = new ChangeHostStateMsg(h.getUuid(), hostEvent.toString());
bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, h.getUuid());
ChangeHostStateReply r = (ChangeHostStateReply) bus.call(msg);
if (!r.isSuccess()) {
logger.warn(String.format("Failed to change host[uuid: %s] state(%s) by event(%s), %s", h.getUuid(), h.getState(), hostEvent, r.getError()));
} else {
logger.debug(String.format("Successfully changed host[uuid: %s] state(%s) by event(%s), new state is %s", h.getUuid(), h.getState(), hostEvent, r.getInventory().getState()));
}
}
}
}