Skip to content

Commit a3eb70b

Browse files
authored
add logging (#93801)
I added more logging information to catch #90019.
1 parent 50494ba commit a3eb70b

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@
1515
import org.elasticsearch.action.search.SearchResponse;
1616
import org.elasticsearch.action.support.WriteRequest;
1717
import org.elasticsearch.common.settings.Settings;
18+
import org.elasticsearch.core.Strings;
1819
import org.elasticsearch.search.SearchHit;
1920
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsConfig;
2021
import org.elasticsearch.xpack.core.ml.dataframe.analyses.BoostedTreeParams;
2122
import org.elasticsearch.xpack.core.ml.dataframe.analyses.Classification;
23+
import org.elasticsearch.xpack.core.ml.inference.TrainedModelDefinition;
24+
import org.elasticsearch.xpack.core.ml.inference.trainedmodel.ensemble.Ensemble;
25+
import org.elasticsearch.xpack.core.ml.inference.trainedmodel.metadata.Hyperparameters;
26+
import org.elasticsearch.xpack.core.ml.inference.trainedmodel.metadata.TrainedModelMetadata;
2227
import org.junit.After;
2328
import org.junit.Before;
2429

@@ -1541,6 +1546,7 @@ public void cleanup() {
15411546
}
15421547

15431548
public void testFeatureImportanceValues() throws Exception {
1549+
String predictionField = TARGET_FIELD + "_prediction";
15441550
initialize("classification_house_pricing_test_feature_importance_values");
15451551
indexData(sourceIndex);
15461552
DataFrameAnalyticsConfig config = buildAnalytics(
@@ -1571,12 +1577,34 @@ public void testFeatureImportanceValues() throws Exception {
15711577

15721578
client().admin().indices().refresh(new RefreshRequest(destIndex));
15731579
SearchResponse sourceData = client().prepareSearch(sourceIndex).setTrackTotalHits(true).setSize(1000).get();
1580+
1581+
// obtain addition information for investigation of #90599
1582+
String modelId = getModelId(jobId);
1583+
TrainedModelMetadata modelMetadata = getModelMetadata(modelId);
1584+
assertThat(modelMetadata.getHyperparameters().size(), greaterThan(0));
1585+
StringBuilder hyperparameters = new StringBuilder(); // used to investigate #90019
1586+
for (Hyperparameters hyperparameter : modelMetadata.getHyperparameters()) {
1587+
hyperparameters.append(hyperparameter.hyperparameterName).append(": ").append(hyperparameter.value).append("\n");
1588+
}
1589+
TrainedModelDefinition modelDefinition = getModelDefinition(modelId);
1590+
Ensemble ensemble = (Ensemble) modelDefinition.getTrainedModel();
1591+
int numberTrees = ensemble.getModels().size();
1592+
String str = "Failure: failed for modelId %s numberTrees %d\n";
15741593
for (SearchHit hit : sourceData.getHits()) {
15751594
Map<String, Object> destDoc = getDestDoc(config, hit);
1595+
assertNotNull(destDoc);
15761596
Map<String, Object> resultsObject = getFieldValue(destDoc, "ml");
1597+
assertThat(resultsObject.containsKey(predictionField), is(true));
1598+
String predictionValue = (String) resultsObject.get(predictionField);
1599+
assertNotNull(predictionValue);
1600+
assertThat(resultsObject.containsKey("feature_importance"), is(true));
15771601
@SuppressWarnings("unchecked")
15781602
List<Map<String, Object>> importanceArray = (List<Map<String, Object>>) resultsObject.get("feature_importance");
1579-
assertThat(importanceArray, hasSize(greaterThan(0)));
1603+
assertThat(
1604+
Strings.format(str, modelId, numberTrees) + predictionValue + hyperparameters + modelDefinition,
1605+
importanceArray,
1606+
hasSize(greaterThan(0))
1607+
);
15801608
}
15811609

15821610
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@
1111
import org.elasticsearch.action.search.SearchResponse;
1212
import org.elasticsearch.cluster.ClusterState;
1313
import org.elasticsearch.common.Strings;
14+
import org.elasticsearch.common.settings.Settings;
1415
import org.elasticsearch.common.xcontent.XContentHelper;
1516
import org.elasticsearch.core.Nullable;
1617
import org.elasticsearch.core.TimeValue;
1718
import org.elasticsearch.index.query.QueryBuilder;
1819
import org.elasticsearch.index.query.QueryBuilders;
1920
import org.elasticsearch.persistent.PersistentTasksCustomMetadata;
2021
import org.elasticsearch.search.SearchHit;
22+
import org.elasticsearch.search.SearchModule;
2123
import org.elasticsearch.tasks.TaskInfo;
24+
import org.elasticsearch.xcontent.NamedXContentRegistry;
2225
import org.elasticsearch.xcontent.XContentParser;
2326
import org.elasticsearch.xcontent.XContentParserConfiguration;
2427
import org.elasticsearch.xcontent.XContentType;
@@ -40,7 +43,9 @@
4043
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsSource;
4144
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsState;
4245
import org.elasticsearch.xpack.core.ml.dataframe.analyses.DataFrameAnalysis;
46+
import org.elasticsearch.xpack.core.ml.dataframe.analyses.MlDataFrameAnalysisNamedXContentProvider;
4347
import org.elasticsearch.xpack.core.ml.dataframe.evaluation.Evaluation;
48+
import org.elasticsearch.xpack.core.ml.inference.MlInferenceNamedXContentProvider;
4449
import org.elasticsearch.xpack.core.ml.inference.TrainedModelConfig;
4550
import org.elasticsearch.xpack.core.ml.inference.TrainedModelDefinition;
4651
import org.elasticsearch.xpack.core.ml.inference.persistence.InferenceIndexConstants;
@@ -55,6 +60,7 @@
5560

5661
import java.io.IOException;
5762
import java.io.UncheckedIOException;
63+
import java.util.ArrayList;
5864
import java.util.Arrays;
5965
import java.util.Collection;
6066
import java.util.Collections;
@@ -80,6 +86,15 @@
8086
*/
8187
abstract class MlNativeDataFrameAnalyticsIntegTestCase extends MlNativeIntegTestCase {
8288

89+
@Override
90+
protected NamedXContentRegistry xContentRegistry() {
91+
SearchModule searchModule = new SearchModule(Settings.EMPTY, Collections.emptyList());
92+
List<NamedXContentRegistry.Entry> entries = new ArrayList<>(searchModule.getNamedXContents());
93+
entries.addAll(new MlInferenceNamedXContentProvider().getNamedXContentParsers());
94+
entries.addAll(new MlDataFrameAnalysisNamedXContentProvider().getNamedXContentParsers());
95+
return new NamedXContentRegistry(entries);
96+
}
97+
8398
protected PutDataFrameAnalyticsAction.Response putAnalytics(DataFrameAnalyticsConfig config) {
8499
PutDataFrameAnalyticsAction.Request request = new PutDataFrameAnalyticsAction.Request(config);
85100
return client().execute(PutDataFrameAnalyticsAction.INSTANCE, request).actionGet();

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,18 @@
1515
import org.elasticsearch.action.index.IndexRequest;
1616
import org.elasticsearch.action.search.SearchResponse;
1717
import org.elasticsearch.action.support.WriteRequest;
18-
import org.elasticsearch.common.settings.Settings;
1918
import org.elasticsearch.core.Strings;
2019
import org.elasticsearch.rest.RestStatus;
2120
import org.elasticsearch.search.SearchHit;
22-
import org.elasticsearch.search.SearchModule;
2321
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
24-
import org.elasticsearch.xcontent.NamedXContentRegistry;
2522
import org.elasticsearch.xpack.core.ml.action.GetDataFrameAnalyticsStatsAction;
2623
import org.elasticsearch.xpack.core.ml.action.GetTrainedModelsAction;
2724
import org.elasticsearch.xpack.core.ml.action.NodeAcknowledgedResponse;
2825
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsConfig;
2926
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsDest;
3027
import org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsSource;
3128
import org.elasticsearch.xpack.core.ml.dataframe.analyses.BoostedTreeParams;
32-
import org.elasticsearch.xpack.core.ml.dataframe.analyses.MlDataFrameAnalysisNamedXContentProvider;
3329
import org.elasticsearch.xpack.core.ml.dataframe.analyses.Regression;
34-
import org.elasticsearch.xpack.core.ml.inference.MlInferenceNamedXContentProvider;
3530
import org.elasticsearch.xpack.core.ml.inference.TrainedModelConfig;
3631
import org.elasticsearch.xpack.core.ml.inference.TrainedModelDefinition;
3732
import org.elasticsearch.xpack.core.ml.inference.preprocessing.OneHotEncoding;
@@ -87,15 +82,6 @@ public void cleanup() {
8782
cleanUp();
8883
}
8984

90-
@Override
91-
protected NamedXContentRegistry xContentRegistry() {
92-
SearchModule searchModule = new SearchModule(Settings.EMPTY, Collections.emptyList());
93-
List<NamedXContentRegistry.Entry> entries = new ArrayList<>(searchModule.getNamedXContents());
94-
entries.addAll(new MlInferenceNamedXContentProvider().getNamedXContentParsers());
95-
entries.addAll(new MlDataFrameAnalysisNamedXContentProvider().getNamedXContentParsers());
96-
return new NamedXContentRegistry(entries);
97-
}
98-
9985
public void testSingleNumericFeatureAndMixedTrainingAndNonTrainingRows() throws Exception {
10086
initialize("regression_single_numeric_feature_and_mixed_data_set");
10187
String predictedClassField = DEPENDENT_VARIABLE_FIELD + "_prediction";

0 commit comments

Comments
 (0)