summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorMark Hammons <mark.hammons@inaf.cnrs-gif.fr>2019-03-12 23:02:26 +0100
committerTobias Roeser <le.petit.fou@web.de>2019-03-13 07:36:23 +0100
commitd0ec907e478722f38c9d2273372dfd5cd489e152 (patch)
tree266e78c87a5a4c3ac1e6bed652627f7448d3ba38 /main
parentef0537c9b70100d3b2e94c6b1b1e07bc1e08edb2 (diff)
downloadmill-d0ec907e478722f38c9d2273372dfd5cd489e152.tar.gz
mill-d0ec907e478722f38c9d2273372dfd5cd489e152.tar.bz2
mill-d0ec907e478722f38c9d2273372dfd5cd489e152.zip
Added changes to the MillClientMain to make it only use workers running
the JVM the client was launched with.
Diffstat (limited to 'main')
-rw-r--r--main/client/src/MillClientMain.java31
1 files changed, 28 insertions, 3 deletions
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<String> l = new ArrayList<>();
List<String> 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");