From ab8e3138b5899ba83e902607e1f88113749c8107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Wed, 24 Jun 2020 14:16:13 +0200 Subject: [PATCH 1/5] Make native-image --no-server the default and add --experimental-build-server --- .../com.oracle.svm.driver/resources/HelpExtra.txt | 3 +++ .../com.oracle.svm.driver/resources/HelpServer.txt | 14 ++++++++------ .../com/oracle/svm/driver/NativeImageServer.java | 2 +- .../com/oracle/svm/driver/ServerOptionHandler.java | 11 ++++++----- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt b/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt index 875667c6ba7f..4a4068054c6b 100644 --- a/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt +++ b/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt @@ -17,3 +17,6 @@ Non-standard options help: -V= provide values for placeholders in native-image.properties files + --help-experimental-build-server + displays help for experimental image-build server use + diff --git a/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt b/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt index 370257a12160..33c540fc3a01 100644 --- a/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt +++ b/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt @@ -1,16 +1,18 @@ Server options help: - --no-server do not use image-build server + --no-server do not use experimental image-build server (default) + --experimental-build-server + use experimental image-build server - --server-list lists current image-build servers + --server-list lists current experimental image-build servers --server-list-details same as -server-list with more details - --server-cleanup remove stale image-build servers entries - --server-shutdown shutdown image-build servers under current session ID - --server-shutdown-all shutdown all image-build servers + --server-cleanup remove stale experimental image-build servers entries + --server-shutdown shutdown experimental image-build servers under current session ID + --server-shutdown-all shutdown all experimental image-build servers --server-session= use custom session name instead of system provided session ID of the calling process - --verbose-server enable verbose output for image-build server handling + --verbose-server enable verbose output for experimental image-build server handling \ No newline at end of file diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java index 4b3af1eede43..050f837df2fe 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java @@ -76,7 +76,7 @@ final class NativeImageServer extends NativeImage { private static final String pKeyMaxServers = "MaxServers"; private static final String machineProperties = "machine.properties"; - private boolean useServer = true; + private boolean useServer = false; private boolean verboseServer = false; private String sessionName = null; diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java index fd585ca6aac6..91817abd6d8a 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java @@ -27,11 +27,10 @@ import java.util.List; import java.util.Queue; -import com.oracle.svm.driver.MacroOption.MacroOptionKind; - class ServerOptionHandler extends NativeImage.OptionHandler { private static final String helpTextServer = NativeImage.getResource("/HelpServer.txt"); + private static final String enableServerOption = "--experimental-build-server"; ServerOptionHandler(NativeImageServer nativeImage) { super(nativeImage); @@ -41,11 +40,9 @@ class ServerOptionHandler extends NativeImage.OptionHandler { public boolean consume(Queue args) { String headArg = args.peek(); switch (headArg) { - case "--help-extra": + case "--help-experimental-build-server": args.poll(); - nativeImage.showMessage(DefaultOptionHandler.helpExtraText); nativeImage.showMessage(helpTextServer); - nativeImage.optionRegistry.showOptions(MacroOptionKind.Macro, true, nativeImage::showMessage); nativeImage.showNewline(); System.exit(0); return true; @@ -53,6 +50,10 @@ public boolean consume(Queue args) { args.poll(); nativeImage.setUseServer(false); return true; + case enableServerOption: + args.poll(); + nativeImage.setUseServer(true); + return true; case DefaultOptionHandler.verboseServerOption: args.poll(); nativeImage.setVerboseServer(true); From c092e48e9da33279d6ac86d9f07b689c19062887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Thu, 25 Jun 2020 10:12:12 +0200 Subject: [PATCH 2/5] Server shutdown only needed when server was used --- substratevm/mx.substratevm/mx_substratevm.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/substratevm/mx.substratevm/mx_substratevm.py b/substratevm/mx.substratevm/mx_substratevm.py index cc551793ed9e..99f661807e94 100644 --- a/substratevm/mx.substratevm/mx_substratevm.py +++ b/substratevm/mx.substratevm/mx_substratevm.py @@ -366,8 +366,11 @@ def remove_quotes(val): return after.split(' ')[0].rstrip() return None + server_use = set() def native_image_func(args, **kwargs): all_args = base_args + common_args + args + if '--experimental-build-server' in all_args: + server_use.add(True) path = query_native_image(all_args, '-H:Path=') name = query_native_image(all_args, '-H:Name=') image = join(path, name) @@ -380,7 +383,7 @@ def native_image_func(args, **kwargs): _native_image(['--server-wipe']) yield native_image_func finally: - if exists(native_image_cmd) and has_server: + if exists(native_image_cmd) and has_server and server_use: def timestr(): return time.strftime('%d %b %Y %H:%M:%S') + ' - ' mx.log(timestr() + 'Shutting down image build servers for ' + native_image_cmd) From 0a3f7c93539cd5ddb81600141d99acf6fe0c44cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Fri, 26 Jun 2020 15:44:19 +0200 Subject: [PATCH 3/5] Simplify query_native_image --- substratevm/mx.substratevm/mx_substratevm.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/substratevm/mx.substratevm/mx_substratevm.py b/substratevm/mx.substratevm/mx_substratevm.py index 99f661807e94..9b3323f27f1d 100644 --- a/substratevm/mx.substratevm/mx_substratevm.py +++ b/substratevm/mx.substratevm/mx_substratevm.py @@ -351,15 +351,18 @@ def _native_image(args, **kwargs): def query_native_image(all_args, option): + stdoutdata = [] + def stdout_collector(x): + stdoutdata.append(x) + _native_image(['--dry-run'] + all_args, out=stdout_collector) + def remove_quotes(val): if len(val) >= 2 and val.startswith("'") and val.endswith("'"): return val[1:-1].replace("\\'", "'") else: return val - out = mx.LinesOutputCapture() - _native_image(['--dry-run'] + all_args, out=out) - for line in out.lines: + for line in stdoutdata: arg = remove_quotes(line.rstrip('\\').strip()) _, sep, after = arg.partition(option) if sep: From a9651b4ada1d9051df8e957529d5659fb76f6cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Fri, 26 Jun 2020 15:44:47 +0200 Subject: [PATCH 4/5] Ensure --experimental-build-server does not affect --dry-run --- .../src/com/oracle/svm/driver/NativeImageServer.java | 4 +++- .../src/com/oracle/svm/driver/ServerOptionHandler.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java index 050f837df2fe..9b39b4d3ecfc 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java @@ -810,7 +810,9 @@ boolean useServer() { @Override protected void setDryRun(boolean val) { super.setDryRun(val); - useServer = !val; + if (val) { + useServer = false; + } } void setVerboseServer(boolean val) { diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java index 91817abd6d8a..e909ef643bc0 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java @@ -52,7 +52,9 @@ public boolean consume(Queue args) { return true; case enableServerOption: args.poll(); - nativeImage.setUseServer(true); + if (!nativeImage.isDryRun()) { + nativeImage.setUseServer(true); + } return true; case DefaultOptionHandler.verboseServerOption: args.poll(); From 15c13f17c5fec221e74301d937e9ae39ab4a7012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Mon, 29 Jun 2020 19:03:22 +0200 Subject: [PATCH 5/5] Fix query_native_image.stdout_collector for Windows --- substratevm/mx.substratevm/mx_substratevm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substratevm/mx.substratevm/mx_substratevm.py b/substratevm/mx.substratevm/mx_substratevm.py index 9b3323f27f1d..9544f42ced7f 100644 --- a/substratevm/mx.substratevm/mx_substratevm.py +++ b/substratevm/mx.substratevm/mx_substratevm.py @@ -353,7 +353,7 @@ def query_native_image(all_args, option): stdoutdata = [] def stdout_collector(x): - stdoutdata.append(x) + stdoutdata.append(x.rstrip()) _native_image(['--dry-run'] + all_args, out=stdout_collector) def remove_quotes(val):