[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();

Reply via email to