diff --git a/server/src/main/java/io/druid/segment/indexing/RealtimeTuningConfig.java b/server/src/main/java/io/druid/segment/indexing/RealtimeTuningConfig.java index c9cdf6358ae..179f3c7fc3f 100644 --- a/server/src/main/java/io/druid/segment/indexing/RealtimeTuningConfig.java +++ b/server/src/main/java/io/druid/segment/indexing/RealtimeTuningConfig.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Preconditions; import com.google.common.io.Files; +import io.druid.java.util.common.ISE; import io.druid.segment.IndexSpec; import io.druid.segment.realtime.appenderator.AppenderatorConfig; import io.druid.segment.realtime.plumber.IntervalStartVersioningPolicy; @@ -55,7 +56,15 @@ public class RealtimeTuningConfig implements TuningConfig, AppenderatorConfig private static File createNewBasePersistDirectory() { - return Files.createTempDir(); + try { + return Files.createTempDir(); + } + catch (IllegalStateException e) { + String messageTemplate = "Failed to create temporary directory in [%s]! " + + "Make sure the `java.io.tmpdir` property is set to an existing and writable directory " + + "with enough free space."; + throw new ISE(e, messageTemplate, System.getProperty("java.io.tmpdir")); + } } // Might make sense for this to be a builder diff --git a/server/src/test/java/io/druid/segment/indexing/RealtimeTuningConfigTest.java b/server/src/test/java/io/druid/segment/indexing/RealtimeTuningConfigTest.java index 12878424309..5f1820b1b6d 100644 --- a/server/src/test/java/io/druid/segment/indexing/RealtimeTuningConfigTest.java +++ b/server/src/test/java/io/druid/segment/indexing/RealtimeTuningConfigTest.java @@ -28,6 +28,7 @@ import org.junit.Assert; import org.junit.Test; import java.io.File; +import java.util.UUID; public class RealtimeTuningConfigTest { @@ -39,6 +40,24 @@ public class RealtimeTuningConfigTest Assert.assertNotEquals(tuningConfig1.getBasePersistDirectory(), tuningConfig2.getBasePersistDirectory()); } + @Test + public void testErrorMessageIsMeaningfulWhenUnableToCreateTemporaryDirectory() + { + String propertyName = "java.io.tmpdir"; + String originalValue = System.getProperty(propertyName); + try { + String nonExistedDirectory = "/tmp/" + UUID.randomUUID(); + System.setProperty(propertyName, nonExistedDirectory); + RealtimeTuningConfig.makeDefaultTuningConfig(null); + } + catch (IllegalStateException e) { + Assert.assertTrue(e.getMessage().startsWith("Failed to create temporary directory in")); + } + finally { + System.setProperty(propertyName, originalValue); + } + } + @Test public void testSpecificBasePersistDirectory() {