Details
diff --git a/src/main/java/azkaban/execapp/JobRunner.java b/src/main/java/azkaban/execapp/JobRunner.java
index dd9ad96..3a2b8a4 100644
--- a/src/main/java/azkaban/execapp/JobRunner.java
+++ b/src/main/java/azkaban/execapp/JobRunner.java
@@ -503,7 +503,7 @@ public class JobRunner extends EventHandler implements Runnable {
job = jobtypeManager.buildJobExecutor(this.jobId, props, logger);
}
catch (JobTypeManagerException e) {
- logger.error("Failed to build job type");
+ logger.error("Failed to build job type", e);
return false;
}
}
diff --git a/src/main/java/azkaban/utils/PropsUtils.java b/src/main/java/azkaban/utils/PropsUtils.java
index 2f826a3..6b05f62 100644
--- a/src/main/java/azkaban/utils/PropsUtils.java
+++ b/src/main/java/azkaban/utils/PropsUtils.java
@@ -268,6 +268,11 @@ public class PropsUtils {
throw new IllegalArgumentException("Expression " + value + " not well formed. " + e.getMessage(), e);
}
+ if (result == null) {
+ // for backward compatibility it is best to return value
+ return value;
+ }
+
String newValue = value.substring(0, lastIndex) + result.toString() + value.substring(nextClosed + 1);
return resolveVariableExpression(newValue, lastIndex, jexl);
}
diff --git a/unit/java/azkaban/test/jobExecutor/JavaProcessJobTest.java b/unit/java/azkaban/test/jobExecutor/JavaProcessJobTest.java
index 21c1e92..048801b 100644
--- a/unit/java/azkaban/test/jobExecutor/JavaProcessJobTest.java
+++ b/unit/java/azkaban/test/jobExecutor/JavaProcessJobTest.java
@@ -30,7 +30,7 @@ public class JavaProcessJobTest
" By JULIE BOSMAN \n" +
"Published: August 11, 2010 \n" +
" \n" +
- "Twelve years later, it may be Joe Fox�s turn to worry. Readers have gone from skipping small \n" +
+ "Twelve years later, it may be Joe Fox's turn to worry. Readers have gone from skipping small \n" +
"bookstores to wondering if they need bookstores at all. More people are ordering books online \n" +
"or plucking them from the best-seller bin at Wal-Mart";
@@ -103,7 +103,7 @@ public class JavaProcessJobTest
@Test
public void testJavaJob() throws Exception {
/* initialize the Props */
- props.put(JavaProcessJob.JOB_CLASS, "azkaban.test.jobExecutor.WordCountLocal");
+ props.put(JavaProcessJob.JAVA_CLASS, "azkaban.test.jobExecutor.WordCountLocal");
props.put(ProcessJob.WORKING_DIR, ".");
props.put("input", inputFile);
props.put("output", outputFile);
@@ -114,7 +114,7 @@ public class JavaProcessJobTest
@Test
public void testJavaJobHashmap() throws Exception {
/* initialize the Props */
- props.put(JavaProcessJob.JOB_CLASS, "azkaban.test.executor.SleepJavaJob");
+ props.put(JavaProcessJob.JAVA_CLASS, "azkaban.test.executor.SleepJavaJob");
props.put("seconds", 1);
props.put(ProcessJob.WORKING_DIR, ".");
props.put("input", inputFile);
@@ -125,7 +125,7 @@ public class JavaProcessJobTest
@Test
public void testFailedJavaJob() throws Exception {
- props.put(JavaProcessJob.JOB_CLASS, "azkaban.test.jobExecutor.WordCountLocal");
+ props.put(JavaProcessJob.JAVA_CLASS, "azkaban.test.jobExecutor.WordCountLocal");
props.put(ProcessJob.WORKING_DIR, ".");
props.put("input", errorInputFile);
props.put("output", outputFile);
diff --git a/unit/java/azkaban/test/jobExecutor/WordCountLocal.java b/unit/java/azkaban/test/jobExecutor/WordCountLocal.java
index c22119e..d63fc39 100644
--- a/unit/java/azkaban/test/jobExecutor/WordCountLocal.java
+++ b/unit/java/azkaban/test/jobExecutor/WordCountLocal.java
@@ -3,15 +3,18 @@ package azkaban.test.jobExecutor;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.log4j.Logger;
import azkaban.jobExecutor.AbstractJob;
+import azkaban.jobExecutor.ProcessJob;
import azkaban.utils.Props;
public class WordCountLocal extends AbstractJob {
@@ -20,6 +23,13 @@ public class WordCountLocal extends AbstractJob {
private String _output = null;
private Map<String, Integer> _dic = new HashMap<String,Integer>();
+ public static void main(String[] args) throws Exception {
+ String propsFile = System.getenv(ProcessJob.JOB_PROP_ENV);
+ System.out.println("propsFile: " + propsFile);
+ Props prop = new Props(null, propsFile);
+ WordCountLocal instance = new WordCountLocal("", prop);
+ instance.run();
+ }
public WordCountLocal(String id, Props prop)
{
super(id, Logger.getLogger(WordCountLocal.class));
diff --git a/unit/java/azkaban/test/utils/EmailMessageTest.java b/unit/java/azkaban/test/utils/EmailMessageTest.java
index 43bf216..8ab509e 100644
--- a/unit/java/azkaban/test/utils/EmailMessageTest.java
+++ b/unit/java/azkaban/test/utils/EmailMessageTest.java
@@ -3,8 +3,10 @@ package azkaban.test.utils;
import java.io.IOException;
import javax.mail.MessagingException;
+
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import azkaban.utils.EmailMessage;
@@ -29,6 +31,7 @@ public class EmailMessageTest {
public void tearDown() throws Exception {
}
+ @Ignore
@Test
public void testSendEmail() throws IOException {
em.addToAddress(toAddr);
diff --git a/unit/java/azkaban/test/utils/PropsUtilsTest.java b/unit/java/azkaban/test/utils/PropsUtilsTest.java
index 6b34b48..75bc979 100644
--- a/unit/java/azkaban/test/utils/PropsUtilsTest.java
+++ b/unit/java/azkaban/test/utils/PropsUtilsTest.java
@@ -51,6 +51,19 @@ public class PropsUtilsTest {
}
@Test
+ public void testInvalidSyntax() throws Exception {
+ Props propsGrandParent = new Props();
+ Props propsParent = new Props(propsGrandParent);
+ Props props = new Props(propsParent);
+
+ propsParent.put("my", "name");
+ props.put("res1", "$(my)");
+
+ Props resolved = PropsUtils.resolveProps(props);
+ Assert.assertEquals("$(my)", resolved.get("res1"));
+ }
+
+ @Test
public void testExpressionResolution() throws IOException {
Props props = Props.of(
"normkey", "normal",