Github user Leemoonsoo commented on the pull request:

    https://github.com/apache/incubator-zeppelin/pull/267#issuecomment-136511380
  
    Thanks for fix and procedure to reproduce the problem. 
    
    Changing SparkSqlInterpreter.getSparkInterpreter() totally make sense.
    
    But i'm not quite get change of LazyOpenInterpreter.open(). It blocks 
running open() concurrently in the same interpreter group. 
    
    Instead of blocking open(), if `((LazyOpenInterpreter) p).open();` can be 
moved to outside of `synchronized(intpGroup)` block, i guess it'll also solve 
the problem without restriction of blocking open() from concurrent execution. 
for example
    
    ```
      private SparkInterpreter getSparkInterpreter() {
        InterpreterGroup intpGroup = getInterpreterGroup();
        LazyOpenInterpreter lazy = null;
        SparkInterpreter spark = null;
        synchronized (intpGroup) {
          for (Interpreter intp : getInterpreterGroup()){
            if (intp.getClassName().equals(SparkInterpreter.class.getName())) {
              Interpreter p = intp;
              while (p instanceof WrappedInterpreter) {
                if (p instanceof LazyOpenInterpreter) {
                  lazy = (LazyOpenInterpreter) p;
                }
                if (p instanceof SparkInterpreter) {
                  spark = (SparkInterpreter) p;
                }
                p = ((WrappedInterpreter) p).getInnerInterpreter();
              }
            }
          }
        }
    
        if (lazy != null) {
          lazy.open();
        }
    
        return spark;
      }
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to