|
@@ -22,10 +22,12 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.ORDERED_VALID_COLD_ACTIONS;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.ORDERED_VALID_DELETE_ACTIONS;
|
|
|
+import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.ORDERED_VALID_FROZEN_ACTIONS;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.ORDERED_VALID_HOT_ACTIONS;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.ORDERED_VALID_WARM_ACTIONS;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.VALID_COLD_ACTIONS;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.VALID_DELETE_ACTIONS;
|
|
|
+import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.VALID_FROZEN_ACTIONS;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.VALID_HOT_ACTIONS;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.VALID_PHASES;
|
|
|
import static org.elasticsearch.xpack.core.ilm.TimeseriesLifecycleType.VALID_WARM_ACTIONS;
|
|
@@ -49,7 +51,7 @@ public class TimeseriesLifecycleTypeTests extends ESTestCase {
|
|
|
|
|
|
public void testValidatePhases() {
|
|
|
boolean invalid = randomBoolean();
|
|
|
- String phaseName = randomFrom("hot", "warm", "cold", "delete");
|
|
|
+ String phaseName = randomFrom("hot", "warm", "cold", "frozen", "delete");
|
|
|
if (invalid) {
|
|
|
phaseName += randomAlphaOfLength(5);
|
|
|
}
|
|
@@ -142,6 +144,27 @@ public class TimeseriesLifecycleTypeTests extends ESTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void testValidateFrozenPhase() {
|
|
|
+ LifecycleAction invalidAction = null;
|
|
|
+ Map<String, LifecycleAction> actions = randomSubsetOf(VALID_FROZEN_ACTIONS)
|
|
|
+ .stream().map(this::getTestAction).collect(Collectors.toMap(LifecycleAction::getWriteableName, Function.identity()));
|
|
|
+ if (randomBoolean()) {
|
|
|
+ invalidAction = getTestAction(randomFrom("rollover", "delete", "forcemerge", "shrink"));
|
|
|
+ actions.put(invalidAction.getWriteableName(), invalidAction);
|
|
|
+ }
|
|
|
+ Map<String, Phase> frozenPhase = Collections.singletonMap("frozen",
|
|
|
+ new Phase("frozen", TimeValue.ZERO, actions));
|
|
|
+
|
|
|
+ if (invalidAction != null) {
|
|
|
+ Exception e = expectThrows(IllegalArgumentException.class,
|
|
|
+ () -> TimeseriesLifecycleType.INSTANCE.validate(frozenPhase.values()));
|
|
|
+ assertThat(e.getMessage(),
|
|
|
+ equalTo("invalid action [" + invalidAction.getWriteableName() + "] defined in phase [frozen]"));
|
|
|
+ } else {
|
|
|
+ TimeseriesLifecycleType.INSTANCE.validate(frozenPhase.values());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void testValidateDeletePhase() {
|
|
|
LifecycleAction invalidAction = null;
|
|
|
Map<String, LifecycleAction> actions = VALID_DELETE_ACTIONS
|
|
@@ -233,6 +256,15 @@ public class TimeseriesLifecycleTypeTests extends ESTestCase {
|
|
|
assertThat(orderedActions.indexOf(TEST_PRIORITY_ACTION), equalTo(0));
|
|
|
}
|
|
|
|
|
|
+ public void testGetOrderedActionsFrozen() {
|
|
|
+ Map<String, LifecycleAction> actions = VALID_FROZEN_ACTIONS
|
|
|
+ .stream().map(this::getTestAction).collect(Collectors.toMap(LifecycleAction::getWriteableName, Function.identity()));
|
|
|
+ Phase frozenPhase = new Phase("frozen", TimeValue.ZERO, actions);
|
|
|
+ List<LifecycleAction> orderedActions = TimeseriesLifecycleType.INSTANCE.getOrderedActions(frozenPhase);
|
|
|
+ assertTrue(isSorted(orderedActions, LifecycleAction::getWriteableName, ORDERED_VALID_FROZEN_ACTIONS));
|
|
|
+ assertThat(orderedActions.indexOf(TEST_PRIORITY_ACTION), equalTo(0));
|
|
|
+ }
|
|
|
+
|
|
|
public void testGetOrderedActionsDelete() {
|
|
|
Map<String, LifecycleAction> actions = VALID_DELETE_ACTIONS
|
|
|
.stream().map(this::getTestAction).collect(Collectors.toMap(LifecycleAction::getWriteableName, Function.identity()));
|
|
@@ -244,21 +276,25 @@ public class TimeseriesLifecycleTypeTests extends ESTestCase {
|
|
|
public void testGetNextPhaseName() {
|
|
|
assertNextPhaseName("hot", "warm", new String[] { "hot", "warm" });
|
|
|
assertNextPhaseName("hot", "warm", new String[] { "hot", "warm", "cold" });
|
|
|
- assertNextPhaseName("hot", "warm", new String[] { "hot", "warm", "cold", "delete" });
|
|
|
+ assertNextPhaseName("hot", "warm", new String[] { "hot", "warm", "cold", "frozen"});
|
|
|
+ assertNextPhaseName("hot", "warm", new String[] { "hot", "warm", "cold", "frozen", "delete" });
|
|
|
assertNextPhaseName("hot", "warm", new String[] { "warm", "cold", "delete" });
|
|
|
assertNextPhaseName("hot", "warm", new String[] { "warm", "cold", "delete" });
|
|
|
assertNextPhaseName("hot", "warm", new String[] { "warm", "delete" });
|
|
|
assertNextPhaseName("hot", "cold", new String[] { "cold", "delete" });
|
|
|
assertNextPhaseName("hot", "cold", new String[] { "cold" });
|
|
|
+ assertNextPhaseName("hot", "frozen", new String[] { "hot", "frozen" });
|
|
|
+ assertNextPhaseName("hot", "frozen", new String[] { "frozen" });
|
|
|
assertNextPhaseName("hot", "delete", new String[] { "hot", "delete" });
|
|
|
assertNextPhaseName("hot", "delete", new String[] { "delete" });
|
|
|
assertNextPhaseName("hot", null, new String[] { "hot" });
|
|
|
assertNextPhaseName("hot", null, new String[] {});
|
|
|
|
|
|
- assertNextPhaseName("warm", "cold", new String[] { "hot", "warm", "cold", "delete" });
|
|
|
+ assertNextPhaseName("warm", "cold", new String[] { "hot", "warm", "cold", "frozen", "delete" });
|
|
|
assertNextPhaseName("warm", "cold", new String[] { "warm", "cold", "delete" });
|
|
|
assertNextPhaseName("warm", "cold", new String[] { "cold", "delete" });
|
|
|
assertNextPhaseName("warm", "cold", new String[] { "cold" });
|
|
|
+ assertNextPhaseName("warm", "frozen", new String[] { "hot", "warm", "frozen", "delete" });
|
|
|
assertNextPhaseName("warm", "delete", new String[] { "hot", "warm", "delete" });
|
|
|
assertNextPhaseName("warm", null, new String[] { "hot", "warm" });
|
|
|
assertNextPhaseName("warm", null, new String[] { "warm" });
|
|
@@ -270,18 +306,34 @@ public class TimeseriesLifecycleTypeTests extends ESTestCase {
|
|
|
assertNextPhaseName("cold", "delete", new String[] { "cold", "delete" });
|
|
|
assertNextPhaseName("cold", "delete", new String[] { "delete" });
|
|
|
assertNextPhaseName("cold", "delete", new String[] { "hot", "warm", "delete" });
|
|
|
+ assertNextPhaseName("cold", "frozen", new String[] { "cold", "frozen", "delete" });
|
|
|
+ assertNextPhaseName("cold", "frozen", new String[] { "hot", "warm", "frozen", "delete" });
|
|
|
assertNextPhaseName("cold", null, new String[] { "hot", "warm", "cold" });
|
|
|
assertNextPhaseName("cold", null, new String[] { "hot", "warm" });
|
|
|
assertNextPhaseName("cold", null, new String[] { "cold" });
|
|
|
assertNextPhaseName("cold", null, new String[] { "hot" });
|
|
|
assertNextPhaseName("cold", null, new String[] {});
|
|
|
|
|
|
- assertNextPhaseName("delete", null, new String[] { "hot", "warm", "cold" });
|
|
|
+ assertNextPhaseName("frozen", "delete", new String[] { "hot", "warm", "cold", "delete" });
|
|
|
+ assertNextPhaseName("frozen", "delete", new String[] { "warm", "cold", "delete" });
|
|
|
+ assertNextPhaseName("frozen", "delete", new String[] { "cold", "delete" });
|
|
|
+ assertNextPhaseName("frozen", "delete", new String[] { "delete" });
|
|
|
+ assertNextPhaseName("frozen", "delete", new String[] { "frozen", "delete" });
|
|
|
+ assertNextPhaseName("frozen", "delete", new String[] { "hot", "warm", "delete" });
|
|
|
+ assertNextPhaseName("frozen", null, new String[] { "hot", "warm", "cold" });
|
|
|
+ assertNextPhaseName("frozen", null, new String[] { "hot", "warm" });
|
|
|
+ assertNextPhaseName("frozen", null, new String[] { "cold" });
|
|
|
+ assertNextPhaseName("frozen", null, new String[] { "hot" });
|
|
|
+ assertNextPhaseName("frozen", null, new String[] { "frozen" });
|
|
|
+ assertNextPhaseName("frozen", null, new String[] {});
|
|
|
+
|
|
|
+ assertNextPhaseName("delete", null, new String[] { "hot", "warm", "cold", "frozen" });
|
|
|
assertNextPhaseName("delete", null, new String[] { "hot", "warm" });
|
|
|
assertNextPhaseName("delete", null, new String[] { "cold" });
|
|
|
assertNextPhaseName("delete", null, new String[] { "hot" });
|
|
|
+ assertNextPhaseName("delete", null, new String[] { "frozen" });
|
|
|
assertNextPhaseName("delete", null, new String[] {});
|
|
|
- assertNextPhaseName("delete", null, new String[] { "hot", "warm", "cold", "delete" });
|
|
|
+ assertNextPhaseName("delete", null, new String[] { "hot", "warm", "cold", "frozen", "delete" });
|
|
|
assertNextPhaseName("delete", null, new String[] { "hot", "warm", "delete" });
|
|
|
assertNextPhaseName("delete", null, new String[] { "cold", "delete" });
|
|
|
assertNextPhaseName("delete", null, new String[] { "delete" });
|
|
@@ -330,14 +382,30 @@ public class TimeseriesLifecycleTypeTests extends ESTestCase {
|
|
|
assertPreviousPhaseName("cold", "warm", new String[] { "warm" });
|
|
|
assertPreviousPhaseName("cold", null, new String[] {});
|
|
|
|
|
|
+ assertPreviousPhaseName("frozen", "warm", new String[] { "hot", "warm", "frozen", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", "hot", new String[] { "hot", "frozen", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", "warm", new String[] { "warm", "frozen", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", "cold", new String[] { "cold", "frozen", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", null, new String[] { "frozen", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", "warm", new String[] { "hot", "warm", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", "hot", new String[] { "hot", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", "warm", new String[] { "warm", "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", null, new String[] { "delete" });
|
|
|
+ assertPreviousPhaseName("frozen", "warm", new String[] { "hot", "warm" });
|
|
|
+ assertPreviousPhaseName("frozen", "hot", new String[] { "hot" });
|
|
|
+ assertPreviousPhaseName("frozen", "warm", new String[] { "warm" });
|
|
|
+ assertPreviousPhaseName("frozen", null, new String[] {});
|
|
|
+
|
|
|
assertPreviousPhaseName("delete", "cold", new String[] { "hot", "warm", "cold", "delete" });
|
|
|
assertPreviousPhaseName("delete", "cold", new String[] { "warm", "cold", "delete" });
|
|
|
assertPreviousPhaseName("delete", "warm", new String[] { "hot", "warm", "delete" });
|
|
|
assertPreviousPhaseName("delete", "hot", new String[] { "hot", "delete" });
|
|
|
assertPreviousPhaseName("delete", "cold", new String[] { "cold", "delete" });
|
|
|
+ assertPreviousPhaseName("delete", "frozen", new String[] { "frozen", "delete" });
|
|
|
assertPreviousPhaseName("delete", null, new String[] { "delete" });
|
|
|
assertPreviousPhaseName("delete", "cold", new String[] { "hot", "warm", "cold" });
|
|
|
assertPreviousPhaseName("delete", "cold", new String[] { "warm", "cold" });
|
|
|
+ assertPreviousPhaseName("delete", "frozen", new String[] { "warm", "frozen" });
|
|
|
assertPreviousPhaseName("delete", "warm", new String[] { "hot", "warm" });
|
|
|
assertPreviousPhaseName("delete", "hot", new String[] { "hot" });
|
|
|
assertPreviousPhaseName("delete", "cold", new String[] { "cold" });
|
|
@@ -469,6 +537,38 @@ public class TimeseriesLifecycleTypeTests extends ESTestCase {
|
|
|
assertInvalidAction("cold", RolloverAction.NAME, new String[] { AllocateAction.NAME });
|
|
|
assertInvalidAction("cold", ShrinkAction.NAME, new String[] { AllocateAction.NAME });
|
|
|
|
|
|
+ // Frozen Phase
|
|
|
+ assertNextActionName("frozen", SetPriorityAction.NAME, UnfollowAction.NAME,
|
|
|
+ new String[]{UnfollowAction.NAME, SetPriorityAction.NAME, FreezeAction.NAME});
|
|
|
+ assertNextActionName("frozen", SetPriorityAction.NAME, FreezeAction.NAME,
|
|
|
+ new String[]{SetPriorityAction.NAME, FreezeAction.NAME});
|
|
|
+ assertNextActionName("frozen", SetPriorityAction.NAME, AllocateAction.NAME,
|
|
|
+ new String[]{SetPriorityAction.NAME, AllocateAction.NAME});
|
|
|
+ assertNextActionName("frozen", SetPriorityAction.NAME, null, new String[] { SetPriorityAction.NAME });
|
|
|
+ assertNextActionName("frozen", SetPriorityAction.NAME, null, new String[] {});
|
|
|
+
|
|
|
+ assertNextActionName("frozen", UnfollowAction.NAME, AllocateAction.NAME,
|
|
|
+ new String[] {SetPriorityAction.NAME, AllocateAction.NAME, FreezeAction.NAME});
|
|
|
+ assertNextActionName("frozen", UnfollowAction.NAME, AllocateAction.NAME,
|
|
|
+ new String[] {AllocateAction.NAME, FreezeAction.NAME});
|
|
|
+ assertNextActionName("frozen", UnfollowAction.NAME, FreezeAction.NAME, new String[] {FreezeAction.NAME});
|
|
|
+ assertNextActionName("frozen", UnfollowAction.NAME, null, new String[] {});
|
|
|
+
|
|
|
+ assertNextActionName("frozen", AllocateAction.NAME, null, new String[] { AllocateAction.NAME });
|
|
|
+ assertNextActionName("frozen", AllocateAction.NAME, null, new String[] {});
|
|
|
+ assertNextActionName("frozen", AllocateAction.NAME, null, new String[] {});
|
|
|
+ assertNextActionName("frozen", AllocateAction.NAME, FreezeAction.NAME, FreezeAction.NAME);
|
|
|
+
|
|
|
+ assertNextActionName("frozen", FreezeAction.NAME, null);
|
|
|
+ assertNextActionName("frozen", FreezeAction.NAME, null, AllocateAction.NAME);
|
|
|
+
|
|
|
+ assertInvalidAction("frozen", "foo", new String[] { AllocateAction.NAME });
|
|
|
+ assertInvalidAction("frozen", DeleteAction.NAME, new String[] { AllocateAction.NAME });
|
|
|
+ assertInvalidAction("frozen", ForceMergeAction.NAME, new String[] { AllocateAction.NAME });
|
|
|
+ assertInvalidAction("frozen", ReadOnlyAction.NAME, new String[] { AllocateAction.NAME });
|
|
|
+ assertInvalidAction("frozen", RolloverAction.NAME, new String[] { AllocateAction.NAME });
|
|
|
+ assertInvalidAction("frozen", ShrinkAction.NAME, new String[] { AllocateAction.NAME });
|
|
|
+
|
|
|
// Delete Phase
|
|
|
assertNextActionName("delete", DeleteAction.NAME, null, new String[] {});
|
|
|
assertNextActionName("delete", DeleteAction.NAME, null, new String[] { DeleteAction.NAME });
|