Skip to content

Commit 7c882fe

Browse files
committed
Add max_single_primary_size as a condition for the ILM rollover action (#68917)
1 parent 72fff4d commit 7c882fe

File tree

21 files changed

+249
-120
lines changed

21 files changed

+249
-120
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/RolloverAction.java

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,43 +20,56 @@
2020
import java.io.IOException;
2121
import java.util.Objects;
2222

23-
2423
public class RolloverAction implements LifecycleAction, ToXContentObject {
2524
public static final String NAME = "rollover";
2625
private static final ParseField MAX_SIZE_FIELD = new ParseField("max_size");
27-
private static final ParseField MAX_DOCS_FIELD = new ParseField("max_docs");
26+
private static final ParseField MAX_SINGLE_PRIMARY_SIZE_FIELD = new ParseField("max_single_primary_size");
2827
private static final ParseField MAX_AGE_FIELD = new ParseField("max_age");
28+
private static final ParseField MAX_DOCS_FIELD = new ParseField("max_docs");
2929

3030
private static final ConstructingObjectParser<RolloverAction, Void> PARSER = new ConstructingObjectParser<>(NAME, true,
31-
a -> new RolloverAction((ByteSizeValue) a[0], (TimeValue) a[1], (Long) a[2]));
31+
a -> new RolloverAction((ByteSizeValue) a[0], (ByteSizeValue) a[1], (TimeValue) a[2], (Long) a[3]));
32+
3233
static {
3334
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
34-
(p, c) -> ByteSizeValue.parseBytesSizeValue(p.text(), MAX_SIZE_FIELD.getPreferredName()), MAX_SIZE_FIELD, ValueType.VALUE);
35+
(p, c) -> ByteSizeValue.parseBytesSizeValue(p.text(), MAX_SIZE_FIELD.getPreferredName()),
36+
MAX_SIZE_FIELD, ValueType.VALUE);
37+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
38+
(p, c) -> ByteSizeValue.parseBytesSizeValue(p.text(), MAX_SINGLE_PRIMARY_SIZE_FIELD.getPreferredName()),
39+
MAX_SINGLE_PRIMARY_SIZE_FIELD, ValueType.VALUE);
3540
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
36-
(p, c) -> TimeValue.parseTimeValue(p.text(), MAX_AGE_FIELD.getPreferredName()), MAX_AGE_FIELD, ValueType.VALUE);
41+
(p, c) -> TimeValue.parseTimeValue(p.text(), MAX_AGE_FIELD.getPreferredName()),
42+
MAX_AGE_FIELD, ValueType.VALUE);
3743
PARSER.declareLong(ConstructingObjectParser.optionalConstructorArg(), MAX_DOCS_FIELD);
3844
}
3945

4046
private final ByteSizeValue maxSize;
41-
private final Long maxDocs;
47+
private final ByteSizeValue maxSinglePrimarySize;
4248
private final TimeValue maxAge;
49+
private final Long maxDocs;
4350

4451
public static RolloverAction parse(XContentParser parser) {
4552
return PARSER.apply(parser, null);
4653
}
4754

48-
public RolloverAction(ByteSizeValue maxSize, TimeValue maxAge, Long maxDocs) {
49-
if (maxSize == null && maxAge == null && maxDocs == null) {
55+
public RolloverAction(ByteSizeValue maxSize, ByteSizeValue maxSinglePrimarySize, TimeValue maxAge, Long maxDocs) {
56+
if (maxSize == null && maxSinglePrimarySize == null && maxAge == null && maxDocs == null) {
5057
throw new IllegalArgumentException("At least one rollover condition must be set.");
5158
}
5259
this.maxSize = maxSize;
60+
this.maxSinglePrimarySize = maxSinglePrimarySize;
5361
this.maxAge = maxAge;
5462
this.maxDocs = maxDocs;
5563
}
64+
5665
public ByteSizeValue getMaxSize() {
5766
return maxSize;
5867
}
5968

69+
public ByteSizeValue getMaxSinglePrimarySize() {
70+
return maxSinglePrimarySize;
71+
}
72+
6073
public TimeValue getMaxAge() {
6174
return maxAge;
6275
}
@@ -76,6 +89,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
7689
if (maxSize != null) {
7790
builder.field(MAX_SIZE_FIELD.getPreferredName(), maxSize.getStringRep());
7891
}
92+
if (maxSinglePrimarySize != null) {
93+
builder.field(MAX_SINGLE_PRIMARY_SIZE_FIELD.getPreferredName(), maxSinglePrimarySize.getStringRep());
94+
}
7995
if (maxAge != null) {
8096
builder.field(MAX_AGE_FIELD.getPreferredName(), maxAge.getStringRep());
8197
}
@@ -88,7 +104,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
88104

89105
@Override
90106
public int hashCode() {
91-
return Objects.hash(maxSize, maxAge, maxDocs);
107+
return Objects.hash(maxSize, maxSinglePrimarySize, maxAge, maxDocs);
92108
}
93109

94110
@Override
@@ -101,6 +117,7 @@ public boolean equals(Object obj) {
101117
}
102118
RolloverAction other = (RolloverAction) obj;
103119
return Objects.equals(maxSize, other.maxSize) &&
120+
Objects.equals(maxSinglePrimarySize, other.maxSinglePrimarySize) &&
104121
Objects.equals(maxAge, other.maxAge) &&
105122
Objects.equals(maxDocs, other.maxDocs);
106123
}

client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void testStartStopILM() throws Exception {
138138
public void testExplainLifecycle() throws Exception {
139139
Map<String, Phase> lifecyclePhases = new HashMap<>();
140140
Map<String, LifecycleAction> hotActions = new HashMap<>();
141-
hotActions.put(RolloverAction.NAME, new RolloverAction(null, TimeValue.timeValueHours(50 * 24), null));
141+
hotActions.put(RolloverAction.NAME, new RolloverAction(null, null, TimeValue.timeValueHours(50 * 24), null));
142142
Phase hotPhase = new Phase("hot", randomFrom(TimeValue.ZERO, null), hotActions);
143143
lifecyclePhases.put("hot", hotPhase);
144144

client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/ILMDocumentationIT.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void testPutLifecyclePolicy() throws Exception {
9292
Map<String, Phase> phases = new HashMap<>();
9393
Map<String, LifecycleAction> hotActions = new HashMap<>();
9494
hotActions.put(RolloverAction.NAME, new RolloverAction(
95-
new ByteSizeValue(50, ByteSizeUnit.GB), null, null));
95+
new ByteSizeValue(50, ByteSizeUnit.GB), null, null, null));
9696
phases.put("hot", new Phase("hot", TimeValue.ZERO, hotActions)); // <1>
9797

9898
Map<String, LifecycleAction> deleteActions =
@@ -164,7 +164,7 @@ public void testDeletePolicy() throws IOException, InterruptedException {
164164
Map<String, Phase> phases = new HashMap<>();
165165
Map<String, LifecycleAction> hotActions = new HashMap<>();
166166
hotActions.put(RolloverAction.NAME, new RolloverAction(
167-
new ByteSizeValue(50, ByteSizeUnit.GB), null, null));
167+
new ByteSizeValue(50, ByteSizeUnit.GB), null, null, null));
168168
phases.put("hot", new Phase("hot", TimeValue.ZERO, hotActions));
169169
Map<String, LifecycleAction> deleteActions =
170170
Collections.singletonMap(DeleteAction.NAME,
@@ -239,7 +239,7 @@ public void testGetLifecyclePolicy() throws IOException, InterruptedException {
239239
Map<String, Phase> phases = new HashMap<>();
240240
Map<String, LifecycleAction> hotActions = new HashMap<>();
241241
hotActions.put(RolloverAction.NAME, new RolloverAction(
242-
new ByteSizeValue(50, ByteSizeUnit.GB), null, null));
242+
new ByteSizeValue(50, ByteSizeUnit.GB), null, null, null));
243243
phases.put("hot", new Phase("hot", TimeValue.ZERO, hotActions));
244244

245245
Map<String, LifecycleAction> deleteActions =
@@ -339,7 +339,7 @@ public void testExplainLifecycle() throws Exception {
339339
Map<String, Phase> phases = new HashMap<>();
340340
Map<String, LifecycleAction> hotActions = new HashMap<>();
341341
hotActions.put(RolloverAction.NAME, new RolloverAction(
342-
new ByteSizeValue(50, ByteSizeUnit.GB), null, null));
342+
new ByteSizeValue(50, ByteSizeUnit.GB), null, null, null));
343343
phases.put("hot", new Phase("hot", TimeValue.ZERO, hotActions));
344344

345345
LifecyclePolicy policy = new LifecyclePolicy("my_policy",

client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/RolloverActionTests.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,21 @@ protected RolloverAction createTestInstance() {
3232

3333
static RolloverAction randomInstance() {
3434
ByteSizeUnit maxSizeUnit = randomFrom(ByteSizeUnit.values());
35-
ByteSizeValue maxSize = randomBoolean() ? null : new ByteSizeValue(randomNonNegativeLong() / maxSizeUnit.toBytes(1), maxSizeUnit);
36-
Long maxDocs = randomBoolean() ? null : randomNonNegativeLong();
37-
TimeValue maxAge = (maxDocs == null && maxSize == null || randomBoolean())
38-
? TimeValue.parseTimeValue(randomPositiveTimeValue(), "rollover_action_test")
39-
: null;
40-
return new RolloverAction(maxSize, maxAge, maxDocs);
35+
ByteSizeValue maxSize = randomBoolean()
36+
? null : new ByteSizeValue(randomNonNegativeLong() / maxSizeUnit.toBytes(1), maxSizeUnit);
37+
ByteSizeUnit maxSinglePrimarySizeUnit = randomFrom(ByteSizeUnit.values());
38+
ByteSizeValue maxSinglePrimarySize = randomBoolean()
39+
? null : new ByteSizeValue(randomNonNegativeLong() / maxSinglePrimarySizeUnit.toBytes(1), maxSinglePrimarySizeUnit);
40+
TimeValue maxAge = randomBoolean()
41+
? null : TimeValue.parseTimeValue(randomPositiveTimeValue(), "rollover_action_test");
42+
Long maxDocs = (maxSize == null && maxSinglePrimarySize == null && maxAge == null || randomBoolean())
43+
? randomNonNegativeLong() : null;
44+
return new RolloverAction(maxSize, maxSinglePrimarySize, maxAge, maxDocs);
4145
}
4246

4347
public void testNoConditions() {
4448
IllegalArgumentException exception = expectThrows(IllegalArgumentException.class,
45-
() -> new RolloverAction(null, null, null));
49+
() -> new RolloverAction(null, null, null, null));
4650
assertEquals("At least one rollover condition must be set.", exception.getMessage());
4751
}
4852
}

docs/reference/ilm/actions/ilm-rollover.asciidoc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ Replicas are not counted toward the maximum index size.
7171
TIP: To see the current index size, use the <<cat-indices, _cat indices>> API.
7272
The `pri.store.size` value shows the combined size of all primary shards.
7373

74+
`max_single_primary_size`::
75+
(Optional, <<byte-units, byte units>>)
76+
Triggers roll over when the largest primary shard in the index reaches a certain size.
77+
This is the maximum size of the primary shards in the index. As with `max_size`,
78+
replicas are ignored.
79+
+
80+
TIP: To see the current shard size, use the <<cat-shards, _cat shards>> API.
81+
The `store` value shows the size each shard, and `prirep` indicates whether a
82+
shard is a primary (`p`) or a replica (`r`).
83+
7484
[[ilm-rollover-ex]]
7585
==== Example
7686

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/RolloverAction.java

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.elasticsearch.xpack.core.ilm;
88

9+
import org.elasticsearch.Version;
910
import org.elasticsearch.client.Client;
1011
import org.elasticsearch.common.Nullable;
1112
import org.elasticsearch.common.ParseField;
@@ -34,35 +35,45 @@ public class RolloverAction implements LifecycleAction {
3435
public static final String NAME = "rollover";
3536
public static final String INDEXING_COMPLETE_STEP_NAME = "set-indexing-complete";
3637
public static final ParseField MAX_SIZE_FIELD = new ParseField("max_size");
38+
public static final ParseField MAX_SINGLE_PRIMARY_SIZE_FIELD = new ParseField("max_single_primary_size");
3739
public static final ParseField MAX_DOCS_FIELD = new ParseField("max_docs");
3840
public static final ParseField MAX_AGE_FIELD = new ParseField("max_age");
3941
public static final String LIFECYCLE_ROLLOVER_ALIAS = "index.lifecycle.rollover_alias";
4042
public static final Setting<String> LIFECYCLE_ROLLOVER_ALIAS_SETTING = Setting.simpleString(LIFECYCLE_ROLLOVER_ALIAS,
4143
Setting.Property.Dynamic, Setting.Property.IndexScope);
4244

4345
private static final ConstructingObjectParser<RolloverAction, Void> PARSER = new ConstructingObjectParser<>(NAME,
44-
a -> new RolloverAction((ByteSizeValue) a[0], (TimeValue) a[1], (Long) a[2]));
46+
a -> new RolloverAction((ByteSizeValue) a[0], (ByteSizeValue) a[1], (TimeValue) a[2], (Long) a[3]));
47+
4548
static {
4649
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
47-
(p, c) -> ByteSizeValue.parseBytesSizeValue(p.text(), MAX_SIZE_FIELD.getPreferredName()), MAX_SIZE_FIELD, ValueType.VALUE);
50+
(p, c) -> ByteSizeValue.parseBytesSizeValue(p.text(), MAX_SIZE_FIELD.getPreferredName()),
51+
MAX_SIZE_FIELD, ValueType.VALUE);
52+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
53+
(p, c) -> ByteSizeValue.parseBytesSizeValue(p.text(), MAX_SINGLE_PRIMARY_SIZE_FIELD.getPreferredName()),
54+
MAX_SINGLE_PRIMARY_SIZE_FIELD, ValueType.VALUE);
4855
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
49-
(p, c) -> TimeValue.parseTimeValue(p.text(), MAX_AGE_FIELD.getPreferredName()), MAX_AGE_FIELD, ValueType.VALUE);
56+
(p, c) -> TimeValue.parseTimeValue(p.text(), MAX_AGE_FIELD.getPreferredName()),
57+
MAX_AGE_FIELD, ValueType.VALUE);
5058
PARSER.declareLong(ConstructingObjectParser.optionalConstructorArg(), MAX_DOCS_FIELD);
5159
}
5260

5361
private final ByteSizeValue maxSize;
62+
private final ByteSizeValue maxSinglePrimarySize;
5463
private final Long maxDocs;
5564
private final TimeValue maxAge;
5665

5766
public static RolloverAction parse(XContentParser parser) {
5867
return PARSER.apply(parser, null);
5968
}
6069

61-
public RolloverAction(@Nullable ByteSizeValue maxSize, @Nullable TimeValue maxAge, @Nullable Long maxDocs) {
62-
if (maxSize == null && maxAge == null && maxDocs == null) {
70+
public RolloverAction(@Nullable ByteSizeValue maxSize, @Nullable ByteSizeValue maxSinglePrimarySize, @Nullable TimeValue maxAge,
71+
@Nullable Long maxDocs) {
72+
if (maxSize == null && maxSinglePrimarySize == null && maxAge == null && maxDocs == null) {
6373
throw new IllegalArgumentException("At least one rollover condition must be set.");
6474
}
6575
this.maxSize = maxSize;
76+
this.maxSinglePrimarySize = maxSinglePrimarySize;
6677
this.maxAge = maxAge;
6778
this.maxDocs = maxDocs;
6879
}
@@ -73,12 +84,13 @@ public RolloverAction(StreamInput in) throws IOException {
7384
} else {
7485
maxSize = null;
7586
}
76-
maxAge = in.readOptionalTimeValue();
77-
if (in.readBoolean()) {
78-
maxDocs = in.readVLong();
87+
if (in.getVersion().onOrAfter(Version.V_7_13_0) && in.readBoolean()) {
88+
maxSinglePrimarySize = new ByteSizeValue(in);
7989
} else {
80-
maxDocs = null;
90+
maxSinglePrimarySize = null;
8191
}
92+
maxAge = in.readOptionalTimeValue();
93+
maxDocs = in.readOptionalVLong();
8294
}
8395

8496
@Override
@@ -88,12 +100,15 @@ public void writeTo(StreamOutput out) throws IOException {
88100
if (hasMaxSize) {
89101
maxSize.writeTo(out);
90102
}
91-
out.writeOptionalTimeValue(maxAge);
92-
boolean hasMaxDocs = maxDocs != null;
93-
out.writeBoolean(hasMaxDocs);
94-
if (hasMaxDocs) {
95-
out.writeVLong(maxDocs);
103+
if (out.getVersion().onOrAfter(Version.V_7_13_0)) {
104+
boolean hasMaxSinglePrimarySize = maxSinglePrimarySize != null;
105+
out.writeBoolean(hasMaxSinglePrimarySize);
106+
if (hasMaxSinglePrimarySize) {
107+
maxSinglePrimarySize.writeTo(out);
108+
}
96109
}
110+
out.writeOptionalTimeValue(maxAge);
111+
out.writeOptionalVLong(maxDocs);
97112
}
98113

99114
@Override
@@ -105,6 +120,10 @@ public ByteSizeValue getMaxSize() {
105120
return maxSize;
106121
}
107122

123+
public ByteSizeValue getMaxSinglePrimarySize() {
124+
return maxSinglePrimarySize;
125+
}
126+
108127
public TimeValue getMaxAge() {
109128
return maxAge;
110129
}
@@ -119,6 +138,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
119138
if (maxSize != null) {
120139
builder.field(MAX_SIZE_FIELD.getPreferredName(), maxSize.getStringRep());
121140
}
141+
if (maxSinglePrimarySize != null) {
142+
builder.field(MAX_SINGLE_PRIMARY_SIZE_FIELD.getPreferredName(), maxSinglePrimarySize.getStringRep());
143+
}
122144
if (maxAge != null) {
123145
builder.field(MAX_AGE_FIELD.getPreferredName(), maxAge.getStringRep());
124146
}
@@ -145,7 +167,7 @@ public List<Step> toSteps(Client client, String phase, Step.StepKey nextStepKey)
145167
StepKey setIndexingCompleteStepKey = new StepKey(phase, NAME, INDEXING_COMPLETE_STEP_NAME);
146168

147169
WaitForRolloverReadyStep waitForRolloverReadyStep = new WaitForRolloverReadyStep(waitForRolloverReadyStepKey, rolloverStepKey,
148-
client, maxSize, maxAge, maxDocs);
170+
client, maxSize, maxSinglePrimarySize, maxAge, maxDocs);
149171
RolloverStep rolloverStep = new RolloverStep(rolloverStepKey, waitForActiveShardsKey, client);
150172
WaitForActiveShardsStep waitForActiveShardsStep = new WaitForActiveShardsStep(waitForActiveShardsKey, updateDateStepKey);
151173
UpdateRolloverLifecycleDateStep updateDateStep = new UpdateRolloverLifecycleDateStep(updateDateStepKey, setIndexingCompleteStepKey,
@@ -157,7 +179,7 @@ public List<Step> toSteps(Client client, String phase, Step.StepKey nextStepKey)
157179

158180
@Override
159181
public int hashCode() {
160-
return Objects.hash(maxSize, maxAge, maxDocs);
182+
return Objects.hash(maxSize, maxSinglePrimarySize, maxAge, maxDocs);
161183
}
162184

163185
@Override
@@ -170,8 +192,9 @@ public boolean equals(Object obj) {
170192
}
171193
RolloverAction other = (RolloverAction) obj;
172194
return Objects.equals(maxSize, other.maxSize) &&
173-
Objects.equals(maxAge, other.maxAge) &&
174-
Objects.equals(maxDocs, other.maxDocs);
195+
Objects.equals(maxSinglePrimarySize, other.maxSinglePrimarySize) &&
196+
Objects.equals(maxAge, other.maxAge) &&
197+
Objects.equals(maxDocs, other.maxDocs);
175198
}
176199

177200
@Override

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/WaitForRolloverReadyStep.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,15 @@ public class WaitForRolloverReadyStep extends AsyncWaitStep {
3535
public static final String NAME = "check-rollover-ready";
3636

3737
private final ByteSizeValue maxSize;
38+
private final ByteSizeValue maxSinglePrimarySize;
3839
private final TimeValue maxAge;
3940
private final Long maxDocs;
4041

41-
public WaitForRolloverReadyStep(StepKey key, StepKey nextStepKey, Client client, ByteSizeValue maxSize, TimeValue maxAge,
42-
Long maxDocs) {
42+
public WaitForRolloverReadyStep(StepKey key, StepKey nextStepKey, Client client,
43+
ByteSizeValue maxSize, ByteSizeValue maxSinglePrimarySize, TimeValue maxAge, Long maxDocs) {
4344
super(key, nextStepKey, client);
4445
this.maxSize = maxSize;
46+
this.maxSinglePrimarySize = maxSinglePrimarySize;
4547
this.maxAge = maxAge;
4648
this.maxDocs = maxDocs;
4749
}
@@ -139,12 +141,15 @@ public void evaluateCondition(Metadata metadata, Index index, Listener listener,
139141

140142
RolloverRequest rolloverRequest = new RolloverRequest(rolloverTarget, null).masterNodeTimeout(masterTimeout);
141143
rolloverRequest.dryRun(true);
142-
if (maxAge != null) {
143-
rolloverRequest.addMaxIndexAgeCondition(maxAge);
144-
}
145144
if (maxSize != null) {
146145
rolloverRequest.addMaxIndexSizeCondition(maxSize);
147146
}
147+
if (maxSinglePrimarySize != null) {
148+
rolloverRequest.addMaxSinglePrimarySizeCondition(maxSinglePrimarySize);
149+
}
150+
if (maxAge != null) {
151+
rolloverRequest.addMaxIndexAgeCondition(maxAge);
152+
}
148153
if (maxDocs != null) {
149154
rolloverRequest.addMaxIndexDocsCondition(maxDocs);
150155
}
@@ -157,6 +162,10 @@ ByteSizeValue getMaxSize() {
157162
return maxSize;
158163
}
159164

165+
ByteSizeValue getMaxSinglePrimarySize() {
166+
return maxSinglePrimarySize;
167+
}
168+
160169
TimeValue getMaxAge() {
161170
return maxAge;
162171
}
@@ -167,7 +176,7 @@ Long getMaxDocs() {
167176

168177
@Override
169178
public int hashCode() {
170-
return Objects.hash(super.hashCode(), maxSize, maxAge, maxDocs);
179+
return Objects.hash(super.hashCode(), maxSize, maxSinglePrimarySize, maxAge, maxDocs);
171180
}
172181

173182
@Override
@@ -181,6 +190,7 @@ public boolean equals(Object obj) {
181190
WaitForRolloverReadyStep other = (WaitForRolloverReadyStep) obj;
182191
return super.equals(obj) &&
183192
Objects.equals(maxSize, other.maxSize) &&
193+
Objects.equals(maxSinglePrimarySize, other.maxSinglePrimarySize) &&
184194
Objects.equals(maxAge, other.maxAge) &&
185195
Objects.equals(maxDocs, other.maxDocs);
186196
}

0 commit comments

Comments
 (0)