Skip to content

Commit 4e0f197

Browse files
committed
[ML] Improve message when native controller cannot connect (#43565)
The error message if the native controller failed to run (for example due to running Elasticsearch on an unsupported platform) was not easy to understand. This change removes pointless detail from the message and adds some hints about likely causes. Fixes #42341
1 parent 57b51d9 commit 4e0f197

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/MachineLearning.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,14 @@ public Collection<Object> createComponents(Client client, ClusterService cluster
425425
clusterService);
426426
normalizerProcessFactory = new NativeNormalizerProcessFactory(environment, nativeController);
427427
} catch (IOException e) {
428-
// This also should not happen in production, as the MachineLearningFeatureSet should have
429-
// hit the same error first and brought down the node with a friendlier error message
430-
throw new ElasticsearchException("Failed to create native process factories for Machine Learning", e);
428+
// The low level cause of failure from the named pipe helper's perspective is almost never the real root cause, so
429+
// only log this at the lowest level of detail. It's almost always "file not found" on a named pipe we expect to be
430+
// able to connect to, but the thing we really need to know is what stopped the native process creating the named pipe.
431+
logger.trace("Failed to connect to ML native controller", e);
432+
throw new ElasticsearchException("Failure running machine learning native code. This could be due to running "
433+
+ "on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To "
434+
+ "bypass this problem by running Elasticsearch without machine learning functionality set ["
435+
+ XPackSettings.MACHINE_LEARNING_ENABLED.getKey() + ": false].");
431436
}
432437
} else {
433438
autodetectProcessFactory = (job, autodetectParams, executorService, onProcessCrash) ->

0 commit comments

Comments
 (0)