Skip to content

Commit df60396

Browse files
Fix null config in SnapshotLifecyclePolicy.toRequest (elastic#53328)
This avoids NPE when executing SLM policy when no config was provided. Related to elastic#44465 Closes elastic#53171 Co-authored-by: Elastic Machine <[email protected]>
1 parent b351492 commit df60396

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/slm/SnapshotLifecyclePolicy.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,10 @@ public String generateSnapshotName(Context context) {
254254
*/
255255
public CreateSnapshotRequest toRequest() {
256256
CreateSnapshotRequest req = new CreateSnapshotRequest(repository, generateSnapshotName(new ResolverContext()));
257+
Map<String, Object> mergedConfiguration = configuration == null ? new HashMap<>() : new HashMap<>(configuration);
257258
@SuppressWarnings("unchecked")
258-
Map<String, Object> metadata = (Map<String, Object>) configuration.get("metadata");
259+
Map<String, Object> metadata = (Map<String, Object>) mergedConfiguration.get("metadata");
259260
Map<String, Object> metadataWithAddedPolicyName = addPolicyNameToMetadata(metadata);
260-
Map<String, Object> mergedConfiguration = new HashMap<>(configuration);
261261
mergedConfiguration.put("metadata", metadataWithAddedPolicyName);
262262
req.source(mergedConfiguration);
263263
req.waitForCompletion(true);

x-pack/plugin/ilm/src/test/java/org/elasticsearch/xpack/slm/SnapshotLifecyclePolicyTests.java

+13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package org.elasticsearch.xpack.slm;
88

9+
import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequest;
910
import org.elasticsearch.common.ValidationException;
1011
import org.elasticsearch.common.io.stream.Writeable;
1112
import org.elasticsearch.common.xcontent.XContentParser;
@@ -30,6 +31,18 @@ public class SnapshotLifecyclePolicyTests extends AbstractSerializingTestCase<Sn
3031

3132
private String id;
3233

34+
public void testToRequest() {
35+
SnapshotLifecyclePolicy p = new SnapshotLifecyclePolicy("id", "name", "0 1 2 3 4 ? 2099", "repo", Collections.emptyMap(),
36+
SnapshotRetentionConfiguration.EMPTY);
37+
CreateSnapshotRequest request = p.toRequest();
38+
CreateSnapshotRequest expected = new CreateSnapshotRequest().userMetadata(Collections.singletonMap("policy", "id"));
39+
40+
p = new SnapshotLifecyclePolicy("id", "name", "0 1 2 3 4 ? 2099", "repo", null, null);
41+
request = p.toRequest();
42+
expected.waitForCompletion(true).snapshot(request.snapshot()).repository("repo");
43+
assertEquals(expected, request);
44+
}
45+
3346
public void testNameGeneration() {
3447
long time = 1552684146542L; // Fri Mar 15 2019 21:09:06 UTC
3548
SnapshotLifecyclePolicy.ResolverContext context = new SnapshotLifecyclePolicy.ResolverContext(time);

0 commit comments

Comments
 (0)