diff --git a/circe-checksum/src/main/java/com/scurrilous/circe/utils/NativeUtils.java b/circe-checksum/src/main/java/com/scurrilous/circe/utils/NativeUtils.java index bd950616c51..2a72cefb26b 100644 --- a/circe-checksum/src/main/java/com/scurrilous/circe/utils/NativeUtils.java +++ b/circe-checksum/src/main/java/com/scurrilous/circe/utils/NativeUtils.java @@ -35,6 +35,9 @@ public class NativeUtils { public static final String OS_NAME = System.getProperty("os.name").toLowerCase(Locale.US); + public static final String TEMP_WORKDIR_PROPERTY_NAME = "org.apache.bookkeeper.native.workdir"; + + private static final String TEMP_DIR_NAME = "native"; /** * loads given library from the this jar. ie: this jar contains: /lib/pulsar-checksum.jnilib @@ -51,8 +54,21 @@ public static void loadLibraryFromJar(String path) throws Exception { String[] parts = path.split("/"); String filename = (parts.length > 0) ? parts[parts.length - 1] : null; - Path dir = Files.createTempDirectory("native"); + // create the temp dir + final Path dir; + final String tempWorkDirName = System.getProperty(TEMP_WORKDIR_PROPERTY_NAME); + if (tempWorkDirName == null || tempWorkDirName.isEmpty()) { + dir = Files.createTempDirectory(TEMP_DIR_NAME); + } else { + final File tempWorkDir = new File(tempWorkDirName); + if (!tempWorkDir.exists() || !tempWorkDir.isDirectory()) { + throw new FileNotFoundException("The tempWorkDir doesn't exist: " + tempWorkDirName); + } + dir = Files.createTempDirectory(tempWorkDir.toPath(), TEMP_DIR_NAME); + } dir.toFile().deleteOnExit(); + + // create the temp file File temp = new File(dir.toString(), filename); temp.deleteOnExit(); diff --git a/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/NativeUtils.java b/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/NativeUtils.java index fde69f90114..094c0056f75 100644 --- a/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/NativeUtils.java +++ b/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/NativeUtils.java @@ -36,6 +36,11 @@ */ @UtilityClass public class NativeUtils { + + public static final String TEMP_WORKDIR_PROPERTY_NAME = "org.apache.bookkeeper.native.workdir"; + + private static final String TEMP_DIR_NAME = "native"; + /** * loads given library from the this jar. ie: this jar contains: /lib/pulsar-checksum.jnilib * @@ -56,8 +61,21 @@ public static void loadLibraryFromJar(String path) throws Exception { String filename = parts[parts.length - 1]; checkArgument(path.startsWith("/"), "absolute path must start with /"); - Path dir = Files.createTempDirectory("native"); + // create the temp dir + final Path dir; + final String tempWorkDirName = System.getProperty(TEMP_WORKDIR_PROPERTY_NAME); + if (tempWorkDirName == null || tempWorkDirName.isEmpty()) { + dir = Files.createTempDirectory(TEMP_DIR_NAME); + } else { + final File tempWorkDir = new File(tempWorkDirName); + if (!tempWorkDir.exists() || !tempWorkDir.isDirectory()) { + throw new FileNotFoundException("The tempWorkDir doesn't exist: " + tempWorkDirName); + } + dir = Files.createTempDirectory(tempWorkDir.toPath(), TEMP_DIR_NAME); + } dir.toFile().deleteOnExit(); + + // create the temp file File temp = new File(dir.toString(), filename); temp.deleteOnExit(); diff --git a/native-io/src/main/java/org/apache/bookkeeper/common/util/nativeio/NativeUtils.java b/native-io/src/main/java/org/apache/bookkeeper/common/util/nativeio/NativeUtils.java index b3bdf9ab2f6..5bce384cb8a 100644 --- a/native-io/src/main/java/org/apache/bookkeeper/common/util/nativeio/NativeUtils.java +++ b/native-io/src/main/java/org/apache/bookkeeper/common/util/nativeio/NativeUtils.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; +import java.nio.file.Path; import lombok.NonNull; import lombok.experimental.UtilityClass; @@ -33,6 +34,11 @@ */ @UtilityClass class NativeUtils { + + public static final String TEMP_WORKDIR_PROPERTY_NAME = "org.apache.bookkeeper.native.workdir"; + + private static final String TEMP_DIR_NAME = "native"; + /** * loads given library from the this jar. ie: this jar contains: /lib/pulsar-checksum.jnilib * @@ -52,9 +58,22 @@ static void loadLibraryFromJar(String path) throws Exception { String filename = parts[parts.length - 1]; - File dir = Files.createTempDirectory("native").toFile(); - dir.deleteOnExit(); - File temp = new File(dir, filename); + // create the temp dir + final Path dir; + final String tempWorkDirName = System.getProperty(TEMP_WORKDIR_PROPERTY_NAME); + if (tempWorkDirName == null || tempWorkDirName.isEmpty()) { + dir = Files.createTempDirectory(TEMP_DIR_NAME); + } else { + final File tempWorkDir = new File(tempWorkDirName); + if (!tempWorkDir.exists() || !tempWorkDir.isDirectory()) { + throw new FileNotFoundException("The tempWorkDir doesn't exist: " + tempWorkDirName); + } + dir = Files.createTempDirectory(tempWorkDir.toPath(), TEMP_DIR_NAME); + } + dir.toFile().deleteOnExit(); + + // create the temp file + File temp = new File(dir.toString(), filename); temp.deleteOnExit(); byte[] buffer = new byte[1024];