blob: a342a8c6f357403f08658717c7f73410b7a3fb19 [file] [log] [blame]
package org.apache.helix.api.status;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.helix.model.LiveInstance;
/**
* Represents the management mode of the cluster:
* 1. what type of mode it targets to be;
* 2. what progress status it is now.
*/
public class ClusterManagementMode {
/** Represents */
public enum Type {
/** Cluster is not in any pause or maintenance mode */
NORMAL,
/**
* Puts a cluster into freeze mode, which will freeze controller and participants.
* This can be used to retain the cluster state.
*/
CLUSTER_FREEZE,
/** Pause controller only, but not participants. */
CONTROLLER_PAUSE,
/** Put cluster into maintenance mode. */
MAINTENANCE
}
/** Current status of the cluster mode */
public enum Status {
/** Cluster is in progress to the target {@link Type} of mode */
IN_PROGRESS,
/** Cluster is fully stable in the target {@link Type} of mode */
COMPLETED
}
private final Type mode;
private final Status status;
// Default constructor for json deserialization
private ClusterManagementMode() {
mode = null;
status = null;
}
public ClusterManagementMode(Type mode, Status status) {
this.mode = mode;
this.status = status;
}
public Status getStatus() {
return status;
}
public Type getMode() {
return mode;
}
public boolean isFullyInNormalMode() {
return Type.NORMAL.equals(mode) && Status.COMPLETED.equals(status);
}
/**
* Gets the desired live instance status for this management mode.
*
* @return The desired {@link org.apache.helix.model.LiveInstance.LiveInstanceStatus}.
* If participants status is not expected to change for the management mode, null is returned.
*/
public LiveInstance.LiveInstanceStatus getDesiredParticipantStatus() {
switch (mode) {
case CLUSTER_FREEZE:
return LiveInstance.LiveInstanceStatus.PAUSED;
case NORMAL:
return LiveInstance.LiveInstanceStatus.NORMAL;
default:
// Other modes don't need to change participant status
return null;
}
}
}