@Override public State<?, ?> handle( ClusterContext context, Message<ClusterMessage> message, MessageHolder outgoing) throws Throwable { switch (message.getMessageType()) { case configurationChanged: { ClusterMessage.ConfigurationChangeState state = message.getPayload(); if (state.isLeaving(context.getMe())) { context.timeouts.cancelTimeout("leave"); context.left(); return start; } else { state.apply(context); return leaving; } } case leaveTimedout: { context .getLogger(ClusterState.class) .warn( "Failed to leave. Cluster may consider this" + " instance still a " + "member"); context.left(); return start; } } return this; }