Skip to content

Commit 9c285dd

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 b4ed7f4 commit 9c285dd

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
@@ -450,9 +450,14 @@ public Collection<Object> createComponents(Client client, ClusterService cluster
450450
clusterService);
451451
normalizerProcessFactory = new NativeNormalizerProcessFactory(environment, nativeController);
452452
} catch (IOException e) {
453-
// This also should not happen in production, as the MachineLearningFeatureSet should have
454-
// hit the same error first and brought down the node with a friendlier error message
455-
throw new ElasticsearchException("Failed to create native process factories for Machine Learning", e);
453+
// The low level cause of failure from the named pipe helper's perspective is almost never the real root cause, so
454+
// only log this at the lowest level of detail. It's almost always "file not found" on a named pipe we expect to be
455+
// able to connect to, but the thing we really need to know is what stopped the native process creating the named pipe.
456+
logger.trace("Failed to connect to ML native controller", e);
457+
throw new ElasticsearchException("Failure running machine learning native code. This could be due to running "
458+
+ "on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To "
459+
+ "bypass this problem by running Elasticsearch without machine learning functionality set ["
460+
+ XPackSettings.MACHINE_LEARNING_ENABLED.getKey() + ": false].");
456461
}
457462
} else {
458463
autodetectProcessFactory = (job, autodetectParams, executorService, onProcessCrash) ->

0 commit comments

Comments
 (0)