[SYSTEMML-1839] Fix NPE on parfor initialization w/o log4j config This patch fixes a null pointer exception on parfor static initialization which expected a set log level. We now properly probe the log level and assign a default of INFO if nothing was setup.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/89632b5e Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/89632b5e Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/89632b5e Branch: refs/heads/master Commit: 89632b5ea8063d8959dcab3ec3a774f8883f2b62 Parents: 9a275ac Author: Matthias Boehm <mboe...@gmail.com> Authored: Mon Aug 14 20:15:32 2017 -0700 Committer: Matthias Boehm <mboe...@gmail.com> Committed: Tue Aug 15 12:48:27 2017 -0700 ---------------------------------------------------------------------- .../org/apache/sysml/hops/OptimizerUtils.java | 7 +++++++ .../sysml/parser/ParForStatementBlock.java | 20 ++++++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/89632b5e/src/main/java/org/apache/sysml/hops/OptimizerUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/OptimizerUtils.java b/src/main/java/org/apache/sysml/hops/OptimizerUtils.java index a0a36d5..3b98a34 100644 --- a/src/main/java/org/apache/sysml/hops/OptimizerUtils.java +++ b/src/main/java/org/apache/sysml/hops/OptimizerUtils.java @@ -24,6 +24,8 @@ import java.util.HashMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; import org.apache.sysml.api.DMLScript; import org.apache.sysml.api.DMLScript.RUNTIME_PLATFORM; import org.apache.sysml.conf.CompilerConfig; @@ -933,6 +935,11 @@ public class OptimizerUtils return ret; } + public static Level getDefaultLogLevel() { + Level log = Logger.getRootLogger().getLevel(); + return (log != null) ? log : Level.INFO; + } + //////////////////////// // Sparsity Estimates // //////////////////////// http://git-wip-us.apache.org/repos/asf/systemml/blob/89632b5e/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java b/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java index 4dc06bd..8efbc9f 100644 --- a/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java +++ b/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java @@ -128,18 +128,18 @@ public class ParForStatementBlock extends ForStatementBlock _paramDefaults.put( EXEC_MODE, String.valueOf(PExecMode.LOCAL) ); _paramDefaults.put( OPT_MODE, String.valueOf(POptMode.RULEBASED) ); _paramDefaults.put( PROFILE, "0" ); - _paramDefaults.put( OPT_LOG, Logger.getRootLogger().getLevel().toString() ); + _paramDefaults.put( OPT_LOG, OptimizerUtils.getDefaultLogLevel().toString() ); _paramDefaults2 = new HashMap<String, String>(); //OPT_MODE always specified - _paramDefaults2.put( CHECK, "1" ); - _paramDefaults2.put( PAR, "-1" ); - _paramDefaults2.put( TASK_PARTITIONER, String.valueOf(PTaskPartitioner.UNSPECIFIED) ); - _paramDefaults2.put( TASK_SIZE, "-1" ); - _paramDefaults2.put( DATA_PARTITIONER, String.valueOf(PDataPartitioner.UNSPECIFIED) ); - _paramDefaults2.put( RESULT_MERGE, String.valueOf(PResultMerge.UNSPECIFIED) ); - _paramDefaults2.put( EXEC_MODE, String.valueOf(PExecMode.UNSPECIFIED) ); - _paramDefaults2.put( PROFILE, "0" ); - _paramDefaults2.put( OPT_LOG, Logger.getRootLogger().getLevel().toString() ); + _paramDefaults2.put( CHECK, "1" ); + _paramDefaults2.put( PAR, "-1" ); + _paramDefaults2.put( TASK_PARTITIONER, String.valueOf(PTaskPartitioner.UNSPECIFIED) ); + _paramDefaults2.put( TASK_SIZE, "-1" ); + _paramDefaults2.put( DATA_PARTITIONER, String.valueOf(PDataPartitioner.UNSPECIFIED) ); + _paramDefaults2.put( RESULT_MERGE, String.valueOf(PResultMerge.UNSPECIFIED) ); + _paramDefaults2.put( EXEC_MODE, String.valueOf(PExecMode.UNSPECIFIED) ); + _paramDefaults2.put( PROFILE, "0" ); + _paramDefaults2.put( OPT_LOG, OptimizerUtils.getDefaultLogLevel().toString() ); _idSeq = new IDSequence(); _idSeqfn = new IDSequence();