Repository: ignite Updated Branches: refs/heads/ignite-gg-10889 [created] 3b23b71fb
Added function to start local node via ignite.sh Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3b23b71f Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3b23b71f Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3b23b71f Branch: refs/heads/ignite-gg-10889 Commit: 3b23b71fb6b09f0085fb5a44ce2b12ed58f64f09 Parents: d8c8214 Author: AKuznetsov <[email protected]> Authored: Thu Dec 17 00:11:04 2015 +0700 Committer: AKuznetsov <[email protected]> Committed: Thu Dec 17 00:11:04 2015 +0700 ---------------------------------------------------------------------- .../internal/visor/util/VisorTaskUtils.java | 65 +++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/3b23b71f/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java index 579f50c..536e368 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java @@ -20,6 +20,7 @@ package org.apache.ignite.internal.visor.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileFilter; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.net.InetAddress; @@ -823,6 +824,68 @@ public class VisorTaskUtils { } /** + * Start local node in terminal. + * + * @param log Logger. + * @param cfgPath Path to node configuration to start with. + * @param nodesToStart Number of nodes to start. + * @param quite If {@code true} then start node in quiet mode. + * @return List of started processes. + * @throws IOException If failed to start. + */ + public static List<Process> startLocalNode(@Nullable IgniteLogger log, String cfgPath, int nodesToStart, + boolean quite) throws IOException { + String quitePar = quite ? "" : "-v"; + + String cmdFile = new File("bin", U.isWindows() ? "ignite.bat" : "ignite.sh").getPath(); + + File cmdFilePath = U.resolveIgnitePath(cmdFile); + + if (cmdFilePath == null || !cmdFilePath.exists()) + throw new FileNotFoundException(String.format("File not found: %s", cmdFile)); + + String ignite = cmdFilePath.getCanonicalPath(); + + File nodesCfgPath = U.resolveIgnitePath(cfgPath); + + if (nodesCfgPath == null || !nodesCfgPath.exists()) + throw new FileNotFoundException(String.format("File not found: %s", cfgPath)); + + String nodeCfg = nodesCfgPath.getCanonicalPath(); + + log(log, String.format("Starting %s local %s with '%s' config", nodesToStart, nodesToStart > 1 ? "nodes" : "node", nodeCfg)); + + List<Process> run = new ArrayList<>(); + + try { + for (int i = 0; i < nodesToStart; i++) { + if (U.isMacOs()) { + StringBuilder envs = new StringBuilder(); + + for (Map.Entry<String, String> entry : System.getenv().entrySet()) { + String value = entry.getValue(); + + if (value.indexOf(';') < 0 && value.indexOf('\'') < 0) + envs.append(String.format("export %s='%s'; ", + entry.getKey(), value.replace('\n', ' ').replace("'", "\'"))); + } + + run.add(openInConsole(envs.toString(), ignite, quitePar, nodeCfg)); + } else + run.add(openInConsole(ignite, quitePar, nodeCfg)); + } + + return run; + } + catch (Exception e) { + for (Process proc: run) + proc.destroy(); + + throw e; + } + } + + /** * Run command in separated console. * * @param args A string array containing the program and its arguments. @@ -904,4 +967,4 @@ public class VisorTaskUtils { return bos.toByteArray(); } -} \ No newline at end of file +}
