From d0ec907e478722f38c9d2273372dfd5cd489e152 Mon Sep 17 00:00:00 2001 From: Mark Hammons Date: Tue, 12 Mar 2019 23:02:26 +0100 Subject: Added changes to the MillClientMain to make it only use workers running the JVM the client was launched with. --- main/client/src/MillClientMain.java | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'main') diff --git a/main/client/src/MillClientMain.java b/main/client/src/MillClientMain.java index dc144f99..0097102a 100644 --- a/main/client/src/MillClientMain.java +++ b/main/client/src/MillClientMain.java @@ -7,7 +7,10 @@ import java.net.Socket; import java.net.URISyntaxException; import java.net.URL; import java.nio.channels.FileChannel; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.*; +import java.lang.Math; public class MillClientMain { @@ -21,7 +24,7 @@ public class MillClientMain { List l = new ArrayList<>(); List vmOptions = new ArrayList<>(); - l.add("java"); + l.add(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"); final Properties props = System.getProperties(); for(final String k: props.stringPropertyNames()){ if (k.startsWith("MILL_") && !"MILL_CLASSPATH".equals(k)) { @@ -52,6 +55,16 @@ public class MillClientMain { .redirectError(new java.io.File(lockBase + "/logs")) .start(); } + + private static String sha1HashPath(String path) throws NoSuchAlgorithmException, UnsupportedEncodingException { + MessageDigest md = MessageDigest.getInstance("SHA1"); + md.reset(); + byte[] pathBytes = path.getBytes("UTF-8"); + md.update(pathBytes); + byte[] digest = md.digest(); + return Base64.getEncoder().encodeToString(digest); + } + public static void main(String[] args) throws Exception{ System.exit(main0(args)); } @@ -62,10 +75,22 @@ public class MillClientMain { System.setProperty("jna.nosys", "true"); } int index = 0; - final int processLimit = 5; + String jvmHomeEncoding = sha1HashPath(System.getProperty("java.home")); + File outFolder = new File("out"); + String[] totalProcesses = outFolder.list((dir,name) -> name.startsWith("mill-worker-")); + String[] thisJdkProcesses = outFolder.list((dir,name) -> name.startsWith("mill-worker-" + jvmHomeEncoding)); + + int processLimit = 5; + if(totalProcesses != null) { + if(thisJdkProcesses != null) { + processLimit -= Math.min(totalProcesses.length - thisJdkProcesses.length, 5); + } else { + processLimit -= Math.min(totalProcesses.length, 5); + } + } while (index < processLimit) { index += 1; - String lockBase = "out/mill-worker-" + index; + String lockBase = "out/mill-worker-" + jvmHomeEncoding + "-" + index; new java.io.File(lockBase).mkdirs(); try(RandomAccessFile lockFile = new RandomAccessFile(lockBase + "/clientLock", "rw"); -- cgit v1.2.3