Skip to content

Commit a8a3533

Browse files
authored
Verify that the failure reason of analytics process is empty (#48042)
1 parent 8ac99b2 commit a8a3533

File tree

6 files changed

+42
-38
lines changed

6 files changed

+42
-38
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/action/GetDataFrameAnalyticsStatsAction.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ public DataFrameAnalyticsState getState() {
232232
return state;
233233
}
234234

235+
public String getFailureReason() {
236+
return failureReason;
237+
}
238+
235239
public List<PhaseProgress> getProgress() {
236240
return progress;
237241
}
@@ -340,6 +344,7 @@ public boolean equals(Object obj) {
340344
return Objects.equals(id, other.id)
341345
&& Objects.equals(this.state, other.state)
342346
&& Objects.equals(this.failureReason, other.failureReason)
347+
&& Objects.equals(this.progress, other.progress)
343348
&& Objects.equals(this.node, other.node)
344349
&& Objects.equals(this.assignmentExplanation, other.assignmentExplanation);
345350
}

x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/ClassificationIT.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.elasticsearch.action.support.WriteRequest;
1616
import org.elasticsearch.search.SearchHit;
1717
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsConfig;
18-
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsState;
1918
import org.elasticsearch.xpack.core.ml.dataframe.analyses.BoostedTreeParamsTests;
2019
import org.elasticsearch.xpack.core.ml.dataframe.analyses.Classification;
2120
import org.junit.After;
@@ -60,7 +59,7 @@ public void testSingleNumericFeatureAndMixedTrainingAndNonTrainingRows() throws
6059
registerAnalytics(config);
6160
putAnalytics(config);
6261

63-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
62+
assertIsStopped(jobId);
6463
assertProgress(jobId, 0, 0, 0, 0);
6564

6665
startAnalytics(jobId);
@@ -98,7 +97,7 @@ public void testWithOnlyTrainingRowsAndTrainingPercentIsHundred() throws Excepti
9897
registerAnalytics(config);
9998
putAnalytics(config);
10099

101-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
100+
assertIsStopped(jobId);
102101
assertProgress(jobId, 0, 0, 0, 0);
103102

104103
startAnalytics(jobId);
@@ -141,7 +140,7 @@ public void testWithOnlyTrainingRowsAndTrainingPercentIsFifty() throws Exception
141140
registerAnalytics(config);
142141
putAnalytics(config);
143142

144-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
143+
assertIsStopped(jobId);
145144
assertProgress(jobId, 0, 0, 0, 0);
146145

147146
startAnalytics(jobId);
@@ -194,7 +193,7 @@ public void testSingleNumericFeatureAndMixedTrainingAndNonTrainingRows_TopClasse
194193
registerAnalytics(config);
195194
putAnalytics(config);
196195

197-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
196+
assertIsStopped(jobId);
198197
assertProgress(jobId, 0, 0, 0, 0);
199198

200199
startAnalytics(jobId);

x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/MlNativeDataFrameAnalyticsIntegTestCase.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import static org.hamcrest.Matchers.anyOf;
4242
import static org.hamcrest.Matchers.equalTo;
4343
import static org.hamcrest.Matchers.is;
44+
import static org.hamcrest.Matchers.nullValue;
4445
import static org.hamcrest.Matchers.startsWith;
4546

4647
/**
@@ -119,20 +120,21 @@ protected void waitUntilAnalyticsIsStopped(String id) throws Exception {
119120
}
120121

121122
protected void waitUntilAnalyticsIsStopped(String id, TimeValue waitTime) throws Exception {
122-
assertBusy(() -> assertThat(getAnalyticsStats(id).get(0).getState(), equalTo(DataFrameAnalyticsState.STOPPED)),
123-
waitTime.getMillis(), TimeUnit.MILLISECONDS);
123+
assertBusy(() -> assertIsStopped(id), waitTime.getMillis(), TimeUnit.MILLISECONDS);
124124
}
125125

126126
protected List<DataFrameAnalyticsConfig> getAnalytics(String id) {
127127
GetDataFrameAnalyticsAction.Request request = new GetDataFrameAnalyticsAction.Request(id);
128128
return client().execute(GetDataFrameAnalyticsAction.INSTANCE, request).actionGet().getResources().results();
129129
}
130130

131-
protected List<GetDataFrameAnalyticsStatsAction.Response.Stats> getAnalyticsStats(String id) {
131+
protected GetDataFrameAnalyticsStatsAction.Response.Stats getAnalyticsStats(String id) {
132132
GetDataFrameAnalyticsStatsAction.Request request = new GetDataFrameAnalyticsStatsAction.Request(id);
133133
GetDataFrameAnalyticsStatsAction.Response response = client().execute(GetDataFrameAnalyticsStatsAction.INSTANCE, request)
134134
.actionGet();
135-
return response.getResponse().results();
135+
List<GetDataFrameAnalyticsStatsAction.Response.Stats> stats = response.getResponse().results();
136+
assertThat("Got: " + stats.toString(), stats.size(), equalTo(1));
137+
return stats.get(0);
136138
}
137139

138140
protected static DataFrameAnalyticsConfig buildAnalytics(String id, String sourceIndex, String destIndex,
@@ -145,18 +147,17 @@ protected static DataFrameAnalyticsConfig buildAnalytics(String id, String sourc
145147
return configBuilder.build();
146148
}
147149

148-
protected void assertState(String id, DataFrameAnalyticsState state) {
149-
List<GetDataFrameAnalyticsStatsAction.Response.Stats> stats = getAnalyticsStats(id);
150-
assertThat(stats.size(), equalTo(1));
151-
assertThat(stats.get(0).getId(), equalTo(id));
152-
assertThat(stats.get(0).getState(), equalTo(state));
150+
protected void assertIsStopped(String id) {
151+
GetDataFrameAnalyticsStatsAction.Response.Stats stats = getAnalyticsStats(id);
152+
assertThat(stats.getId(), equalTo(id));
153+
assertThat(stats.getFailureReason(), is(nullValue()));
154+
assertThat(stats.getState(), equalTo(DataFrameAnalyticsState.STOPPED));
153155
}
154156

155157
protected void assertProgress(String id, int reindexing, int loadingData, int analyzing, int writingResults) {
156-
List<GetDataFrameAnalyticsStatsAction.Response.Stats> stats = getAnalyticsStats(id);
157-
List<PhaseProgress> progress = stats.get(0).getProgress();
158-
assertThat(stats.size(), equalTo(1));
159-
assertThat(stats.get(0).getId(), equalTo(id));
158+
GetDataFrameAnalyticsStatsAction.Response.Stats stats = getAnalyticsStats(id);
159+
assertThat(stats.getId(), equalTo(id));
160+
List<PhaseProgress> progress = stats.getProgress();
160161
assertThat(progress.size(), equalTo(4));
161162
assertThat(progress.get(0).getPhase(), equalTo("reindexing"));
162163
assertThat(progress.get(1).getPhase(), equalTo("loading_data"));

x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/OutlierDetectionWithMissingFieldsIT.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.elasticsearch.action.support.WriteRequest;
1414
import org.elasticsearch.search.SearchHit;
1515
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsConfig;
16-
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsState;
1716
import org.elasticsearch.xpack.core.ml.dataframe.analyses.OutlierDetection;
1817
import org.junit.After;
1918

@@ -74,7 +73,7 @@ public void testMissingFields() throws Exception {
7473
registerAnalytics(config);
7574
putAnalytics(config);
7675

77-
assertState(id, DataFrameAnalyticsState.STOPPED);
76+
assertIsStopped(id);
7877
assertProgress(id, 0, 0, 0, 0);
7978

8079
startAnalytics(id);

x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/RegressionIT.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void testSingleNumericFeatureAndMixedTrainingAndNonTrainingRows() throws
8181
registerAnalytics(config);
8282
putAnalytics(config);
8383

84-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
84+
assertIsStopped(jobId);
8585
assertProgress(jobId, 0, 0, 0, 0);
8686

8787
startAnalytics(jobId);
@@ -141,7 +141,7 @@ public void testWithOnlyTrainingRowsAndTrainingPercentIsHundred() throws Excepti
141141
registerAnalytics(config);
142142
putAnalytics(config);
143143

144-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
144+
assertIsStopped(jobId);
145145
assertProgress(jobId, 0, 0, 0, 0);
146146

147147
startAnalytics(jobId);
@@ -199,7 +199,7 @@ public void testWithOnlyTrainingRowsAndTrainingPercentIsFifty() throws Exception
199199
registerAnalytics(config);
200200
putAnalytics(config);
201201

202-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
202+
assertIsStopped(jobId);
203203
assertProgress(jobId, 0, 0, 0, 0);
204204

205205
startAnalytics(jobId);
@@ -259,14 +259,14 @@ public void testStopAndRestart() throws Exception {
259259
registerAnalytics(config);
260260
putAnalytics(config);
261261

262-
assertState(jobId, DataFrameAnalyticsState.STOPPED);
262+
assertIsStopped(jobId);
263263
assertProgress(jobId, 0, 0, 0, 0);
264264

265265
startAnalytics(jobId);
266266

267267
// Wait until state is one of REINDEXING or ANALYZING, or until it is STOPPED.
268268
assertBusy(() -> {
269-
DataFrameAnalyticsState state = getAnalyticsStats(jobId).get(0).getState();
269+
DataFrameAnalyticsState state = getAnalyticsStats(jobId).getState();
270270
assertThat(state, is(anyOf(equalTo(DataFrameAnalyticsState.REINDEXING), equalTo(DataFrameAnalyticsState.ANALYZING),
271271
equalTo(DataFrameAnalyticsState.STOPPED))));
272272
});

x-pack/plugin/ml/qa/native-multi-node-tests/src/test/java/org/elasticsearch/xpack/ml/integration/RunDataFrameAnalyticsIT.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void testOutlierDetectionWithFewDocuments() throws Exception {
8080
registerAnalytics(config);
8181
putAnalytics(config);
8282

83-
assertState(id, DataFrameAnalyticsState.STOPPED);
83+
assertIsStopped(id);
8484
assertProgress(id, 0, 0, 0, 0);
8585

8686
startAnalytics(id);
@@ -157,7 +157,7 @@ public void testOutlierDetectionWithEnoughDocumentsToScroll() throws Exception {
157157
registerAnalytics(config);
158158
putAnalytics(config);
159159

160-
assertState(id, DataFrameAnalyticsState.STOPPED);
160+
assertIsStopped(id);
161161
assertProgress(id, 0, 0, 0, 0);
162162

163163
startAnalytics(id);
@@ -228,7 +228,7 @@ public void testOutlierDetectionWithMoreFieldsThanDocValueFieldLimit() throws Ex
228228
registerAnalytics(config);
229229
putAnalytics(config);
230230

231-
assertState(id, DataFrameAnalyticsState.STOPPED);
231+
assertIsStopped(id);
232232
assertProgress(id, 0, 0, 0, 0);
233233

234234
startAnalytics(id);
@@ -293,12 +293,12 @@ public void testStopOutlierDetectionWithEnoughDocumentsToScroll() throws Excepti
293293
registerAnalytics(config);
294294
putAnalytics(config);
295295

296-
assertState(id, DataFrameAnalyticsState.STOPPED);
296+
assertIsStopped(id);
297297
startAnalytics(id);
298298
// State here could be any of STARTED, REINDEXING or ANALYZING
299299

300300
assertThat(stopAnalytics(id).isStopped(), is(true));
301-
assertState(id, DataFrameAnalyticsState.STOPPED);
301+
assertIsStopped(id);
302302
if (indexExists(config.getDest().getIndex()) == false) {
303303
// We stopped before we even created the destination index
304304
return;
@@ -363,7 +363,7 @@ public void testOutlierDetectionWithMultipleSourceIndices() throws Exception {
363363
registerAnalytics(config);
364364
putAnalytics(config);
365365

366-
assertState(id, DataFrameAnalyticsState.STOPPED);
366+
assertIsStopped(id);
367367
assertProgress(id, 0, 0, 0, 0);
368368

369369
startAnalytics(id);
@@ -421,7 +421,7 @@ public void testOutlierDetectionWithPreExistingDestIndex() throws Exception {
421421
registerAnalytics(config);
422422
putAnalytics(config);
423423

424-
assertState(id, DataFrameAnalyticsState.STOPPED);
424+
assertIsStopped(id);
425425
assertProgress(id, 0, 0, 0, 0);
426426

427427
startAnalytics(id);
@@ -480,7 +480,7 @@ public void testModelMemoryLimitLowerThanEstimatedMemoryUsage() throws Exception
480480

481481
registerAnalytics(config);
482482
putAnalytics(config);
483-
assertState(id, DataFrameAnalyticsState.STOPPED);
483+
assertIsStopped(id);
484484

485485
ElasticsearchStatusException exception = expectThrows(ElasticsearchStatusException.class, () -> startAnalytics(id));
486486
assertThat(exception.status(), equalTo(RestStatus.BAD_REQUEST));
@@ -525,14 +525,14 @@ public void testLazyAssignmentWithModelMemoryLimitTooHighForAssignment() throws
525525

526526
registerAnalytics(config);
527527
putAnalytics(config);
528-
assertState(id, DataFrameAnalyticsState.STOPPED);
528+
assertIsStopped(id);
529529

530530
// Due to lazy start being allowed, this should succeed even though no node currently in the cluster is big enough
531531
startAnalytics(id);
532532

533533
// Wait until state is STARTING, there is no node but there is an assignment explanation.
534534
assertBusy(() -> {
535-
GetDataFrameAnalyticsStatsAction.Response.Stats stats = getAnalyticsStats(id).get(0);
535+
GetDataFrameAnalyticsStatsAction.Response.Stats stats = getAnalyticsStats(id);
536536
assertThat(stats.getState(), equalTo(DataFrameAnalyticsState.STARTING));
537537
assertThat(stats.getNode(), is(nullValue()));
538538
assertThat(stats.getAssignmentExplanation(), containsString("persistent task is awaiting node assignment"));
@@ -576,12 +576,12 @@ public void testOutlierDetectionStopAndRestart() throws Exception {
576576
registerAnalytics(config);
577577
putAnalytics(config);
578578

579-
assertState(id, DataFrameAnalyticsState.STOPPED);
579+
assertIsStopped(id);
580580
startAnalytics(id);
581581

582582
// Wait until state is one of REINDEXING or ANALYZING, or until it is STOPPED.
583583
assertBusy(() -> {
584-
DataFrameAnalyticsState state = getAnalyticsStats(id).get(0).getState();
584+
DataFrameAnalyticsState state = getAnalyticsStats(id).getState();
585585
assertThat(state, is(anyOf(equalTo(DataFrameAnalyticsState.REINDEXING), equalTo(DataFrameAnalyticsState.ANALYZING),
586586
equalTo(DataFrameAnalyticsState.STOPPED))));
587587
});
@@ -652,7 +652,7 @@ public void testOutlierDetectionWithCustomParams() throws Exception {
652652
registerAnalytics(config);
653653
putAnalytics(config);
654654

655-
assertState(id, DataFrameAnalyticsState.STOPPED);
655+
assertIsStopped(id);
656656
assertProgress(id, 0, 0, 0, 0);
657657

658658
startAnalytics(id);

0 commit comments

Comments
 (0)