From f70331d28eb84158e05493ab5e989b37781dbc2b Mon Sep 17 00:00:00 2001 From: Eric Charles Date: Tue, 30 Aug 2016 05:48:52 +0200 Subject: [PATCH 1/4] initial working implementation of local/remote interpreter configuration --- .../zeppelin/spark/SparkInterpreter.java | 2 +- .../zeppelin/interpreter/Interpreter.java | 5 - .../interpreter-create.html | 7 ++ .../app/interpreter/interpreter.controller.js | 3 + .../src/app/interpreter/interpreter.html | 12 ++- .../zeppelin/conf/ZeppelinConfiguration.java | 5 + .../interpreter/InterpreterFactory.java | 91 +++++++++---------- .../zeppelin/interpreter/InterpreterInfo.java | 2 +- .../interpreter/InterpreterOption.java | 14 ++- .../interpreter/InterpreterSetting.java | 15 +-- 10 files changed, 86 insertions(+), 70 deletions(-) diff --git a/spark/src/main/java/org/apache/zeppelin/spark/SparkInterpreter.java b/spark/src/main/java/org/apache/zeppelin/spark/SparkInterpreter.java index 6dc13ad83f1..27e8213df7f 100644 --- a/spark/src/main/java/org/apache/zeppelin/spark/SparkInterpreter.java +++ b/spark/src/main/java/org/apache/zeppelin/spark/SparkInterpreter.java @@ -121,7 +121,7 @@ public class SparkInterpreter extends Interpreter { public SparkInterpreter(Properties property) { - super(property); + super(property); out = new SparkOutputStream(logger); } diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/Interpreter.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/Interpreter.java index 07f9cbabcad..5505d7b6d02 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/Interpreter.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/Interpreter.java @@ -253,11 +253,6 @@ public static class RegisteredInterpreter { private Map properties; private String path; - public RegisteredInterpreter(String name, String group, String className, - Map properties) { - this(name, group, className, false, properties); - } - public RegisteredInterpreter(String name, String group, String className, boolean defaultInterpreter, Map properties) { super(); diff --git a/zeppelin-web/src/app/interpreter/interpreter-create/interpreter-create.html b/zeppelin-web/src/app/interpreter/interpreter-create/interpreter-create.html index 1550126b9b7..6e12e486f9c 100644 --- a/zeppelin-web/src/app/interpreter/interpreter-create/interpreter-create.html +++ b/zeppelin-web/src/app/interpreter/interpreter-create/interpreter-create.html @@ -70,6 +70,13 @@

Create new interpreter


+
+
+ + + +
+
diff --git a/zeppelin-web/src/app/interpreter/interpreter.controller.js b/zeppelin-web/src/app/interpreter/interpreter.controller.js index 4be35ef6c8e..120c7048a28 100644 --- a/zeppelin-web/src/app/interpreter/interpreter.controller.js +++ b/zeppelin-web/src/app/interpreter/interpreter.controller.js @@ -205,6 +205,9 @@ angular.module('zeppelinWebApp').controller('InterpreterCtrl', if (!setting.option) { setting.option = {}; } + if (setting.option.remote === undefined) { + setting.option.remote = true; + } if (setting.option.isExistingProcess === undefined) { setting.option.isExistingProcess = false; } diff --git a/zeppelin-web/src/app/interpreter/interpreter.html b/zeppelin-web/src/app/interpreter/interpreter.html index 7ac18728093..cfda0cf96a9 100644 --- a/zeppelin-web/src/app/interpreter/interpreter.html +++ b/zeppelin-web/src/app/interpreter/interpreter.html @@ -171,12 +171,22 @@
Option
Interpreter for note
+
+
+
+ + + +
+
+
+ Connect to existing process
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index d146a25fad9..2a3705fb657 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -386,6 +386,10 @@ public String getShiroPath() { return getRelativeDir(String.format("%s/shiro.ini", getConfDir())); } + public boolean getInterpreterRemote() { + return getBoolean(ConfVars.ZEPPELIN_INTERPRETER_REMOTE); + } + public String getInterpreterRemoteRunnerPath() { return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_REMOTE_RUNNER); } @@ -544,6 +548,7 @@ public static enum ConfVars { ZEPPELIN_NOTEBOOK_AZURE_USER("zeppelin.notebook.azure.user", "user"), ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", VFSNotebookRepo.class.getName()), ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC("zeppelin.notebook.one.way.sync", false), + ZEPPELIN_INTERPRETER_REMOTE("zeppelin.interpreter.remote", true), ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", System.getProperty("os.name") .startsWith("Windows") ? "bin/interpreter.cmd" : "bin/interpreter.sh"), diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java index 30411d122b4..cf5011d0c22 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java @@ -49,6 +49,7 @@ import java.util.Set; import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; @@ -157,10 +158,12 @@ public InterpreterFactory(ZeppelinConfiguration conf, InterpreterOption defaultO } private void init() throws InterpreterException, IOException, RepositoryException { + String interpreterJson = conf.getInterpreterJson(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); Path interpretersDir = Paths.get(conf.getInterpreterDir()); + if (Files.exists(interpretersDir)) { for (Path interpreterDir : Files .newDirectoryStream(interpretersDir, new DirectoryStream.Filter() { @@ -169,18 +172,22 @@ public boolean accept(Path entry) throws IOException { return Files.exists(entry) && Files.isDirectory(entry); } })) { + String interpreterDirString = interpreterDir.toString(); - registerInterpreterFromPath(interpreterDirString, interpreterJson); + URL[] urls = recursiveBuildLibList(new File(interpreterDirString)); + URLClassLoader urlClassLoader = new URLClassLoader(urls, cl); - registerInterpreterFromResource(cl, interpreterDirString, interpreterJson); + registerInterpreterFromPath(urlClassLoader, interpreterDir, interpreterJson); + + registerInterpreterFromResource(urlClassLoader, interpreterDir, interpreterJson); /* * TODO(jongyoul) * - Remove these codes below because of legacy code * - Support ThreadInterpreter - */ - URLClassLoader ccl = new URLClassLoader(recursiveBuildLibList(interpreterDir.toFile()), cl); + URL[] urls = recursiveBuildLibList(interpreterDir.toFile()); + URLClassLoader ccl = new URLClassLoader(urls, cl); for (String className : interpreterClassList) { try { // Load classes @@ -192,13 +199,14 @@ public boolean accept(Path entry) throws IOException { Interpreter.registeredInterpreters.get(interpreterKey) .setPath(interpreterDirString); logger.info("Interpreter " + interpreterKey + " found. class=" + className); - cleanCl.put(interpreterDirString, ccl); } } + cleanCl.put(interpreterDirString, ccl); } catch (Throwable t) { // nothing to do } } + */ } } @@ -264,7 +272,7 @@ private InterpreterSetting createFromInterpreterSettingRef(String name) { private InterpreterSetting createFromInterpreterSettingRef(InterpreterSetting o) { InterpreterSetting setting = new InterpreterSetting(o.getName(), o.getName(), o.getInterpreterInfos(), o.getProperties(), - o.getDependencies(), o.getOption(), o.getPath()); + o.getDependencies(), o.getOption(), o.getPath(), conf); setting.setInterpreterGroupFactory(this); return setting; } @@ -277,31 +285,32 @@ private Properties convertInterpreterProperties(Map return properties; } - private void registerInterpreterFromResource(ClassLoader cl, String interpreterDir, + private void registerInterpreterFromResource(URLClassLoader cl, Path interpreterDir, String interpreterJson) throws IOException, RepositoryException { - URL[] urls = recursiveBuildLibList(new File(interpreterDir)); - ClassLoader tempClassLoader = new URLClassLoader(urls, cl); - InputStream inputStream = tempClassLoader.getResourceAsStream(interpreterJson); + InputStream inputStream = cl.getResourceAsStream(interpreterJson); if (null != inputStream) { logger.debug("Reading {} from resources in {}", interpreterJson, interpreterDir); List registeredInterpreterList = getInterpreterListFromJson(inputStream); - registerInterpreters(registeredInterpreterList, interpreterDir); + registerInterpreters(cl, registeredInterpreterList, interpreterDir); } + } - private void registerInterpreterFromPath(String interpreterDir, String interpreterJson) + private void registerInterpreterFromPath(URLClassLoader cl, Path interpreterDir, String interpreterJson) throws IOException, RepositoryException { - Path interpreterJsonPath = Paths.get(interpreterDir, interpreterJson); + Path interpreterJsonPath = Paths.get(interpreterDir.toString(), interpreterJson); + if (Files.exists(interpreterJsonPath)) { logger.debug("Reading {}", interpreterJsonPath); List registeredInterpreterList = getInterpreterListFromJson(interpreterJsonPath); - registerInterpreters(registeredInterpreterList, interpreterDir); + registerInterpreters(cl, registeredInterpreterList, interpreterDir); } + } private List getInterpreterListFromJson(Path filename) @@ -315,10 +324,12 @@ private List getInterpreterListFromJson(InputStream strea return gson.fromJson(new InputStreamReader(stream), registeredInterpreterListType); } - private void registerInterpreters(List registeredInterpreters, - String absolutePath) throws IOException, RepositoryException { + private void registerInterpreters(URLClassLoader cl, List registeredInterpreters, + Path interpreterDir) throws IOException, RepositoryException { - for (RegisteredInterpreter registeredInterpreter : registeredInterpreters) { + cleanCl.put(interpreterDir.toFile().getAbsolutePath(), cl); + + for (RegisteredInterpreter registeredInterpreter : registeredInterpreters) { InterpreterInfo interpreterInfo = new InterpreterInfo(registeredInterpreter.getClassName(), registeredInterpreter.getName(), registeredInterpreter.isDefaultInterpreter()); @@ -331,7 +342,7 @@ private void registerInterpreters(List registeredInterpre } } - add(registeredInterpreter.getGroup(), interpreterInfo, properties, absolutePath); + add(registeredInterpreter.getGroup(), interpreterInfo, properties, interpreterDir.toFile().getAbsolutePath()); } } @@ -361,12 +372,6 @@ private void loadFromFile() throws IOException { for (String k : info.interpreterSettings.keySet()) { InterpreterSetting setting = info.interpreterSettings.get(k); - // Always use separate interpreter process - // While we decided to turn this feature on always (without providing - // enable/disable option on GUI). - // previously created setting should turn this feature on here. - setting.getOption().setRemote(true); - // Update transient information from InterpreterSettingRef interpreterSettingObject = interpreterSettingsRef.get(setting.getGroup()); if (interpreterSettingObject == null) { @@ -577,7 +582,7 @@ public InterpreterSetting add(String group, ArrayList interpret } else { interpreterSetting = new InterpreterSetting(group, null, interpreterInfos, properties, dependencies, option, - path); + path, conf); interpreterSettingsRef.put(group, interpreterSetting); } } @@ -915,9 +920,11 @@ public void run() { private Interpreter createRepl(String dirName, String className, Properties property) throws InterpreterException { + logger.info("Create repl {} from {}", className, dirName); ClassLoader oldcl = Thread.currentThread().getContextClassLoader(); + try { URLClassLoader ccl = cleanCl.get(dirName); @@ -926,32 +933,17 @@ private Interpreter createRepl(String dirName, String className, Properties prop ccl = URLClassLoader.newInstance(new URL[] {}, oldcl); } - boolean separateCL = true; - try { // check if server's classloader has driver already. - Class cls = this.getClass().forName(className); - if (cls != null) { - separateCL = false; - } - } catch (Exception e) { - logger.error("exception checking server classloader driver", e); - } - - URLClassLoader cl; + Thread.currentThread().setContextClassLoader(ccl); - if (separateCL == true) { - cl = URLClassLoader.newInstance(new URL[] {}, ccl); - } else { - cl = ccl; - } - Thread.currentThread().setContextClassLoader(cl); - - Class replClass = (Class) cl.loadClass(className); + Class replClass = (Class) ccl.loadClass(className); Constructor constructor = replClass.getConstructor(new Class[] {Properties.class}); Interpreter repl = constructor.newInstance(property); repl.setClassloaderUrls(ccl.getURLs()); - LazyOpenInterpreter intp = new LazyOpenInterpreter(new ClassloaderInterpreter(repl, cl)); + LazyOpenInterpreter intp = new LazyOpenInterpreter(new ClassloaderInterpreter(repl, ccl)); + return intp; + } catch (SecurityException e) { throw new InterpreterException(e); } catch (NoSuchMethodException e) { @@ -1015,15 +1007,19 @@ public List getInterpreterSettings(String noteId) { List interpreterSettingIds = getNoteInterpreterSettingBinding(noteId); LinkedList settings = new LinkedList<>(); synchronized (interpreterSettingIds) { + List idsToBeRemoved = Lists.newArrayList(); for (String id : interpreterSettingIds) { InterpreterSetting setting = get(id); if (setting == null) { // interpreter setting is removed from factory. remove id from here, too - interpreterSettingIds.remove(id); + idsToBeRemoved.add(id); } else { settings.add(setting); } } + for (String id: idsToBeRemoved) { + interpreterSettingIds.remove(id); + } } return settings; } @@ -1242,8 +1238,7 @@ public void setEnv(Map env) { private Interpreter getDevInterpreter() { if (devInterpreter == null) { - InterpreterOption option = new InterpreterOption(); - option.setRemote(true); + InterpreterOption option = new InterpreterOption(conf.getInterpreterRemote()); InterpreterGroup interpreterGroup = createInterpreterGroup("dev", option); diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfo.java index c104b9d7eea..251b635c6e8 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfo.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfo.java @@ -21,7 +21,7 @@ /** * Information of interpreters in this interpreter setting. - * this will be serialized for conf/interpreter.json and REST api response. + * this will be serialized for conf/interpreter-setting.json and REST api response. */ public class InterpreterInfo { private String name; diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterOption.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterOption.java index 2bcc4c69ac0..490883251d6 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterOption.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterOption.java @@ -33,6 +33,12 @@ public class InterpreterOption { boolean setPermission; List users; + private InterpreterOption() {} + + public InterpreterOption(boolean remote) { + this.remote = remote; + } + public boolean isExistingProcess() { return isExistingProcess; } @@ -61,14 +67,6 @@ public List getUsers() { return users; } - public InterpreterOption() { - remote = false; - } - - public InterpreterOption(boolean remote) { - this.remote = remote; - } - public boolean isRemote() { return remote; } diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java index 65f60cd1a6e..1532eb3c815 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java @@ -27,6 +27,7 @@ import com.google.gson.annotations.SerializedName; +import org.apache.zeppelin.conf.ZeppelinConfiguration; import org.apache.zeppelin.dep.Dependency; import static org.apache.zeppelin.notebook.utility.IdHashes.generateId; @@ -48,6 +49,7 @@ public class InterpreterSetting { private List dependencies; private InterpreterOption option; private transient String path; + private transient ZeppelinConfiguration conf; @Deprecated private transient InterpreterGroupFactory interpreterGroupFactory; @@ -57,7 +59,7 @@ public InterpreterSetting() { public InterpreterSetting(String id, String name, String group, List interpreterInfos, Properties properties, List dependencies, - InterpreterOption option, String path) { + InterpreterOption option, String path, ZeppelinConfiguration conf) { this.id = id; this.name = name; this.group = group; @@ -67,11 +69,12 @@ public InterpreterSetting(String id, String name, String group, this.option = option; this.path = path; this.status = Status.READY; + this.conf = conf; } public InterpreterSetting(String name, String group, List interpreterInfos, - Properties properties, List dependencies, InterpreterOption option, String path) { - this(generateId(), name, group, interpreterInfos, properties, dependencies, option, path); + Properties properties, List dependencies, InterpreterOption option, String path, ZeppelinConfiguration conf) { + this(generateId(), name, group, interpreterInfos, properties, dependencies, option, path, conf); } /** @@ -79,9 +82,9 @@ public InterpreterSetting(String name, String group, List inter * * @param o interpreterSetting from interpreterSettingRef */ - public InterpreterSetting(InterpreterSetting o) { + public InterpreterSetting(InterpreterSetting o, ZeppelinConfiguration conf) { this(generateId(), o.getName(), o.getGroup(), o.getInterpreterInfos(), o.getProperties(), - o.getDependencies(), o.getOption(), o.getPath()); + o.getDependencies(), o.getOption(), o.getPath(), conf); } public String getId() { @@ -164,7 +167,7 @@ public void setDependencies(List dependencies) { public InterpreterOption getOption() { if (option == null) { - option = new InterpreterOption(); + option = new InterpreterOption(conf.getInterpreterRemote()); } return option; From 55bdd8cb9189b12bf534bc7c40e7b3715328ede5 Mon Sep 17 00:00:00 2001 From: Eric Charles Date: Wed, 31 Aug 2016 10:45:28 +0200 Subject: [PATCH 2/4] Use factory method to create ZeppelinConfiguration object and revert changes to InterpeterSetting method signatures --- .../zeppelin/interpreter/InterpreterFactory.java | 4 ++-- .../zeppelin/interpreter/InterpreterSetting.java | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java index cf5011d0c22..e819a08ad32 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java @@ -272,7 +272,7 @@ private InterpreterSetting createFromInterpreterSettingRef(String name) { private InterpreterSetting createFromInterpreterSettingRef(InterpreterSetting o) { InterpreterSetting setting = new InterpreterSetting(o.getName(), o.getName(), o.getInterpreterInfos(), o.getProperties(), - o.getDependencies(), o.getOption(), o.getPath(), conf); + o.getDependencies(), o.getOption(), o.getPath()); setting.setInterpreterGroupFactory(this); return setting; } @@ -582,7 +582,7 @@ public InterpreterSetting add(String group, ArrayList interpret } else { interpreterSetting = new InterpreterSetting(group, null, interpreterInfos, properties, dependencies, option, - path, conf); + path); interpreterSettingsRef.put(group, interpreterSetting); } } diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java index 1532eb3c815..7502f09a1e6 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java @@ -49,7 +49,7 @@ public class InterpreterSetting { private List dependencies; private InterpreterOption option; private transient String path; - private transient ZeppelinConfiguration conf; + private transient ZeppelinConfiguration conf = ZeppelinConfiguration.create(); @Deprecated private transient InterpreterGroupFactory interpreterGroupFactory; @@ -59,7 +59,7 @@ public InterpreterSetting() { public InterpreterSetting(String id, String name, String group, List interpreterInfos, Properties properties, List dependencies, - InterpreterOption option, String path, ZeppelinConfiguration conf) { + InterpreterOption option, String path) { this.id = id; this.name = name; this.group = group; @@ -69,12 +69,11 @@ public InterpreterSetting(String id, String name, String group, this.option = option; this.path = path; this.status = Status.READY; - this.conf = conf; } public InterpreterSetting(String name, String group, List interpreterInfos, - Properties properties, List dependencies, InterpreterOption option, String path, ZeppelinConfiguration conf) { - this(generateId(), name, group, interpreterInfos, properties, dependencies, option, path, conf); + Properties properties, List dependencies, InterpreterOption option, String path) { + this(generateId(), name, group, interpreterInfos, properties, dependencies, option, path); } /** @@ -84,7 +83,7 @@ public InterpreterSetting(String name, String group, List inter */ public InterpreterSetting(InterpreterSetting o, ZeppelinConfiguration conf) { this(generateId(), o.getName(), o.getGroup(), o.getInterpreterInfos(), o.getProperties(), - o.getDependencies(), o.getOption(), o.getPath(), conf); + o.getDependencies(), o.getOption(), o.getPath()); } public String getId() { From 4f17ed0945da6e9aed1ddddfa2611d29a6226ae0 Mon Sep 17 00:00:00 2001 From: Eric Charles Date: Fri, 2 Sep 2016 15:49:08 +0200 Subject: [PATCH 3/4] fix format --- .../zeppelin/interpreter/InterpreterFactory.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java index e819a08ad32..752d44ff773 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java @@ -299,7 +299,8 @@ private void registerInterpreterFromResource(URLClassLoader cl, Path interpreter } - private void registerInterpreterFromPath(URLClassLoader cl, Path interpreterDir, String interpreterJson) + private void registerInterpreterFromPath(URLClassLoader cl, + Path interpreterDir, String interpreterJson) throws IOException, RepositoryException { Path interpreterJsonPath = Paths.get(interpreterDir.toString(), interpreterJson); @@ -324,12 +325,13 @@ private List getInterpreterListFromJson(InputStream strea return gson.fromJson(new InputStreamReader(stream), registeredInterpreterListType); } - private void registerInterpreters(URLClassLoader cl, List registeredInterpreters, - Path interpreterDir) throws IOException, RepositoryException { + private void registerInterpreters(URLClassLoader cl, + List registeredInterpreters, + Path interpreterDir) throws IOException, RepositoryException { - cleanCl.put(interpreterDir.toFile().getAbsolutePath(), cl); + cleanCl.put(interpreterDir.toFile().getAbsolutePath(), cl); - for (RegisteredInterpreter registeredInterpreter : registeredInterpreters) { + for (RegisteredInterpreter registeredInterpreter : registeredInterpreters) { InterpreterInfo interpreterInfo = new InterpreterInfo(registeredInterpreter.getClassName(), registeredInterpreter.getName(), registeredInterpreter.isDefaultInterpreter()); @@ -342,7 +344,8 @@ private void registerInterpreters(URLClassLoader cl, List } } - add(registeredInterpreter.getGroup(), interpreterInfo, properties, interpreterDir.toFile().getAbsolutePath()); + add(registeredInterpreter.getGroup(), + interpreterInfo, properties, interpreterDir.toFile().getAbsolutePath()); } } From 790d25804009d01d8c63713c4370ae9fb5082039 Mon Sep 17 00:00:00 2001 From: Eric Charles Date: Fri, 9 Sep 2016 17:26:02 +0200 Subject: [PATCH 4/4] Remove unused zeppelin configuration parameter in the InterpreterSetting constructor --- .../org/apache/zeppelin/interpreter/InterpreterSetting.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java index 7502f09a1e6..f964c0f985e 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java @@ -81,7 +81,7 @@ public InterpreterSetting(String name, String group, List inter * * @param o interpreterSetting from interpreterSettingRef */ - public InterpreterSetting(InterpreterSetting o, ZeppelinConfiguration conf) { + public InterpreterSetting(InterpreterSetting o) { this(generateId(), o.getName(), o.getGroup(), o.getInterpreterInfos(), o.getProperties(), o.getDependencies(), o.getOption(), o.getPath()); }