|
|
@@ -8,8 +8,12 @@ package org.elasticsearch.xpack.ilm;
|
|
|
|
|
|
import org.apache.logging.log4j.LogManager;
|
|
|
import org.apache.logging.log4j.Logger;
|
|
|
+import org.elasticsearch.action.ActionListener;
|
|
|
+import org.elasticsearch.action.support.master.AcknowledgedResponse;
|
|
|
+import org.elasticsearch.cluster.AckedClusterStateUpdateTask;
|
|
|
import org.elasticsearch.cluster.ClusterState;
|
|
|
import org.elasticsearch.cluster.ClusterStateUpdateTask;
|
|
|
+import org.elasticsearch.cluster.ack.AckedRequest;
|
|
|
import org.elasticsearch.cluster.metadata.Metadata;
|
|
|
import org.elasticsearch.common.Priority;
|
|
|
import org.elasticsearch.core.Nullable;
|
|
|
@@ -17,6 +21,8 @@ import org.elasticsearch.xpack.core.ilm.IndexLifecycleMetadata;
|
|
|
import org.elasticsearch.xpack.core.ilm.OperationMode;
|
|
|
import org.elasticsearch.xpack.core.slm.SnapshotLifecycleMetadata;
|
|
|
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
/**
|
|
|
* This task updates the operation mode state for ILM.
|
|
|
*
|
|
|
@@ -30,6 +36,19 @@ public class OperationModeUpdateTask extends ClusterStateUpdateTask {
|
|
|
@Nullable
|
|
|
private final OperationMode slmMode;
|
|
|
|
|
|
+ public static AckedClusterStateUpdateTask wrap(
|
|
|
+ OperationModeUpdateTask task,
|
|
|
+ AckedRequest request,
|
|
|
+ ActionListener<AcknowledgedResponse> listener
|
|
|
+ ) {
|
|
|
+ return new AckedClusterStateUpdateTask(task.priority(), request, listener) {
|
|
|
+ @Override
|
|
|
+ public ClusterState execute(ClusterState currentState) {
|
|
|
+ return task.execute(currentState);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
private OperationModeUpdateTask(Priority priority, OperationMode ilmMode, OperationMode slmMode) {
|
|
|
super(priority);
|
|
|
this.ilmMode = ilmMode;
|
|
|
@@ -37,15 +56,19 @@ public class OperationModeUpdateTask extends ClusterStateUpdateTask {
|
|
|
}
|
|
|
|
|
|
public static OperationModeUpdateTask ilmMode(OperationMode mode) {
|
|
|
- return ilmMode(Priority.NORMAL, mode);
|
|
|
+ return new OperationModeUpdateTask(getPriority(mode), mode, null);
|
|
|
}
|
|
|
|
|
|
- public static OperationModeUpdateTask ilmMode(Priority priority, OperationMode mode) {
|
|
|
- return new OperationModeUpdateTask(priority, mode, null);
|
|
|
+ public static OperationModeUpdateTask slmMode(OperationMode mode) {
|
|
|
+ return new OperationModeUpdateTask(getPriority(mode), null, mode);
|
|
|
}
|
|
|
|
|
|
- public static OperationModeUpdateTask slmMode(OperationMode mode) {
|
|
|
- return new OperationModeUpdateTask(Priority.NORMAL, null, mode);
|
|
|
+ private static Priority getPriority(OperationMode mode) {
|
|
|
+ if (mode == OperationMode.STOPPED || mode == OperationMode.STOPPING) {
|
|
|
+ return Priority.IMMEDIATE;
|
|
|
+ } else {
|
|
|
+ return Priority.NORMAL;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
OperationMode getILMOperationMode() {
|
|
|
@@ -129,4 +152,33 @@ public class OperationModeUpdateTask extends ClusterStateUpdateTask {
|
|
|
public void onFailure(String source, Exception e) {
|
|
|
logger.error("unable to update lifecycle metadata with new ilm mode [" + ilmMode + "], slm mode [" + slmMode + "]", e);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void clusterStateProcessed(String source, ClusterState oldState, ClusterState newState) {
|
|
|
+ if (ilmMode != null) {
|
|
|
+ logger.info("ILM operation mode updated to {}", ilmMode);
|
|
|
+ }
|
|
|
+ if (slmMode != null) {
|
|
|
+ logger.info("SLM operation mode updated to {}", slmMode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int hashCode() {
|
|
|
+ return Objects.hash(super.hashCode(), ilmMode, slmMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean equals(Object obj) {
|
|
|
+ if (obj == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (obj.getClass() != getClass()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ OperationModeUpdateTask other = (OperationModeUpdateTask) obj;
|
|
|
+ return Objects.equals(priority(), other.priority())
|
|
|
+ && Objects.equals(ilmMode, other.ilmMode)
|
|
|
+ && Objects.equals(slmMode, other.slmMode);
|
|
|
+ }
|
|
|
}
|