diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/11_basic_slm.yml b/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/11_basic_slm.yml new file mode 100644 index 0000000000000..7a40feed17dea --- /dev/null +++ b/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/11_basic_slm.yml @@ -0,0 +1,87 @@ +--- +setup: + - do: + cluster.health: + wait_for_status: yellow + +--- +"Test Basic Policy CRUD": + - do: + catch: missing + slm.get_lifecycle: + policy_id: "daily-snapshots" + + - do: + catch: missing + slm.delete_lifecycle: + policy_id: "daily-snapshots" + + - do: + snapshot.create_repository: + repository: repo + body: + type: fs + settings: + location: "my-snaps" + + - do: + slm.put_lifecycle: + policy_id: "daily-snapshots" + body: | + { + "schedule": "0 1 2 3 4 ?", + "name": "", + "repository": "repo", + "config": { + "indices": ["foo-*", "important"], + "ignore_unavailable": false, + "include_global_state": false + }, + "retention": { + "expire_after": "30d", + "min_count": 1, + "max_count": 50 + } + } + + - do: + slm.get_lifecycle: + policy_id: "daily-snapshots" + - match: { daily-snapshots.version: 1 } + - match: { daily-snapshots.policy.name: "" } + - is_true: daily-snapshots.next_execution_millis + - is_true: daily-snapshots.stats + - match: { daily-snapshots.policy.schedule: "0 1 2 3 4 ?" } + + - do: + slm.put_lifecycle: + policy_id: "daily-snapshots" + body: | + { + "schedule": "1 1 1 1 1 ?", + "name": "", + "repository": "repo", + "config": { + "indices": ["foo-*", "important"], + "ignore_unavailable": false, + "include_global_state": false + }, + "retention": { + "expire_after": "30d", + "min_count": 1, + "max_count": 50 + } + } + + - do: + catch: missing + slm.get_lifecycle: + policy_id: "doesnt-exist" + + - do: + slm.get_lifecycle: + policy_id: "daily-snapshots" + - match: { daily-snapshots.version: 2 } + - match: { daily-snapshots.policy.schedule: "1 1 1 1 1 ?" } + - is_true: daily-snapshots.next_execution_millis + - is_true: daily-snapshots.stats diff --git a/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/slm/action/TransportGetSnapshotLifecycleAction.java b/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/slm/action/TransportGetSnapshotLifecycleAction.java index 90d302eb403d2..f4af0d5c5a7b3 100644 --- a/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/slm/action/TransportGetSnapshotLifecycleAction.java +++ b/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/slm/action/TransportGetSnapshotLifecycleAction.java @@ -8,6 +8,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.elasticsearch.ResourceNotFoundException; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.support.ActionFilters; import org.elasticsearch.action.support.master.TransportMasterNodeAction; @@ -65,7 +66,13 @@ protected void masterOperation(final Task task, final GetSnapshotLifecycleAction final ActionListener listener) { SnapshotLifecycleMetadata snapMeta = state.metaData().custom(SnapshotLifecycleMetadata.TYPE); if (snapMeta == null) { - listener.onResponse(new GetSnapshotLifecycleAction.Response(Collections.emptyList())); + if (request.getLifecycleIds().length == 0) { + listener.onResponse(new GetSnapshotLifecycleAction.Response(Collections.emptyList())); + } else { + listener.onFailure(new ResourceNotFoundException( + "snapshot lifecycle policy or policies {} not found, no policies are configured", + Arrays.toString(request.getLifecycleIds()))); + } } else { final Map inProgress; SnapshotsInProgress sip = state.custom(SnapshotsInProgress.TYPE); @@ -100,7 +107,16 @@ protected void masterOperation(final Task task, final GetSnapshotLifecycleAction new SnapshotLifecyclePolicyItem(policyMeta, inProgress.get(policyMeta.getPolicy().getId()), slmStats.getMetrics().get(policyMeta.getPolicy().getId()))) .collect(Collectors.toList()); - listener.onResponse(new GetSnapshotLifecycleAction.Response(lifecycles)); + if (lifecycles.size() == 0) { + if (request.getLifecycleIds().length == 0) { + listener.onResponse(new GetSnapshotLifecycleAction.Response(Collections.emptyList())); + } else { + listener.onFailure(new ResourceNotFoundException("snapshot lifecycle policy or policies {} not found", + Arrays.toString(request.getLifecycleIds()))); + } + } else { + listener.onResponse(new GetSnapshotLifecycleAction.Response(lifecycles)); + } } }