Skip to content

Commit 55c2b0f

Browse files
committed
Pass ProjectMetadata to ILM AsyncWaitStep
Most of these subclasses make use of transport requests, so I'm not calling this change "project-aware" just yet.
1 parent 134813a commit 55c2b0f

17 files changed

+150
-145
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
package org.elasticsearch.xpack.core.ilm;
88

99
import org.elasticsearch.client.internal.Client;
10-
import org.elasticsearch.cluster.metadata.Metadata;
10+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1111
import org.elasticsearch.core.Nullable;
1212
import org.elasticsearch.core.TimeValue;
1313
import org.elasticsearch.index.Index;
@@ -34,7 +34,7 @@ protected Client getClient() {
3434
return client;
3535
}
3636

37-
public abstract void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout);
37+
public abstract void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout);
3838

3939
public interface Listener {
4040

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.elasticsearch.action.admin.indices.segments.ShardSegments;
1515
import org.elasticsearch.action.support.DefaultShardOperationFailedException;
1616
import org.elasticsearch.client.internal.Client;
17-
import org.elasticsearch.cluster.metadata.Metadata;
17+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1818
import org.elasticsearch.cluster.routing.ShardRouting;
1919
import org.elasticsearch.common.Strings;
2020
import org.elasticsearch.core.TimeValue;
@@ -56,7 +56,7 @@ public int getMaxNumSegments() {
5656
}
5757

5858
@Override
59-
public void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
59+
public void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout) {
6060
getClient().admin().indices().segments(new IndicesSegmentsRequest(index.getName()), ActionListener.wrap(response -> {
6161
IndexSegments idxSegments = response.getIndices().get(index.getName());
6262
if (idxSegments == null || (response.getShardFailures() != null && response.getShardFailures().length > 0)) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.elasticsearch.action.ActionListener;
1010
import org.elasticsearch.client.internal.Client;
1111
import org.elasticsearch.cluster.metadata.IndexMetadata;
12-
import org.elasticsearch.cluster.metadata.Metadata;
12+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1313
import org.elasticsearch.common.Strings;
1414
import org.elasticsearch.core.TimeValue;
1515
import org.elasticsearch.index.Index;
@@ -39,8 +39,8 @@ public boolean isRetryable() {
3939
}
4040

4141
@Override
42-
public void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
43-
IndexMetadata indexMetadata = metadata.getProject().index(index);
42+
public void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout) {
43+
IndexMetadata indexMetadata = project.index(index);
4444
Map<String, String> customIndexMetadata = indexMetadata.getCustomData(CCR_METADATA_KEY);
4545
if (customIndexMetadata == null) {
4646
listener.onResponse(true, null);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequest;
1515
import org.elasticsearch.action.admin.indices.stats.ShardStats;
1616
import org.elasticsearch.client.internal.Client;
17-
import org.elasticsearch.cluster.metadata.Metadata;
17+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1818
import org.elasticsearch.core.TimeValue;
1919
import org.elasticsearch.index.Index;
2020
import org.elasticsearch.protocol.xpack.XPackInfoRequest;
@@ -52,7 +52,7 @@ public boolean isRetryable() {
5252
}
5353

5454
@Override
55-
public void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
55+
public void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout) {
5656
XPackInfoRequest xPackInfoRequest = new XPackInfoRequest();
5757
xPackInfoRequest.setCategories(EnumSet.of(XPackInfoRequest.Category.FEATURES));
5858
getClient().execute(XPackInfoFeatureAction.CCR, xPackInfoRequest, ActionListener.wrap((xPackInfoResponse) -> {
@@ -61,11 +61,11 @@ public void evaluateCondition(Metadata metadata, Index index, Listener listener,
6161
listener.onResponse(true, null);
6262
return;
6363
}
64-
leaderIndexCheck(metadata, index, listener, masterTimeout);
64+
leaderIndexCheck(index, listener);
6565
}, listener::onFailure));
6666
}
6767

68-
private void leaderIndexCheck(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
68+
private void leaderIndexCheck(Index index, Listener listener) {
6969
IndicesStatsRequest request = new IndicesStatsRequest();
7070
request.clear();
7171
String indexName = index.getName();

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.elasticsearch.cluster.metadata.IndexAbstraction;
1919
import org.elasticsearch.cluster.metadata.IndexMetadata;
2020
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
21-
import org.elasticsearch.cluster.metadata.Metadata;
21+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
2222
import org.elasticsearch.common.Strings;
2323
import org.elasticsearch.common.unit.ByteSizeValue;
2424
import org.elasticsearch.core.TimeValue;
@@ -80,8 +80,8 @@ public boolean isRetryable() {
8080
}
8181

8282
@Override
83-
public void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
84-
IndexAbstraction indexAbstraction = metadata.getProject().getIndicesLookup().get(index.getName());
83+
public void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout) {
84+
IndexAbstraction indexAbstraction = project.getIndicesLookup().get(index.getName());
8585
assert indexAbstraction != null : "invalid cluster metadata. index [" + index.getName() + "] was not found";
8686
final String rolloverTarget;
8787
final boolean targetFailureStore;
@@ -95,14 +95,14 @@ public void evaluateCondition(Metadata metadata, Index index, Listener listener,
9595
index.getName(),
9696
targetFailureStore ? "failure store " : "",
9797
dataStream.getName(),
98-
metadata.getProject().index(index).getLifecyclePolicyName()
98+
project.index(index).getLifecyclePolicyName()
9999
);
100100
listener.onResponse(true, EmptyInfo.INSTANCE);
101101
return;
102102
}
103103
rolloverTarget = dataStream.getName();
104104
} else {
105-
IndexMetadata indexMetadata = metadata.getProject().index(index);
105+
IndexMetadata indexMetadata = project.index(index);
106106
String rolloverAlias = RolloverAction.LIFECYCLE_ROLLOVER_ALIAS_SETTING.get(indexMetadata.getSettings());
107107

108108
if (Strings.isNullOrEmpty(rolloverAlias)) {
@@ -200,7 +200,7 @@ public void evaluateCondition(Metadata metadata, Index index, Listener listener,
200200

201201
// if we should only rollover if not empty, *and* if neither an explicit min_docs nor an explicit min_primary_shard_docs
202202
// has been specified on this policy, then inject a default min_docs: 1 condition so that we do not rollover empty indices
203-
boolean rolloverOnlyIfHasDocuments = LifecycleSettings.LIFECYCLE_ROLLOVER_ONLY_IF_HAS_DOCUMENTS_SETTING.get(metadata.settings());
203+
boolean rolloverOnlyIfHasDocuments = LifecycleSettings.LIFECYCLE_ROLLOVER_ONLY_IF_HAS_DOCUMENTS_SETTING.get(project.settings());
204204
RolloverRequest rolloverRequest = createRolloverRequest(
205205
rolloverTarget,
206206
masterTimeout,

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.elasticsearch.action.admin.cluster.snapshots.get.GetSnapshotsRequest;
1313
import org.elasticsearch.client.internal.Client;
1414
import org.elasticsearch.cluster.metadata.IndexMetadata;
15-
import org.elasticsearch.cluster.metadata.Metadata;
15+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1616
import org.elasticsearch.common.Strings;
1717
import org.elasticsearch.core.TimeValue;
1818
import org.elasticsearch.index.Index;
@@ -54,8 +54,8 @@ public class WaitForSnapshotStep extends AsyncWaitStep {
5454
}
5555

5656
@Override
57-
public void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
58-
IndexMetadata indexMetadata = metadata.getProject().index(index);
57+
public void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout) {
58+
IndexMetadata indexMetadata = project.index(index);
5959
if (indexMetadata == null) {
6060
listener.onFailure(error(NO_INDEX_METADATA_MESSAGE, index.getName()));
6161
return;
@@ -68,7 +68,7 @@ public void evaluateCondition(Metadata metadata, Index index, Listener listener,
6868
return;
6969
}
7070

71-
SnapshotLifecycleMetadata snapMeta = metadata.getProject().custom(SnapshotLifecycleMetadata.TYPE);
71+
SnapshotLifecycleMetadata snapMeta = project.custom(SnapshotLifecycleMetadata.TYPE);
7272
if (snapMeta == null || snapMeta.getSnapshotConfigurations().containsKey(policy) == false) {
7373
listener.onFailure(error(POLICY_NOT_FOUND_MESSAGE, policy));
7474
return;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import org.elasticsearch.cluster.metadata.IndexMetadata;
1111
import org.elasticsearch.cluster.metadata.LifecycleExecutionState;
12-
import org.elasticsearch.cluster.metadata.Metadata;
12+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1313
import org.elasticsearch.common.Strings;
1414
import org.elasticsearch.core.TimeValue;
1515
import org.elasticsearch.index.Index;
@@ -66,12 +66,12 @@ public boolean equals(Object obj) {
6666
}
6767

6868
@Override
69-
public void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
70-
IndexMetadata indexMetadata = metadata.getProject().index(index);
69+
public void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout) {
70+
IndexMetadata indexMetadata = project.index(index);
7171
assert indexMetadata != null
7272
: "the index metadata for index [" + index.getName() + "] must exist in the cluster state for step [" + NAME + "]";
7373

74-
final LifecycleExecutionState executionState = metadata.getProject().index(index.getName()).getLifecycleExecutionState();
74+
final LifecycleExecutionState executionState = project.index(index.getName()).getLifecycleExecutionState();
7575
assert executionState != null
7676
: "the lifecycle execution state for index [" + index.getName() + "] must exist in the cluster state for step [" + NAME + "]";
7777

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
package org.elasticsearch.xpack.core.ilm;
88

99
import org.elasticsearch.cluster.metadata.IndexMetadata;
10-
import org.elasticsearch.cluster.metadata.Metadata;
10+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1111
import org.elasticsearch.common.Strings;
1212
import org.elasticsearch.core.TimeValue;
1313
import org.elasticsearch.index.Index;
@@ -43,8 +43,8 @@ public boolean isRetryable() {
4343
}
4444

4545
@Override
46-
public void evaluateCondition(Metadata metadata, Index index, Listener listener, TimeValue masterTimeout) {
47-
IndexMetadata indexMetadata = metadata.getProject().index(index);
46+
public void evaluateCondition(ProjectMetadata project, Index index, Listener listener, TimeValue masterTimeout) {
47+
IndexMetadata indexMetadata = project.index(index);
4848
assert indexMetadata != null
4949
: "the index metadata for index [" + index.getName() + "] must exist in the cluster state for step [" + NAME + "]";
5050

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ilm/SegmentCountStepTests.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.elasticsearch.action.admin.indices.segments.ShardSegments;
1515
import org.elasticsearch.action.support.DefaultShardOperationFailedException;
1616
import org.elasticsearch.cluster.metadata.IndexMetadata;
17-
import org.elasticsearch.cluster.metadata.Metadata;
17+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1818
import org.elasticsearch.index.Index;
1919
import org.elasticsearch.index.IndexVersion;
2020
import org.elasticsearch.index.engine.Segment;
@@ -103,7 +103,8 @@ public void testIsConditionMet() {
103103

104104
SegmentCountStep step = new SegmentCountStep(stepKey, nextStepKey, client, maxNumSegments);
105105
IndexMetadata indexMetadata = makeMeta(index);
106-
step.evaluateCondition(Metadata.builder().put(indexMetadata, true).build(), indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
106+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).build();
107+
step.evaluateCondition(project, indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
107108
@Override
108109
public void onResponse(boolean conditionMet, ToXContentObject info) {
109110
conditionMetResult.set(conditionMet);
@@ -155,7 +156,8 @@ public void testIsConditionIsTrueEvenWhenMoreSegments() {
155156

156157
SegmentCountStep step = new SegmentCountStep(stepKey, nextStepKey, client, maxNumSegments);
157158
IndexMetadata indexMetadata = makeMeta(index);
158-
step.evaluateCondition(Metadata.builder().put(indexMetadata, true).build(), indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
159+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).build();
160+
step.evaluateCondition(project, indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
159161
@Override
160162
public void onResponse(boolean conditionMet, ToXContentObject info) {
161163
conditionMetResult.set(conditionMet);
@@ -212,7 +214,8 @@ public void testFailedToRetrieveSomeSegments() {
212214

213215
SegmentCountStep step = new SegmentCountStep(stepKey, nextStepKey, client, maxNumSegments);
214216
IndexMetadata indexMetadata = makeMeta(index);
215-
step.evaluateCondition(Metadata.builder().put(indexMetadata, true).build(), indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
217+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).build();
218+
step.evaluateCondition(project, indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
216219
@Override
217220
public void onResponse(boolean conditionMet, ToXContentObject info) {
218221
conditionMetResult.set(conditionMet);
@@ -249,7 +252,8 @@ public void testThrowsException() {
249252

250253
SegmentCountStep step = new SegmentCountStep(stepKey, nextStepKey, client, maxNumSegments);
251254
IndexMetadata indexMetadata = makeMeta(index);
252-
step.evaluateCondition(Metadata.builder().put(indexMetadata, true).build(), indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
255+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).build();
256+
step.evaluateCondition(project, indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
253257
@Override
254258
public void onResponse(boolean conditionMet, ToXContentObject info) {
255259
throw new AssertionError("unexpected method call");

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ilm/WaitForFollowShardTasksStepTests.java

Lines changed: 40 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import org.elasticsearch.action.ActionListener;
1010
import org.elasticsearch.cluster.metadata.IndexMetadata;
11-
import org.elasticsearch.cluster.metadata.Metadata;
11+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1212
import org.elasticsearch.index.IndexVersion;
1313
import org.elasticsearch.xcontent.ToXContentObject;
1414
import org.elasticsearch.xpack.core.ccr.ShardFollowNodeTaskStatus;
@@ -70,23 +70,19 @@ public void testConditionMet() {
7070
final boolean[] conditionMetHolder = new boolean[1];
7171
final ToXContentObject[] informationContextHolder = new ToXContentObject[1];
7272
final Exception[] exceptionHolder = new Exception[1];
73-
createRandomInstance().evaluateCondition(
74-
Metadata.builder().put(indexMetadata, true).build(),
75-
indexMetadata.getIndex(),
76-
new AsyncWaitStep.Listener() {
77-
@Override
78-
public void onResponse(boolean conditionMet, ToXContentObject informationContext) {
79-
conditionMetHolder[0] = conditionMet;
80-
informationContextHolder[0] = informationContext;
81-
}
82-
83-
@Override
84-
public void onFailure(Exception e) {
85-
exceptionHolder[0] = e;
86-
}
87-
},
88-
MASTER_TIMEOUT
89-
);
73+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).build();
74+
createRandomInstance().evaluateCondition(project, indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
75+
@Override
76+
public void onResponse(boolean conditionMet, ToXContentObject informationContext) {
77+
conditionMetHolder[0] = conditionMet;
78+
informationContextHolder[0] = informationContext;
79+
}
80+
81+
@Override
82+
public void onFailure(Exception e) {
83+
exceptionHolder[0] = e;
84+
}
85+
}, MASTER_TIMEOUT);
9086

9187
assertThat(conditionMetHolder[0], is(true));
9288
assertThat(informationContextHolder[0], nullValue());
@@ -109,23 +105,19 @@ public void testConditionNotMetShardsNotInSync() {
109105
final boolean[] conditionMetHolder = new boolean[1];
110106
final ToXContentObject[] informationContextHolder = new ToXContentObject[1];
111107
final Exception[] exceptionHolder = new Exception[1];
112-
createRandomInstance().evaluateCondition(
113-
Metadata.builder().put(indexMetadata, true).build(),
114-
indexMetadata.getIndex(),
115-
new AsyncWaitStep.Listener() {
116-
@Override
117-
public void onResponse(boolean conditionMet, ToXContentObject informationContext) {
118-
conditionMetHolder[0] = conditionMet;
119-
informationContextHolder[0] = informationContext;
120-
}
121-
122-
@Override
123-
public void onFailure(Exception e) {
124-
exceptionHolder[0] = e;
125-
}
126-
},
127-
MASTER_TIMEOUT
128-
);
108+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).build();
109+
createRandomInstance().evaluateCondition(project, indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
110+
@Override
111+
public void onResponse(boolean conditionMet, ToXContentObject informationContext) {
112+
conditionMetHolder[0] = conditionMet;
113+
informationContextHolder[0] = informationContext;
114+
}
115+
116+
@Override
117+
public void onFailure(Exception e) {
118+
exceptionHolder[0] = e;
119+
}
120+
}, MASTER_TIMEOUT);
129121

130122
assertThat(conditionMetHolder[0], is(false));
131123
assertThat(informationContextHolder[0], notNullValue());
@@ -147,23 +139,19 @@ public void testConditionNotMetNotAFollowerIndex() {
147139
final boolean[] conditionMetHolder = new boolean[1];
148140
final ToXContentObject[] informationContextHolder = new ToXContentObject[1];
149141
final Exception[] exceptionHolder = new Exception[1];
150-
createRandomInstance().evaluateCondition(
151-
Metadata.builder().put(indexMetadata, true).build(),
152-
indexMetadata.getIndex(),
153-
new AsyncWaitStep.Listener() {
154-
@Override
155-
public void onResponse(boolean conditionMet, ToXContentObject informationContext) {
156-
conditionMetHolder[0] = conditionMet;
157-
informationContextHolder[0] = informationContext;
158-
}
159-
160-
@Override
161-
public void onFailure(Exception e) {
162-
exceptionHolder[0] = e;
163-
}
164-
},
165-
MASTER_TIMEOUT
166-
);
142+
final var project = ProjectMetadata.builder(randomProjectIdOrDefault()).put(indexMetadata, true).build();
143+
createRandomInstance().evaluateCondition(project, indexMetadata.getIndex(), new AsyncWaitStep.Listener() {
144+
@Override
145+
public void onResponse(boolean conditionMet, ToXContentObject informationContext) {
146+
conditionMetHolder[0] = conditionMet;
147+
informationContextHolder[0] = informationContext;
148+
}
149+
150+
@Override
151+
public void onFailure(Exception e) {
152+
exceptionHolder[0] = e;
153+
}
154+
}, MASTER_TIMEOUT);
167155

168156
assertThat(conditionMetHolder[0], is(true));
169157
assertThat(informationContextHolder[0], nullValue());

0 commit comments

Comments
 (0)