diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportForecastJobAction.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportForecastJobAction.java index 6bcadf1ddb06f..3a26f9f863cdb 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportForecastJobAction.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportForecastJobAction.java @@ -97,8 +97,15 @@ private void getForecastRequestStats(String jobId, String forecastId, ActionList } else if (forecastRequestStats.getStatus() == ForecastRequestStats.ForecastRequestStatus.FAILED) { List messages = forecastRequestStats.getMessages(); if (messages.size() > 0) { + String message = messages.get(0); + + // special case: if forecast failed due to insufficient disk space, log the setting + if (message.contains("disk space is insufficient")) { + message += " Minimum disk space required: [" + processManager.getMinLocalStorageAvailable() + "]"; + } + listener.onFailure(ExceptionsHelper.badRequestException("Cannot run forecast: " - + messages.get(0))); + + message)); } else { // paranoia case, it should not be possible to have an empty message list listener.onFailure( diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/process/autodetect/AutodetectProcessManager.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/process/autodetect/AutodetectProcessManager.java index ef03b4f9e7160..fb6e9d46f4064 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/process/autodetect/AutodetectProcessManager.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/process/autodetect/AutodetectProcessManager.java @@ -749,6 +749,10 @@ ExecutorService createAutodetectExecutorService(ExecutorService executorService) return autoDetectWorkerExecutor; } + public ByteSizeValue getMinLocalStorageAvailable() { + return nativeStorageProvider.getMinLocalStorageAvailable(); + } + /* * The autodetect native process can only handle a single operation at a time. In order to guarantee that, all * operations are initially added to a queue and a worker thread from ml autodetect threadpool will process each diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/process/NativeStorageProvider.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/process/NativeStorageProvider.java index 1f9aee7bbeea3..9f366ab11312e 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/process/NativeStorageProvider.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/process/NativeStorageProvider.java @@ -111,6 +111,10 @@ public void cleanupLocalTmpStorage(Path path) throws IOException { } } + public ByteSizeValue getMinLocalStorageAvailable() { + return minLocalStorageAvailable; + } + long getUsableSpace(Path path) throws IOException { long freeSpaceInBytes = Environment.getFileStore(path).getUsableSpace();