You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@samza.apache.org by ni...@apache.org on 2017/08/09 17:51:01 UTC
[15/23] samza git commit: SAMZA-1366: ScriptRunner should allow callers to control the child pr…
SAMZA-1366: ScriptRunner should allow callers to control the child pr…
…ocess environment.
Author: Jacob Maes <jm...@linkedin.com>
Reviewers: Jagadish <jv...@linkedin.com>, Shanthoosh Venkataraman <sv...@linkedin.com>
Closes #245 from jmakes/script-runner-improvements
Project: http://git-wip-us.apache.org/repos/asf/samza/repo
Commit: http://git-wip-us.apache.org/repos/asf/samza/commit/fde55644
Tree: http://git-wip-us.apache.org/repos/asf/samza/tree/fde55644
Diff: http://git-wip-us.apache.org/repos/asf/samza/diff/fde55644
Branch: refs/heads/0.14.0
Commit: fde5564407e97c2d4ed0efa15f4b25d45d0b9f6a
Parents: c2b55dc
Author: Jacob Maes <jm...@linkedin.com>
Authored: Wed Aug 2 09:22:51 2017 -0700
Committer: Jacob Maes <jm...@linkedin.com>
Committed: Wed Aug 2 09:22:51 2017 -0700
----------------------------------------------------------------------
.../samza/rest/proxy/job/ScriptJobProxy.java | 1 +
.../apache/samza/rest/script/ScriptRunner.java | 29 ++++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/samza/blob/fde55644/samza-rest/src/main/java/org/apache/samza/rest/proxy/job/ScriptJobProxy.java
----------------------------------------------------------------------
diff --git a/samza-rest/src/main/java/org/apache/samza/rest/proxy/job/ScriptJobProxy.java b/samza-rest/src/main/java/org/apache/samza/rest/proxy/job/ScriptJobProxy.java
index 2d14366..796671a 100644
--- a/samza-rest/src/main/java/org/apache/samza/rest/proxy/job/ScriptJobProxy.java
+++ b/samza-rest/src/main/java/org/apache/samza/rest/proxy/job/ScriptJobProxy.java
@@ -51,6 +51,7 @@ public abstract class ScriptJobProxy extends AbstractJobProxy implements ScriptP
* @return the full path to the script.
* @throws FileNotFoundException if the job installation path doesn't exist.
*/
+ @Override
public String getScriptPath(JobInstance jobInstance, String scriptName)
throws FileNotFoundException {
String scriptPath;
http://git-wip-us.apache.org/repos/asf/samza/blob/fde55644/samza-rest/src/main/java/org/apache/samza/rest/script/ScriptRunner.java
----------------------------------------------------------------------
diff --git a/samza-rest/src/main/java/org/apache/samza/rest/script/ScriptRunner.java b/samza-rest/src/main/java/org/apache/samza/rest/script/ScriptRunner.java
index b70a0f1..1eab067 100644
--- a/samza-rest/src/main/java/org/apache/samza/rest/script/ScriptRunner.java
+++ b/samza-rest/src/main/java/org/apache/samza/rest/script/ScriptRunner.java
@@ -18,11 +18,15 @@
*/
package org.apache.samza.rest.script;
+import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.apache.samza.SamzaException;
import org.slf4j.Logger;
@@ -39,6 +43,8 @@ public class ScriptRunner {
private static final int DEFAULT_SCRIPT_CMD_TIMEOUT_S = 30;
private int scriptTimeout = DEFAULT_SCRIPT_CMD_TIMEOUT_S;
+ private final Map<String, String> environment = new HashMap<>();
+
protected long getScriptTimeoutS() {
return scriptTimeout;
}
@@ -84,13 +90,21 @@ public class ScriptRunner {
* @param args the command line args to pass to the script.
* @return a {@link java.lang.ProcessBuilder} for the script and args.
*/
- private ProcessBuilder getProcessBuilder(String scriptPath, String[] args) {
+ private ProcessBuilder getProcessBuilder(String scriptPath, String[] args) throws FileNotFoundException {
+ if (!new File(scriptPath).exists()) {
+ throw new FileNotFoundException("Script file does not exist: " + scriptPath);
+ }
+
List<String> command = new ArrayList<>(args.length + 1);
command.add(scriptPath);
command.addAll(Arrays.asList(args));
log.debug("Building process with command {}", command);
- return new ProcessBuilder(command);
+ ProcessBuilder pb = new ProcessBuilder(command);
+
+ pb.environment().clear();
+ pb.environment().putAll(environment);
+ return pb;
}
/**
@@ -126,4 +140,15 @@ public class ScriptRunner {
log.debug("Exit value {}", exitVal);
return exitVal;
}
+
+ /**
+ * Gets the mutable map of environment variables to add to the child process environment.
+ *
+ * The structure is the same as {@link ProcessBuilder#environment()}, but this map starts empty.
+ *
+ * @return the mutable map of environment variables.
+ */
+ public Map<String, String> environment() {
+ return environment;
+ }
}