Skip to content

Commit 67ff2ef

Browse files
authored
Allow empty/missing SLM retention configuration (#45018)
Semi-related to #44465, this allows the `"retention"` configuration map to be missing. Relates to #43663
1 parent d3775fc commit 67ff2ef

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/slm/SnapshotLifecyclePolicy.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,16 @@ public class SnapshotLifecyclePolicy implements ToXContentObject {
6363
PARSER.declareString(ConstructingObjectParser.constructorArg(), SCHEDULE);
6464
PARSER.declareString(ConstructingObjectParser.constructorArg(), REPOSITORY);
6565
PARSER.declareObject(ConstructingObjectParser.optionalConstructorArg(), (p, c) -> p.map(), CONFIG);
66-
PARSER.declareObject(ConstructingObjectParser.constructorArg(), SnapshotRetentionConfiguration::parse, RETENTION);
66+
PARSER.declareObject(ConstructingObjectParser.optionalConstructorArg(), SnapshotRetentionConfiguration::parse, RETENTION);
6767
}
6868

6969
public SnapshotLifecyclePolicy(final String id, final String name, final String schedule,
70-
final String repository, @Nullable Map<String, Object> configuration,
71-
SnapshotRetentionConfiguration retentionPolicy) {
72-
this.id = Objects.requireNonNull(id);
73-
this.name = name;
74-
this.schedule = schedule;
75-
this.repository = repository;
70+
final String repository, @Nullable final Map<String, Object> configuration,
71+
@Nullable final SnapshotRetentionConfiguration retentionPolicy) {
72+
this.id = Objects.requireNonNull(id, "policy id is required");
73+
this.name = Objects.requireNonNull(name, "policy snapshot name is required");
74+
this.schedule = Objects.requireNonNull(schedule, "policy schedule is required");
75+
this.repository = Objects.requireNonNull(repository, "policy snapshot repository is required");
7676
this.configuration = configuration;
7777
this.retentionPolicy = retentionPolicy;
7878
}
@@ -98,6 +98,7 @@ public Map<String, Object> getConfig() {
9898
return this.configuration;
9999
}
100100

101+
@Nullable
101102
public SnapshotRetentionConfiguration getRetentionPolicy() {
102103
return this.retentionPolicy;
103104
}
@@ -115,7 +116,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
115116
if (this.configuration != null) {
116117
builder.field(CONFIG.getPreferredName(), this.configuration);
117118
}
118-
builder.field(RETENTION.getPreferredName(), this.retentionPolicy);
119+
if (this.retentionPolicy != null) {
120+
builder.field(RETENTION.getPreferredName(), this.retentionPolicy);
121+
}
119122
builder.endObject();
120123
return builder;
121124
}

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,12 @@ public class SnapshotLifecyclePolicy extends AbstractDiffable<SnapshotLifecycleP
8282
PARSER.declareString(ConstructingObjectParser.constructorArg(), SCHEDULE);
8383
PARSER.declareString(ConstructingObjectParser.constructorArg(), REPOSITORY);
8484
PARSER.declareObject(ConstructingObjectParser.optionalConstructorArg(), (p, c) -> p.map(), CONFIG);
85-
PARSER.declareObject(ConstructingObjectParser.constructorArg(), SnapshotRetentionConfiguration::parse, RETENTION);
85+
PARSER.declareObject(ConstructingObjectParser.optionalConstructorArg(), SnapshotRetentionConfiguration::parse, RETENTION);
8686
}
8787

8888
public SnapshotLifecyclePolicy(final String id, final String name, final String schedule,
89-
final String repository, @Nullable Map<String, Object> configuration,
90-
final SnapshotRetentionConfiguration retentionPolicy) {
89+
final String repository, @Nullable final Map<String, Object> configuration,
90+
@Nullable final SnapshotRetentionConfiguration retentionPolicy) {
9191
this.id = Objects.requireNonNull(id, "policy id is required");
9292
this.name = Objects.requireNonNull(name, "policy snapshot name is required");
9393
this.schedule = Objects.requireNonNull(schedule, "policy schedule is required");
@@ -102,7 +102,7 @@ public SnapshotLifecyclePolicy(StreamInput in) throws IOException {
102102
this.schedule = in.readString();
103103
this.repository = in.readString();
104104
this.configuration = in.readMap();
105-
this.retentionPolicy = new SnapshotRetentionConfiguration(in);
105+
this.retentionPolicy = in.readOptionalWriteable(SnapshotRetentionConfiguration::new);
106106
}
107107

108108
public String getId() {
@@ -126,6 +126,7 @@ public Map<String, Object> getConfig() {
126126
return this.configuration;
127127
}
128128

129+
@Nullable
129130
public SnapshotRetentionConfiguration getRetentionPolicy() {
130131
return this.retentionPolicy;
131132
}
@@ -271,7 +272,7 @@ public void writeTo(StreamOutput out) throws IOException {
271272
out.writeString(this.schedule);
272273
out.writeString(this.repository);
273274
out.writeMap(this.configuration);
274-
this.retentionPolicy.writeTo(out);
275+
out.writeOptionalWriteable(this.retentionPolicy);
275276
}
276277

277278
@Override
@@ -283,7 +284,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
283284
if (this.configuration != null) {
284285
builder.field(CONFIG.getPreferredName(), this.configuration);
285286
}
286-
builder.field(RETENTION.getPreferredName(), this.retentionPolicy);
287+
if (this.retentionPolicy != null) {
288+
builder.field(RETENTION.getPreferredName(), this.retentionPolicy);
289+
}
287290
builder.endObject();
288291
return builder;
289292
}

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/slm/SnapshotLifecyclePolicyMetadataTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public static SnapshotLifecyclePolicy randomSnapshotLifecyclePolicy(String polic
111111
}
112112

113113
public static SnapshotRetentionConfiguration randomRetention() {
114-
return new SnapshotRetentionConfiguration(rarely() ? null :
114+
return rarely() ? null : new SnapshotRetentionConfiguration(rarely() ? null :
115115
TimeValue.parseTimeValue(randomTimeValue(), "random retention generation"));
116116
}
117117

0 commit comments

Comments
 (0)