http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java ---------------------------------------------------------------------- diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java index 3ddeec0..102ca1a 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java @@ -41,12 +41,7 @@ import org.apache.zeppelin.display.AngularObjectRegistryListener; import org.apache.zeppelin.display.Input; import org.apache.zeppelin.helium.ApplicationEventListener; import org.apache.zeppelin.helium.HeliumPackage; -import org.apache.zeppelin.interpreter.Interpreter; -import org.apache.zeppelin.interpreter.InterpreterContextRunner; -import org.apache.zeppelin.interpreter.InterpreterGroup; -import org.apache.zeppelin.interpreter.InterpreterResult; -import org.apache.zeppelin.interpreter.InterpreterResultMessage; -import org.apache.zeppelin.interpreter.InterpreterSetting; +import org.apache.zeppelin.interpreter.*; import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry; import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener; import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; @@ -463,7 +458,8 @@ public class NotebookServer extends WebSocketServlet Notebook notebook = notebook(); List<Note> notes = notebook.getAllNotes(); for (Note note : notes) { - List<String> ids = notebook.getInterpreterSettingManager().getInterpreters(note.getId()); + List<String> ids = notebook.getInterpreterSettingManager() + .getInterpreterBinding(note.getId()); for (String id : ids) { if (id.equals(interpreterGroupId)) { broadcast(note.getId(), m); @@ -1003,7 +999,7 @@ public class NotebookServer extends WebSocketServlet List<String> interpreterSettingIds = new LinkedList<>(); interpreterSettingIds.add(defaultInterpreterId); for (String interpreterSettingId : notebook.getInterpreterSettingManager(). - getDefaultInterpreterSettingList()) { + getInterpreterSettingIds()) { if (!interpreterSettingId.equals(defaultInterpreterId)) { interpreterSettingIds.add(interpreterSettingId); } @@ -1363,12 +1359,13 @@ public class NotebookServer extends WebSocketServlet List<InterpreterSetting> settings = notebook.getInterpreterSettingManager().getInterpreterSettings(note.getId()); for (InterpreterSetting setting : settings) { - if (setting.getInterpreterGroup(user, note.getId()) == null) { + if (setting.getOrCreateInterpreterGroup(user, note.getId()) == null) { continue; } - if (interpreterGroupId.equals(setting.getInterpreterGroup(user, note.getId()).getId())) { + if (interpreterGroupId.equals(setting.getOrCreateInterpreterGroup(user, note.getId()) + .getId())) { AngularObjectRegistry angularObjectRegistry = - setting.getInterpreterGroup(user, note.getId()).getAngularObjectRegistry(); + setting.getOrCreateInterpreterGroup(user, note.getId()).getAngularObjectRegistry(); // first trying to get local registry ao = angularObjectRegistry.get(varName, noteId, paragraphId); @@ -1405,12 +1402,13 @@ public class NotebookServer extends WebSocketServlet List<InterpreterSetting> settings = notebook.getInterpreterSettingManager().getInterpreterSettings(note.getId()); for (InterpreterSetting setting : settings) { - if (setting.getInterpreterGroup(user, n.getId()) == null) { + if (setting.getOrCreateInterpreterGroup(user, n.getId()) == null) { continue; } - if (interpreterGroupId.equals(setting.getInterpreterGroup(user, n.getId()).getId())) { + if (interpreterGroupId.equals(setting.getOrCreateInterpreterGroup(user, n.getId()) + .getId())) { AngularObjectRegistry angularObjectRegistry = - setting.getInterpreterGroup(user, n.getId()).getAngularObjectRegistry(); + setting.getOrCreateInterpreterGroup(user, n.getId()).getAngularObjectRegistry(); this.broadcastExcept(n.getId(), new Message(OP.ANGULAR_OBJECT_UPDATE).put("angularObject", ao) .put("interpreterGroupId", interpreterGroupId).put("noteId", n.getId()) @@ -2283,13 +2281,13 @@ public class NotebookServer extends WebSocketServlet for (InterpreterSetting intpSetting : settings) { AngularObjectRegistry registry = - intpSetting.getInterpreterGroup(user, note.getId()).getAngularObjectRegistry(); + intpSetting.getOrCreateInterpreterGroup(user, note.getId()).getAngularObjectRegistry(); List<AngularObject> objects = registry.getAllWithGlobal(note.getId()); for (AngularObject object : objects) { conn.send(serializeMessage( new Message(OP.ANGULAR_OBJECT_UPDATE).put("angularObject", object) .put("interpreterGroupId", - intpSetting.getInterpreterGroup(user, note.getId()).getId()) + intpSetting.getOrCreateInterpreterGroup(user, note.getId()).getId()) .put("noteId", note.getId()).put("paragraphId", object.getParagraphId()))); } } @@ -2335,7 +2333,7 @@ public class NotebookServer extends WebSocketServlet } List<String> settingIds = - notebook.getInterpreterSettingManager().getInterpreters(note.getId()); + notebook.getInterpreterSettingManager().getInterpreterBinding(note.getId()); for (String id : settingIds) { if (interpreterGroupId.contains(id)) { broadcast(note.getId(),
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-server/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java ---------------------------------------------------------------------- diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java b/zeppelin-server/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java deleted file mode 100644 index 1b1306a..0000000 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.zeppelin.interpreter.mock; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import org.apache.zeppelin.interpreter.Interpreter; -import org.apache.zeppelin.interpreter.InterpreterContext; -import org.apache.zeppelin.interpreter.InterpreterResult; -import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; -import org.apache.zeppelin.scheduler.Scheduler; -import org.apache.zeppelin.scheduler.SchedulerFactory; - -public class MockInterpreter1 extends Interpreter{ - Map<String, Object> vars = new HashMap<>(); - - public MockInterpreter1(Properties property) { - super(property); - } - - @Override - public void open() { - } - - @Override - public void close() { - } - - @Override - public InterpreterResult interpret(String st, InterpreterContext context) { - return new InterpreterResult(InterpreterResult.Code.SUCCESS, "repl1: "+st); - } - - @Override - public void cancel(InterpreterContext context) { - } - - @Override - public FormType getFormType() { - return FormType.SIMPLE; - } - - @Override - public int getProgress(InterpreterContext context) { - return 0; - } - - @Override - public Scheduler getScheduler() { - return SchedulerFactory.singleton().createOrGetFIFOScheduler("test_"+this.hashCode()); - } - - @Override - public List<InterpreterCompletion> completion(String buf, int cursor, - InterpreterContext interpreterContext) { - return null; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java ---------------------------------------------------------------------- diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java index a7907db..e2f171f 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java @@ -307,10 +307,9 @@ public abstract class AbstractTestRestApi { protected static void shutDown() throws Exception { if (!wasRunning) { // restart interpreter to stop all interpreter processes - List<String> settingList = ZeppelinServer.notebook.getInterpreterSettingManager() - .getDefaultInterpreterSettingList(); - for (String setting : settingList) { - ZeppelinServer.notebook.getInterpreterSettingManager().restart(setting); + List<InterpreterSetting> settingList = ZeppelinServer.notebook.getInterpreterSettingManager().get(); + for (InterpreterSetting setting : settingList) { + ZeppelinServer.notebook.getInterpreterSettingManager().restart(setting.getId()); } if (shiroIni != null) { FileUtils.deleteQuietly(shiroIni); http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-server/src/test/java/org/apache/zeppelin/rest/InterpreterRestApiTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/InterpreterRestApiTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/InterpreterRestApiTest.java index 28541bd..72dd8a7 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/InterpreterRestApiTest.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/InterpreterRestApiTest.java @@ -80,7 +80,7 @@ public class InterpreterRestApiTest extends AbstractTestRestApi { // then assertThat(get, isAllowed()); - assertEquals(ZeppelinServer.notebook.getInterpreterSettingManager().getAvailableInterpreterSettings().size(), + assertEquals(ZeppelinServer.notebook.getInterpreterSettingManager().getInterpreterSettingTemplates().size(), body.entrySet().size()); get.releaseConnection(); } @@ -110,7 +110,7 @@ public class InterpreterRestApiTest extends AbstractTestRestApi { @Test public void testSettingsCRUD() throws IOException { // when: call create setting API - String rawRequest = "{\"name\":\"md2\",\"group\":\"md\"," + + String rawRequest = "{\"name\":\"md3\",\"group\":\"md\"," + "\"properties\":{\"propname\": {\"value\": \"propvalue\", \"name\": \"propname\", \"type\": \"textarea\"}}," + "\"interpreterGroup\":[{\"class\":\"org.apache.zeppelin.markdown.Markdown\",\"name\":\"md\"}]," + "\"dependencies\":[]," + @@ -367,7 +367,7 @@ public class InterpreterRestApiTest extends AbstractTestRestApi { @Test public void testGetMetadataInfo() throws IOException { - String jsonRequest = "{\"name\":\"spark\",\"group\":\"spark\"," + + String jsonRequest = "{\"name\":\"spark_new\",\"group\":\"spark\"," + "\"properties\":{\"propname\": {\"value\": \"propvalue\", \"name\": \"propname\", \"type\": \"textarea\"}}," + "\"interpreterGroup\":[{\"class\":\"org.apache.zeppelin.markdown.Markdown\",\"name\":\"md\"}]," + "\"dependencies\":[]," + http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-server/src/test/java/org/apache/zeppelin/socket/NotebookServerTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/socket/NotebookServerTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/socket/NotebookServerTest.java index 8da36a6..10d77b2 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/socket/NotebookServerTest.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/socket/NotebookServerTest.java @@ -30,6 +30,7 @@ import org.apache.zeppelin.notebook.Paragraph; import org.apache.zeppelin.notebook.socket.Message; import org.apache.zeppelin.notebook.socket.Message.OP; import org.apache.zeppelin.rest.AbstractTestRestApi; +import org.apache.zeppelin.scheduler.Job; import org.apache.zeppelin.server.ZeppelinServer; import org.apache.zeppelin.user.AuthenticationInfo; import org.junit.AfterClass; @@ -95,7 +96,7 @@ public class NotebookServerTest extends AbstractTestRestApi { } @Test - public void testMakeSureNoAngularObjectBroadcastToWebsocketWhoFireTheEvent() throws IOException { + public void testMakeSureNoAngularObjectBroadcastToWebsocketWhoFireTheEvent() throws IOException, InterruptedException { // create a notebook Note note1 = notebook.createNote(anonymous); @@ -104,7 +105,7 @@ public class NotebookServerTest extends AbstractTestRestApi { List<InterpreterSetting> settings = notebook.getInterpreterSettingManager().getInterpreterSettings(note1.getId()); for (InterpreterSetting setting : settings) { if (setting.getName().equals("md")) { - interpreterGroup = setting.getInterpreterGroup("anonymous", "sharedProcess"); + interpreterGroup = setting.getOrCreateInterpreterGroup("anonymous", "sharedProcess"); break; } } @@ -115,6 +116,14 @@ public class NotebookServerTest extends AbstractTestRestApi { p1.setAuthenticationInfo(anonymous); note1.run(p1.getId()); + // wait for paragraph finished + while(true) { + if (p1.getStatus() == Job.Status.FINISHED) { + break; + } + Thread.sleep(100); + } + // add angularObject interpreterGroup.getAngularObjectRegistry().add("object1", "value1", note1.getId(), null); http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-server/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/zeppelin-server/src/test/resources/log4j.properties b/zeppelin-server/src/test/resources/log4j.properties index b0d1067..8368993 100644 --- a/zeppelin-server/src/test/resources/log4j.properties +++ b/zeppelin-server/src/test/resources/log4j.properties @@ -33,7 +33,6 @@ log4j.logger.org.apache.hadoop.mapred=WARN log4j.logger.org.apache.hadoop.hive.ql=WARN log4j.logger.org.apache.hadoop.hive.metastore=WARN log4j.logger.org.apache.haadoop.hive.service.HiveServer=WARN -log4j.logger.org.apache.zeppelin.scheduler=WARN log4j.logger.org.quartz=WARN log4j.logger.DataNucleus=WARN http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/pom.xml ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/pom.xml b/zeppelin-zengine/pom.xml index b3d5c63..3ae382a 100644 --- a/zeppelin-zengine/pom.xml +++ b/zeppelin-zengine/pom.xml @@ -61,18 +61,21 @@ </dependency> <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> + <groupId>${project.groupId}</groupId> + <artifactId>zeppelin-interpreter</artifactId> + <version>${project.version}</version> + <classifier>tests</classifier> + <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> + <artifactId>slf4j-api</artifactId> </dependency> <dependency> - <groupId>commons-configuration</groupId> - <artifactId>commons-configuration</artifactId> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java ---------------------------------------------------------------------- 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 deleted file mode 100644 index f00fe93..0000000 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ /dev/null @@ -1,835 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.zeppelin.conf; - -import java.io.File; -import java.net.URL; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; -import org.apache.commons.configuration.tree.ConfigurationNode; -import org.apache.commons.lang.StringUtils; -import org.apache.zeppelin.notebook.repo.GitNotebookRepo; -import org.apache.zeppelin.util.Util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Zeppelin configuration. - * - */ -public class ZeppelinConfiguration extends XMLConfiguration { - private static final String ZEPPELIN_SITE_XML = "zeppelin-site.xml"; - private static final long serialVersionUID = 4749305895693848035L; - private static final Logger LOG = LoggerFactory.getLogger(ZeppelinConfiguration.class); - - private static final String HELIUM_PACKAGE_DEFAULT_URL = - "https://s3.amazonaws.com/helium-package/helium.json"; - private static ZeppelinConfiguration conf; - - public ZeppelinConfiguration(URL url) throws ConfigurationException { - setDelimiterParsingDisabled(true); - load(url); - } - - public ZeppelinConfiguration() { - ConfVars[] vars = ConfVars.values(); - for (ConfVars v : vars) { - if (v.getType() == ConfVars.VarType.BOOLEAN) { - this.setProperty(v.getVarName(), v.getBooleanValue()); - } else if (v.getType() == ConfVars.VarType.LONG) { - this.setProperty(v.getVarName(), v.getLongValue()); - } else if (v.getType() == ConfVars.VarType.INT) { - this.setProperty(v.getVarName(), v.getIntValue()); - } else if (v.getType() == ConfVars.VarType.FLOAT) { - this.setProperty(v.getVarName(), v.getFloatValue()); - } else if (v.getType() == ConfVars.VarType.STRING) { - this.setProperty(v.getVarName(), v.getStringValue()); - } else { - throw new RuntimeException("Unsupported VarType"); - } - } - - } - - - /** - * Load from resource. - *url = ZeppelinConfiguration.class.getResource(ZEPPELIN_SITE_XML); - * @throws ConfigurationException - */ - public static synchronized ZeppelinConfiguration create() { - if (conf != null) { - return conf; - } - - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - URL url; - - url = ZeppelinConfiguration.class.getResource(ZEPPELIN_SITE_XML); - if (url == null) { - ClassLoader cl = ZeppelinConfiguration.class.getClassLoader(); - if (cl != null) { - url = cl.getResource(ZEPPELIN_SITE_XML); - } - } - if (url == null) { - url = classLoader.getResource(ZEPPELIN_SITE_XML); - } - - if (url == null) { - LOG.warn("Failed to load configuration, proceeding with a default"); - conf = new ZeppelinConfiguration(); - } else { - try { - LOG.info("Load configuration from " + url); - conf = new ZeppelinConfiguration(url); - } catch (ConfigurationException e) { - LOG.warn("Failed to load configuration from " + url + " proceeding with a default", e); - conf = new ZeppelinConfiguration(); - } - } - - LOG.info("Server Host: " + conf.getServerAddress()); - if (conf.useSsl() == false) { - LOG.info("Server Port: " + conf.getServerPort()); - } else { - LOG.info("Server SSL Port: " + conf.getServerSslPort()); - } - LOG.info("Context Path: " + conf.getServerContextPath()); - LOG.info("Zeppelin Version: " + Util.getVersion()); - - return conf; - } - - - private String getStringValue(String name, String d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.isEmpty()) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && !p.getChildren("name").isEmpty() - && name.equals(p.getChildren("name").get(0).getValue())) { - return (String) p.getChildren("value").get(0).getValue(); - } - } - return d; - } - - private int getIntValue(String name, int d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.isEmpty()) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && !p.getChildren("name").isEmpty() - && name.equals(p.getChildren("name").get(0).getValue())) { - return Integer.parseInt((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - private long getLongValue(String name, long d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.isEmpty()) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && !p.getChildren("name").isEmpty() - && name.equals(p.getChildren("name").get(0).getValue())) { - return Long.parseLong((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - private float getFloatValue(String name, float d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.isEmpty()) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && !p.getChildren("name").isEmpty() - && name.equals(p.getChildren("name").get(0).getValue())) { - return Float.parseFloat((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - private boolean getBooleanValue(String name, boolean d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.isEmpty()) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && !p.getChildren("name").isEmpty() - && name.equals(p.getChildren("name").get(0).getValue())) { - return Boolean.parseBoolean((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - public String getString(ConfVars c) { - return getString(c.name(), c.getVarName(), c.getStringValue()); - } - - public String getString(String envName, String propertyName, String defaultValue) { - if (System.getenv(envName) != null) { - return System.getenv(envName); - } - if (System.getProperty(propertyName) != null) { - return System.getProperty(propertyName); - } - - return getStringValue(propertyName, defaultValue); - } - - public int getInt(ConfVars c) { - return getInt(c.name(), c.getVarName(), c.getIntValue()); - } - - public int getInt(String envName, String propertyName, int defaultValue) { - if (System.getenv(envName) != null) { - return Integer.parseInt(System.getenv(envName)); - } - - if (System.getProperty(propertyName) != null) { - return Integer.parseInt(System.getProperty(propertyName)); - } - return getIntValue(propertyName, defaultValue); - } - - public long getLong(ConfVars c) { - return getLong(c.name(), c.getVarName(), c.getLongValue()); - } - - public long getLong(String envName, String propertyName, long defaultValue) { - if (System.getenv(envName) != null) { - return Long.parseLong(System.getenv(envName)); - } - - if (System.getProperty(propertyName) != null) { - return Long.parseLong(System.getProperty(propertyName)); - } - return getLongValue(propertyName, defaultValue); - } - - public float getFloat(ConfVars c) { - return getFloat(c.name(), c.getVarName(), c.getFloatValue()); - } - - public float getFloat(String envName, String propertyName, float defaultValue) { - if (System.getenv(envName) != null) { - return Float.parseFloat(System.getenv(envName)); - } - if (System.getProperty(propertyName) != null) { - return Float.parseFloat(System.getProperty(propertyName)); - } - return getFloatValue(propertyName, defaultValue); - } - - public boolean getBoolean(ConfVars c) { - return getBoolean(c.name(), c.getVarName(), c.getBooleanValue()); - } - - public boolean getBoolean(String envName, String propertyName, boolean defaultValue) { - if (System.getenv(envName) != null) { - return Boolean.parseBoolean(System.getenv(envName)); - } - - if (System.getProperty(propertyName) != null) { - return Boolean.parseBoolean(System.getProperty(propertyName)); - } - return getBooleanValue(propertyName, defaultValue); - } - - public boolean useSsl() { - return getBoolean(ConfVars.ZEPPELIN_SSL); - } - - public int getServerSslPort() { - return getInt(ConfVars.ZEPPELIN_SSL_PORT); - } - - public boolean useClientAuth() { - return getBoolean(ConfVars.ZEPPELIN_SSL_CLIENT_AUTH); - } - - public String getServerAddress() { - return getString(ConfVars.ZEPPELIN_ADDR); - } - - public int getServerPort() { - return getInt(ConfVars.ZEPPELIN_PORT); - } - - public String getServerContextPath() { - return getString(ConfVars.ZEPPELIN_SERVER_CONTEXT_PATH); - } - - public String getKeyStorePath() { - String path = getString(ConfVars.ZEPPELIN_SSL_KEYSTORE_PATH); - if (path != null && path.startsWith("/") || isWindowsPath(path)) { - return path; - } else { - return getRelativeDir( - String.format("%s/%s", - getConfDir(), - path)); - } - } - - public String getKeyStoreType() { - return getString(ConfVars.ZEPPELIN_SSL_KEYSTORE_TYPE); - } - - public String getKeyStorePassword() { - return getString(ConfVars.ZEPPELIN_SSL_KEYSTORE_PASSWORD); - } - - public String getKeyManagerPassword() { - String password = getString(ConfVars.ZEPPELIN_SSL_KEY_MANAGER_PASSWORD); - if (password == null) { - return getKeyStorePassword(); - } else { - return password; - } - } - - public String getTrustStorePath() { - String path = getString(ConfVars.ZEPPELIN_SSL_TRUSTSTORE_PATH); - if (path == null) { - path = getKeyStorePath(); - } - if (path != null && path.startsWith("/") || isWindowsPath(path)) { - return path; - } else { - return getRelativeDir( - String.format("%s/%s", - getConfDir(), - path)); - } - } - - public String getTrustStoreType() { - String type = getString(ConfVars.ZEPPELIN_SSL_TRUSTSTORE_TYPE); - if (type == null) { - return getKeyStoreType(); - } else { - return type; - } - } - - public String getTrustStorePassword() { - String password = getString(ConfVars.ZEPPELIN_SSL_TRUSTSTORE_PASSWORD); - if (password == null) { - return getKeyStorePassword(); - } else { - return password; - } - } - - public String getNotebookDir() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_DIR); - } - - public String getUser() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_USER); - } - - public String getBucketName() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_BUCKET); - } - - public String getEndpoint() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_ENDPOINT); - } - - public String getS3KMSKeyID() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_KMS_KEY_ID); - } - - public String getS3KMSKeyRegion() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_KMS_KEY_REGION); - } - - public String getS3EncryptionMaterialsProviderClass() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_EMP); - } - - public boolean isS3ServerSideEncryption() { - return getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_S3_SSE); - } - - public String getMongoUri() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_MONGO_URI); - } - - public String getMongoDatabase() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_MONGO_DATABASE); - } - - public String getMongoCollection() { - return getString(ConfVars.ZEPPELIN_NOTEBOOK_MONGO_COLLECTION); - } - - public boolean getMongoAutoimport() { - return getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_MONGO_AUTOIMPORT); - } - - public String getInterpreterListPath() { - return getRelativeDir(String.format("%s/interpreter-list", getConfDir())); - } - - public String getInterpreterDir() { - return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_DIR); - } - - public String getInterpreterJson() { - return getString(ConfVars.ZEPPELIN_INTERPRETER_JSON); - } - - public String getInterpreterSettingPath() { - return getRelativeDir(String.format("%s/interpreter.json", getConfDir())); - } - - public String getHeliumConfPath() { - return getRelativeDir(String.format("%s/helium.json", getConfDir())); - } - - public String getHeliumRegistry() { - return getRelativeDir(ConfVars.ZEPPELIN_HELIUM_REGISTRY); - } - - public String getHeliumNodeInstallerUrl() { - return getString(ConfVars.ZEPPELIN_HELIUM_NODE_INSTALLER_URL); - } - - public String getHeliumNpmInstallerUrl() { - return getString(ConfVars.ZEPPELIN_HELIUM_NPM_INSTALLER_URL); - } - - public String getHeliumYarnInstallerUrl() { - return getString(ConfVars.ZEPPELIN_HELIUM_YARNPKG_INSTALLER_URL); - } - - public String getNotebookAuthorizationPath() { - return getRelativeDir(String.format("%s/notebook-authorization.json", getConfDir())); - } - - public Boolean credentialsPersist() { - return getBoolean(ConfVars.ZEPPELIN_CREDENTIALS_PERSIST); - } - - public String getCredentialsPath() { - return getRelativeDir(String.format("%s/credentials.json", getConfDir())); - } - - public String getShiroPath() { - String shiroPath = getRelativeDir(String.format("%s/shiro.ini", getConfDir())); - return new File(shiroPath).exists() ? shiroPath : StringUtils.EMPTY; - } - - public String getInterpreterRemoteRunnerPath() { - return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_REMOTE_RUNNER); - } - - public String getInterpreterLocalRepoPath() { - return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_LOCALREPO); - } - - public String getInterpreterMvnRepoPath() { - return getString(ConfVars.ZEPPELIN_INTERPRETER_DEP_MVNREPO); - } - - public String getRelativeDir(ConfVars c) { - return getRelativeDir(getString(c)); - } - - public String getRelativeDir(String path) { - if (path != null && path.startsWith("/") || isWindowsPath(path)) { - return path; - } else { - return getString(ConfVars.ZEPPELIN_HOME) + "/" + path; - } - } - - public boolean isWindowsPath(String path){ - return path.matches("^[A-Za-z]:\\\\.*"); - } - - public boolean isAnonymousAllowed() { - return getBoolean(ConfVars.ZEPPELIN_ANONYMOUS_ALLOWED); - } - - public boolean isNotebokPublic() { - return getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_PUBLIC); - } - - public String getConfDir() { - return getString(ConfVars.ZEPPELIN_CONF_DIR); - } - - public List<String> getAllowedOrigins() - { - if (getString(ConfVars.ZEPPELIN_ALLOWED_ORIGINS).isEmpty()) { - return Arrays.asList(new String[0]); - } - - return Arrays.asList(getString(ConfVars.ZEPPELIN_ALLOWED_ORIGINS).toLowerCase().split(",")); - } - - public String getWebsocketMaxTextMessageSize() { - return getString(ConfVars.ZEPPELIN_WEBSOCKET_MAX_TEXT_MESSAGE_SIZE); - } - - public String getJettyName() { - return getString(ConfVars.ZEPPELIN_SERVER_JETTY_NAME); - } - - - public String getXFrameOptions() { - return getString(ConfVars.ZEPPELIN_SERVER_XFRAME_OPTIONS); - } - - public String getXxssProtection() { - return getString(ConfVars.ZEPPELIN_SERVER_X_XSS_PROTECTION); - } - - public String getStrictTransport() { - return getString(ConfVars.ZEPPELIN_SERVER_STRICT_TRANSPORT); - } - - - public Map<String, String> dumpConfigurations(ZeppelinConfiguration conf, - ConfigurationKeyPredicate predicate) { - Map<String, String> configurations = new HashMap<>(); - - for (ZeppelinConfiguration.ConfVars v : ZeppelinConfiguration.ConfVars.values()) { - String key = v.getVarName(); - - if (!predicate.apply(key)) { - continue; - } - - ConfVars.VarType type = v.getType(); - Object value = null; - if (type == ConfVars.VarType.BOOLEAN) { - value = conf.getBoolean(v); - } else if (type == ConfVars.VarType.LONG) { - value = conf.getLong(v); - } else if (type == ConfVars.VarType.INT) { - value = conf.getInt(v); - } else if (type == ConfVars.VarType.FLOAT) { - value = conf.getFloat(v); - } else if (type == ConfVars.VarType.STRING) { - value = conf.getString(v); - } - - if (value != null) { - configurations.put(key, value.toString()); - } - } - return configurations; - } - - /** - * Predication whether key/value pair should be included or not - */ - public interface ConfigurationKeyPredicate { - boolean apply(String key); - } - - /** - * Wrapper class. - */ - public static enum ConfVars { - ZEPPELIN_HOME("zeppelin.home", "./"), - ZEPPELIN_ADDR("zeppelin.server.addr", "0.0.0.0"), - ZEPPELIN_PORT("zeppelin.server.port", 8080), - ZEPPELIN_SERVER_CONTEXT_PATH("zeppelin.server.context.path", "/"), - ZEPPELIN_SSL("zeppelin.ssl", false), - ZEPPELIN_SSL_PORT("zeppelin.server.ssl.port", 8443), - ZEPPELIN_SSL_CLIENT_AUTH("zeppelin.ssl.client.auth", false), - ZEPPELIN_SSL_KEYSTORE_PATH("zeppelin.ssl.keystore.path", "keystore"), - ZEPPELIN_SSL_KEYSTORE_TYPE("zeppelin.ssl.keystore.type", "JKS"), - ZEPPELIN_SSL_KEYSTORE_PASSWORD("zeppelin.ssl.keystore.password", ""), - ZEPPELIN_SSL_KEY_MANAGER_PASSWORD("zeppelin.ssl.key.manager.password", null), - ZEPPELIN_SSL_TRUSTSTORE_PATH("zeppelin.ssl.truststore.path", null), - ZEPPELIN_SSL_TRUSTSTORE_TYPE("zeppelin.ssl.truststore.type", null), - ZEPPELIN_SSL_TRUSTSTORE_PASSWORD("zeppelin.ssl.truststore.password", null), - ZEPPELIN_WAR("zeppelin.war", "zeppelin-web/dist"), - ZEPPELIN_WAR_TEMPDIR("zeppelin.war.tempdir", "webapps"), - ZEPPELIN_INTERPRETERS("zeppelin.interpreters", "org.apache.zeppelin.spark.SparkInterpreter," - + "org.apache.zeppelin.spark.PySparkInterpreter," - + "org.apache.zeppelin.rinterpreter.RRepl," - + "org.apache.zeppelin.rinterpreter.KnitR," - + "org.apache.zeppelin.spark.SparkRInterpreter," - + "org.apache.zeppelin.spark.SparkSqlInterpreter," - + "org.apache.zeppelin.spark.DepInterpreter," - + "org.apache.zeppelin.markdown.Markdown," - + "org.apache.zeppelin.angular.AngularInterpreter," - + "org.apache.zeppelin.shell.ShellInterpreter," - + "org.apache.zeppelin.livy.LivySparkInterpreter," - + "org.apache.zeppelin.livy.LivySparkSQLInterpreter," - + "org.apache.zeppelin.livy.LivyPySparkInterpreter," - + "org.apache.zeppelin.livy.LivyPySpark3Interpreter," - + "org.apache.zeppelin.livy.LivySparkRInterpreter," - + "org.apache.zeppelin.alluxio.AlluxioInterpreter," - + "org.apache.zeppelin.file.HDFSFileInterpreter," - + "org.apache.zeppelin.pig.PigInterpreter," - + "org.apache.zeppelin.pig.PigQueryInterpreter," - + "org.apache.zeppelin.flink.FlinkInterpreter," - + "org.apache.zeppelin.python.PythonInterpreter," - + "org.apache.zeppelin.python.PythonInterpreterPandasSql," - + "org.apache.zeppelin.python.PythonCondaInterpreter," - + "org.apache.zeppelin.python.PythonDockerInterpreter," - + "org.apache.zeppelin.ignite.IgniteInterpreter," - + "org.apache.zeppelin.ignite.IgniteSqlInterpreter," - + "org.apache.zeppelin.lens.LensInterpreter," - + "org.apache.zeppelin.cassandra.CassandraInterpreter," - + "org.apache.zeppelin.geode.GeodeOqlInterpreter," - + "org.apache.zeppelin.kylin.KylinInterpreter," - + "org.apache.zeppelin.elasticsearch.ElasticsearchInterpreter," - + "org.apache.zeppelin.scalding.ScaldingInterpreter," - + "org.apache.zeppelin.jdbc.JDBCInterpreter," - + "org.apache.zeppelin.hbase.HbaseInterpreter," - + "org.apache.zeppelin.bigquery.BigQueryInterpreter," - + "org.apache.zeppelin.beam.BeamInterpreter," - + "org.apache.zeppelin.scio.ScioInterpreter," - + "org.apache.zeppelin.groovy.GroovyInterpreter" - ), - ZEPPELIN_INTERPRETER_JSON("zeppelin.interpreter.setting", "interpreter-setting.json"), - ZEPPELIN_INTERPRETER_DIR("zeppelin.interpreter.dir", "interpreter"), - ZEPPELIN_INTERPRETER_LOCALREPO("zeppelin.interpreter.localRepo", "local-repo"), - ZEPPELIN_INTERPRETER_DEP_MVNREPO("zeppelin.interpreter.dep.mvnRepo", - "http://repo1.maven.org/maven2/"), - ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT("zeppelin.interpreter.connect.timeout", 30000), - ZEPPELIN_INTERPRETER_MAX_POOL_SIZE("zeppelin.interpreter.max.poolsize", 10), - ZEPPELIN_INTERPRETER_GROUP_ORDER("zeppelin.interpreter.group.order", "spark,md,angular,sh," - + "livy,alluxio,file,psql,flink,python,ignite,lens,cassandra,geode,kylin,elasticsearch," - + "scalding,jdbc,hbase,bigquery,beam,pig,scio,groovy"), - ZEPPELIN_INTERPRETER_OUTPUT_LIMIT("zeppelin.interpreter.output.limit", 1024 * 100), - ZEPPELIN_ENCODING("zeppelin.encoding", "UTF-8"), - ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), - // use specified notebook (id) as homescreen - ZEPPELIN_NOTEBOOK_HOMESCREEN("zeppelin.notebook.homescreen", null), - // whether homescreen notebook will be hidden from notebook list or not - ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDE("zeppelin.notebook.homescreen.hide", false), - ZEPPELIN_NOTEBOOK_S3_BUCKET("zeppelin.notebook.s3.bucket", "zeppelin"), - ZEPPELIN_NOTEBOOK_S3_ENDPOINT("zeppelin.notebook.s3.endpoint", "s3.amazonaws.com"), - ZEPPELIN_NOTEBOOK_S3_USER("zeppelin.notebook.s3.user", "user"), - ZEPPELIN_NOTEBOOK_S3_EMP("zeppelin.notebook.s3.encryptionMaterialsProvider", null), - ZEPPELIN_NOTEBOOK_S3_KMS_KEY_ID("zeppelin.notebook.s3.kmsKeyID", null), - ZEPPELIN_NOTEBOOK_S3_KMS_KEY_REGION("zeppelin.notebook.s3.kmsKeyRegion", null), - ZEPPELIN_NOTEBOOK_S3_SSE("zeppelin.notebook.s3.sse", false), - ZEPPELIN_NOTEBOOK_AZURE_CONNECTION_STRING("zeppelin.notebook.azure.connectionString", null), - ZEPPELIN_NOTEBOOK_AZURE_SHARE("zeppelin.notebook.azure.share", "zeppelin"), - ZEPPELIN_NOTEBOOK_AZURE_USER("zeppelin.notebook.azure.user", "user"), - ZEPPELIN_NOTEBOOK_MONGO_DATABASE("zeppelin.notebook.mongo.database", "zeppelin"), - ZEPPELIN_NOTEBOOK_MONGO_COLLECTION("zeppelin.notebook.mongo.collection", "notes"), - ZEPPELIN_NOTEBOOK_MONGO_URI("zeppelin.notebook.mongo.uri", "mongodb://localhost"), - ZEPPELIN_NOTEBOOK_MONGO_AUTOIMPORT("zeppelin.notebook.mongo.autoimport", false), - ZEPPELIN_NOTEBOOK_STORAGE("zeppelin.notebook.storage", GitNotebookRepo.class.getName()), - ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC("zeppelin.notebook.one.way.sync", false), - // whether by default note is public or private - ZEPPELIN_NOTEBOOK_PUBLIC("zeppelin.notebook.public", true), - ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", - System.getProperty("os.name") - .startsWith("Windows") ? "bin/interpreter.cmd" : "bin/interpreter.sh"), - // Decide when new note is created, interpreter settings will be binded automatically or not. - ZEPPELIN_NOTEBOOK_AUTO_INTERPRETER_BINDING("zeppelin.notebook.autoInterpreterBinding", true), - ZEPPELIN_CONF_DIR("zeppelin.conf.dir", "conf"), - ZEPPELIN_DEP_LOCALREPO("zeppelin.dep.localrepo", "local-repo"), - ZEPPELIN_HELIUM_REGISTRY("zeppelin.helium.registry", "helium," + HELIUM_PACKAGE_DEFAULT_URL), - ZEPPELIN_HELIUM_NODE_INSTALLER_URL("zeppelin.helium.node.installer.url", - "https://nodejs.org/dist/"), - ZEPPELIN_HELIUM_NPM_INSTALLER_URL("zeppelin.helium.npm.installer.url", - "http://registry.npmjs.org/"), - ZEPPELIN_HELIUM_YARNPKG_INSTALLER_URL("zeppelin.helium.yarnpkg.installer.url", - "https://github.com/yarnpkg/yarn/releases/download/"), - // Allows a way to specify a ',' separated list of allowed origins for rest and websockets - // i.e. http://localhost:8080 - ZEPPELIN_ALLOWED_ORIGINS("zeppelin.server.allowed.origins", "*"), - ZEPPELIN_ANONYMOUS_ALLOWED("zeppelin.anonymous.allowed", true), - ZEPPELIN_CREDENTIALS_PERSIST("zeppelin.credentials.persist", true), - ZEPPELIN_WEBSOCKET_MAX_TEXT_MESSAGE_SIZE("zeppelin.websocket.max.text.message.size", "1024000"), - ZEPPELIN_SERVER_DEFAULT_DIR_ALLOWED("zeppelin.server.default.dir.allowed", false), - ZEPPELIN_SERVER_XFRAME_OPTIONS("zeppelin.server.xframe.options", "SAMEORIGIN"), - ZEPPELIN_SERVER_JETTY_NAME("zeppelin.server.jetty.name", null), - ZEPPELIN_SERVER_STRICT_TRANSPORT("zeppelin.server.strict.transport", "max-age=631138519"), - ZEPPELIN_SERVER_X_XSS_PROTECTION("zeppelin.server.xxss.protection", "1"), - - ZEPPELIN_HDFS_KEYTAB("zeppelin.hdfs.keytab", ""), - ZEPPELIN_HDFS_PRINCIPAL("zeppelin.hdfs.principal", ""); - - private String varName; - @SuppressWarnings("rawtypes") - private Class varClass; - private String stringValue; - private VarType type; - private int intValue; - private float floatValue; - private boolean booleanValue; - private long longValue; - - - ConfVars(String varName, String varValue) { - this.varName = varName; - this.varClass = String.class; - this.stringValue = varValue; - this.intValue = -1; - this.floatValue = -1; - this.longValue = -1; - this.booleanValue = false; - this.type = VarType.STRING; - } - - ConfVars(String varName, int intValue) { - this.varName = varName; - this.varClass = Integer.class; - this.stringValue = null; - this.intValue = intValue; - this.floatValue = -1; - this.longValue = -1; - this.booleanValue = false; - this.type = VarType.INT; - } - - ConfVars(String varName, long longValue) { - this.varName = varName; - this.varClass = Integer.class; - this.stringValue = null; - this.intValue = -1; - this.floatValue = -1; - this.longValue = longValue; - this.booleanValue = false; - this.type = VarType.LONG; - } - - ConfVars(String varName, float floatValue) { - this.varName = varName; - this.varClass = Float.class; - this.stringValue = null; - this.intValue = -1; - this.longValue = -1; - this.floatValue = floatValue; - this.booleanValue = false; - this.type = VarType.FLOAT; - } - - ConfVars(String varName, boolean booleanValue) { - this.varName = varName; - this.varClass = Boolean.class; - this.stringValue = null; - this.intValue = -1; - this.longValue = -1; - this.floatValue = -1; - this.booleanValue = booleanValue; - this.type = VarType.BOOLEAN; - } - - public String getVarName() { - return varName; - } - - @SuppressWarnings("rawtypes") - public Class getVarClass() { - return varClass; - } - - public int getIntValue() { - return intValue; - } - - public long getLongValue() { - return longValue; - } - - public float getFloatValue() { - return floatValue; - } - - public String getStringValue() { - return stringValue; - } - - public boolean getBooleanValue() { - return booleanValue; - } - - public VarType getType() { - return type; - } - - enum VarType { - STRING { - @Override - void checkType(String value) throws Exception {} - }, - INT { - @Override - void checkType(String value) throws Exception { - Integer.valueOf(value); - } - }, - LONG { - @Override - void checkType(String value) throws Exception { - Long.valueOf(value); - } - }, - FLOAT { - @Override - void checkType(String value) throws Exception { - Float.valueOf(value); - } - }, - BOOLEAN { - @Override - void checkType(String value) throws Exception { - Boolean.valueOf(value); - } - }; - - boolean isType(String value) { - try { - checkType(value); - } catch (Exception e) { - LOG.error("Exception in ZeppelinConfiguration while isType", e); - return false; - } - return true; - } - - String typeString() { - return name().toUpperCase(); - } - - abstract void checkType(String value) throws Exception; - } - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java index 17a3529..5eecd6b 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java @@ -19,11 +19,12 @@ package org.apache.zeppelin.helium; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.zeppelin.interpreter.Interpreter; +import org.apache.zeppelin.interpreter.InterpreterGroup; +import org.apache.zeppelin.interpreter.InterpreterSettingManager; +import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcess; +import org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService; import org.apache.zeppelin.notebook.Paragraph; -import org.apache.zeppelin.resource.DistributedResourcePool; -import org.apache.zeppelin.resource.ResourcePool; -import org.apache.zeppelin.resource.ResourcePoolUtils; -import org.apache.zeppelin.resource.ResourceSet; +import org.apache.zeppelin.resource.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,19 +48,22 @@ public class Helium { private final HeliumBundleFactory bundleFactory; private final HeliumApplicationFactory applicationFactory; + private final InterpreterSettingManager interpreterSettingManager; public Helium( String heliumConfPath, String registryPaths, File registryCacheDir, HeliumBundleFactory bundleFactory, - HeliumApplicationFactory applicationFactory) + HeliumApplicationFactory applicationFactory, + InterpreterSettingManager interpreterSettingManager) throws IOException { this.heliumConfPath = heliumConfPath; this.registryPaths = registryPaths; this.registryCacheDir = registryCacheDir; this.bundleFactory = bundleFactory; this.applicationFactory = applicationFactory; + this.interpreterSettingManager = interpreterSettingManager; heliumConf = loadConf(heliumConfPath); allPackages = getAllPackageInfo(); } @@ -350,7 +354,7 @@ public class Helium { allResources = resourcePool.getAll(); } } else { - allResources = ResourcePoolUtils.getAllResources(); + allResources = interpreterSettingManager.getAllResources(); } for (List<HeliumPackageSearchResult> pkgs : allPackages.values()) { @@ -478,4 +482,39 @@ public class Helium { return mixed; } + + public ResourceSet getAllResources() { + return getAllResourcesExcept(null); + } + + private ResourceSet getAllResourcesExcept(String interpreterGroupExcludsion) { + ResourceSet resourceSet = new ResourceSet(); + for (InterpreterGroup intpGroup : interpreterSettingManager.getAllInterpreterGroup()) { + if (interpreterGroupExcludsion != null && + intpGroup.getId().equals(interpreterGroupExcludsion)) { + continue; + } + + RemoteInterpreterProcess remoteInterpreterProcess = intpGroup.getRemoteInterpreterProcess(); + if (remoteInterpreterProcess == null) { + ResourcePool localPool = intpGroup.getResourcePool(); + if (localPool != null) { + resourceSet.addAll(localPool.getAll()); + } + } else if (remoteInterpreterProcess.isRunning()) { + List<String> resourceList = remoteInterpreterProcess.callRemoteFunction( + new RemoteInterpreterProcess.RemoteFunction<List<String>>() { + @Override + public List<String> call(RemoteInterpreterService.Client client) throws Exception { + return client.resourcePoolGetAll(); + } + } + ); + for (String res : resourceList) { + resourceSet.add(Resource.fromJson(res)); + } + } + } + return resourceSet; + } } http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java index 84368a7..5f5330c 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumApplicationFactory.java @@ -105,38 +105,33 @@ public class HeliumApplicationFactory implements ApplicationEventListener, Noteb private void load(RemoteInterpreterProcess intpProcess, ApplicationState appState) throws Exception { - RemoteInterpreterService.Client client = null; - synchronized (appState) { if (appState.getStatus() == ApplicationState.Status.LOADED) { // already loaded return; } - try { - appStatusChange(paragraph, appState.getId(), ApplicationState.Status.LOADING); - String pkgInfo = pkg.toJson(); - String appId = appState.getId(); - - client = intpProcess.getClient(); - RemoteApplicationResult ret = client.loadApplication( - appId, - pkgInfo, - paragraph.getNote().getId(), - paragraph.getId()); - - if (ret.isSuccess()) { - appStatusChange(paragraph, appState.getId(), ApplicationState.Status.LOADED); - } else { - throw new ApplicationException(ret.getMsg()); - } - } catch (TException e) { - intpProcess.releaseBrokenClient(client); - throw e; - } finally { - if (client != null) { - intpProcess.releaseClient(client); - } + appStatusChange(paragraph, appState.getId(), ApplicationState.Status.LOADING); + final String pkgInfo = pkg.toJson(); + final String appId = appState.getId(); + + RemoteApplicationResult ret = intpProcess.callRemoteFunction( + new RemoteInterpreterProcess.RemoteFunction<RemoteApplicationResult>() { + @Override + public RemoteApplicationResult call(RemoteInterpreterService.Client client) + throws Exception { + return client.loadApplication( + appId, + pkgInfo, + paragraph.getNote().getId(), + paragraph.getId()); + } + } + ); + if (ret.isSuccess()) { + appStatusChange(paragraph, appState.getId(), ApplicationState.Status.LOADED); + } else { + throw new ApplicationException(ret.getMsg()); } } } @@ -199,7 +194,7 @@ public class HeliumApplicationFactory implements ApplicationEventListener, Noteb } } - private void unload(ApplicationState appsToUnload) throws ApplicationException { + private void unload(final ApplicationState appsToUnload) throws ApplicationException { synchronized (appsToUnload) { if (appsToUnload.getStatus() != ApplicationState.Status.LOADED) { throw new ApplicationException( @@ -217,26 +212,19 @@ public class HeliumApplicationFactory implements ApplicationEventListener, Noteb throw new ApplicationException("Target interpreter process is not running"); } - RemoteInterpreterService.Client client; - try { - client = intpProcess.getClient(); - } catch (Exception e) { - throw new ApplicationException(e); - } - - try { - RemoteApplicationResult ret = client.unloadApplication(appsToUnload.getId()); - - if (ret.isSuccess()) { - appStatusChange(paragraph, appsToUnload.getId(), ApplicationState.Status.UNLOADED); - } else { - throw new ApplicationException(ret.getMsg()); - } - } catch (TException e) { - intpProcess.releaseBrokenClient(client); - throw new ApplicationException(e); - } finally { - intpProcess.releaseClient(client); + RemoteApplicationResult ret = intpProcess.callRemoteFunction( + new RemoteInterpreterProcess.RemoteFunction<RemoteApplicationResult>() { + @Override + public RemoteApplicationResult call(RemoteInterpreterService.Client client) + throws Exception { + return client.unloadApplication(appsToUnload.getId()); + } + } + ); + if (ret.isSuccess()) { + appStatusChange(paragraph, appsToUnload.getId(), ApplicationState.Status.UNLOADED); + } else { + throw new ApplicationException(ret.getMsg()); } } } @@ -286,7 +274,7 @@ public class HeliumApplicationFactory implements ApplicationEventListener, Noteb } } - private void run(ApplicationState app) throws ApplicationException { + private void run(final ApplicationState app) throws ApplicationException { synchronized (app) { if (app.getStatus() != ApplicationState.Status.LOADED) { throw new ApplicationException( @@ -303,29 +291,19 @@ public class HeliumApplicationFactory implements ApplicationEventListener, Noteb if (intpProcess == null) { throw new ApplicationException("Target interpreter process is not running"); } - RemoteInterpreterService.Client client = null; - try { - client = intpProcess.getClient(); - } catch (Exception e) { - throw new ApplicationException(e); - } - - try { - RemoteApplicationResult ret = client.runApplication(app.getId()); - - if (ret.isSuccess()) { - // success - } else { - throw new ApplicationException(ret.getMsg()); - } - } catch (TException e) { - intpProcess.releaseBrokenClient(client); - client = null; - throw new ApplicationException(e); - } finally { - if (client != null) { - intpProcess.releaseClient(client); - } + RemoteApplicationResult ret = intpProcess.callRemoteFunction( + new RemoteInterpreterProcess.RemoteFunction<RemoteApplicationResult>() { + @Override + public RemoteApplicationResult call(RemoteInterpreterService.Client client) + throws Exception { + return client.runApplication(app.getId()); + } + } + ); + if (ret.isSuccess()) { + // success + } else { + throw new ApplicationException(ret.getMsg()); } } } http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java ---------------------------------------------------------------------- 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 deleted file mode 100644 index 9403b4f..0000000 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java +++ /dev/null @@ -1,423 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.zeppelin.interpreter; - -import com.google.common.base.Joiner; -import com.google.common.base.Preconditions; -import org.apache.commons.lang.NullArgumentException; -import org.apache.zeppelin.conf.ZeppelinConfiguration; -import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars; -import org.apache.zeppelin.dep.DependencyResolver; -import org.apache.zeppelin.display.AngularObjectRegistry; -import org.apache.zeppelin.display.AngularObjectRegistryListener; -import org.apache.zeppelin.helium.ApplicationEventListener; -import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry; -import org.apache.zeppelin.interpreter.remote.RemoteInterpreter; -import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.sonatype.aether.RepositoryException; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.net.URL; -import java.net.URLClassLoader; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -/** - * Manage interpreters. - */ -public class InterpreterFactory implements InterpreterGroupFactory { - private static final Logger logger = LoggerFactory.getLogger(InterpreterFactory.class); - - private Map<String, URLClassLoader> cleanCl = - Collections.synchronizedMap(new HashMap<String, URLClassLoader>()); - - private ZeppelinConfiguration conf; - - private final InterpreterSettingManager interpreterSettingManager; - private AngularObjectRegistryListener angularObjectRegistryListener; - private final RemoteInterpreterProcessListener remoteInterpreterProcessListener; - private final ApplicationEventListener appEventListener; - - private boolean shiroEnabled; - - private Map<String, String> env = new HashMap<>(); - - private Interpreter devInterpreter; - - public InterpreterFactory(ZeppelinConfiguration conf, - AngularObjectRegistryListener angularObjectRegistryListener, - RemoteInterpreterProcessListener remoteInterpreterProcessListener, - ApplicationEventListener appEventListener, DependencyResolver depResolver, - boolean shiroEnabled, InterpreterSettingManager interpreterSettingManager) - throws InterpreterException, IOException, RepositoryException { - this.conf = conf; - this.angularObjectRegistryListener = angularObjectRegistryListener; - this.remoteInterpreterProcessListener = remoteInterpreterProcessListener; - this.appEventListener = appEventListener; - this.shiroEnabled = shiroEnabled; - - this.interpreterSettingManager = interpreterSettingManager; - //TODO(jl): Fix it not to use InterpreterGroupFactory - interpreterSettingManager.setInterpreterGroupFactory(this); - - logger.info("shiroEnabled: {}", shiroEnabled); - } - - /** - * @param id interpreterGroup id. Combination of interpreterSettingId + noteId/userId/shared - * depends on interpreter mode - */ - @Override - public InterpreterGroup createInterpreterGroup(String id, InterpreterOption option) - throws InterpreterException, NullArgumentException { - - //When called from REST API without option we receive NPE - if (option == null) { - throw new NullArgumentException("option"); - } - - AngularObjectRegistry angularObjectRegistry; - - InterpreterGroup interpreterGroup = new InterpreterGroup(id); - if (option.isRemote()) { - angularObjectRegistry = - new RemoteAngularObjectRegistry(id, angularObjectRegistryListener, interpreterGroup); - } else { - angularObjectRegistry = new AngularObjectRegistry(id, angularObjectRegistryListener); - - // TODO(moon) : create distributed resource pool for local interpreters and set - } - - interpreterGroup.setAngularObjectRegistry(angularObjectRegistry); - return interpreterGroup; - } - - public void createInterpretersForNote(InterpreterSetting interpreterSetting, String user, - String noteId, String interpreterSessionKey) { - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup(user, noteId); - InterpreterOption option = interpreterSetting.getOption(); - Properties properties = interpreterSetting.getFlatProperties(); - // if interpreters are already there, wait until they're being removed - synchronized (interpreterGroup) { - long interpreterRemovalWaitStart = System.nanoTime(); - // interpreter process supposed to be terminated by RemoteInterpreterProcess.dereference() - // in ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT msec. However, if termination of the process and - // removal from interpreter group take too long, throw an error. - long minTimeout = 10L * 1000 * 1000000; // 10 sec - long interpreterRemovalWaitTimeout = Math.max(minTimeout, - conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT) * 1000000L * 2); - while (interpreterGroup.containsKey(interpreterSessionKey)) { - if (System.nanoTime() - interpreterRemovalWaitStart > interpreterRemovalWaitTimeout) { - throw new InterpreterException("Can not create interpreter"); - } - try { - interpreterGroup.wait(1000); - } catch (InterruptedException e) { - logger.debug(e.getMessage(), e); - } - } - } - - logger.info("Create interpreter instance {} for note {}", interpreterSetting.getName(), noteId); - - List<InterpreterInfo> interpreterInfos = interpreterSetting.getInterpreterInfos(); - String path = interpreterSetting.getPath(); - InterpreterRunner runner = interpreterSetting.getInterpreterRunner(); - Interpreter interpreter; - for (InterpreterInfo info : interpreterInfos) { - if (option.isRemote()) { - if (option.isExistingProcess()) { - interpreter = - connectToRemoteRepl(interpreterSessionKey, info.getClassName(), option.getHost(), - option.getPort(), properties, interpreterSetting.getId(), user, - option.isUserImpersonate); - } else { - interpreter = createRemoteRepl(path, interpreterSessionKey, info.getClassName(), - properties, interpreterSetting.getId(), user, option.isUserImpersonate(), runner); - } - } else { - interpreter = createRepl(interpreterSetting.getPath(), info.getClassName(), properties); - } - - synchronized (interpreterGroup) { - List<Interpreter> interpreters = interpreterGroup.get(interpreterSessionKey); - if (null == interpreters) { - interpreters = new ArrayList<>(); - interpreterGroup.put(interpreterSessionKey, interpreters); - } - if (info.isDefaultInterpreter()) { - interpreters.add(0, interpreter); - } else { - interpreters.add(interpreter); - } - } - logger.info("Interpreter {} {} created", interpreter.getClassName(), interpreter.hashCode()); - interpreter.setInterpreterGroup(interpreterGroup); - } - } - - 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); - if (ccl == null) { - // classloader fallback - 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; - - if (separateCL == true) { - cl = URLClassLoader.newInstance(new URL[]{}, ccl); - } else { - cl = ccl; - } - Thread.currentThread().setContextClassLoader(cl); - - Class<Interpreter> replClass = (Class<Interpreter>) cl.loadClass(className); - Constructor<Interpreter> constructor = - replClass.getConstructor(new Class[]{Properties.class}); - Interpreter repl = constructor.newInstance(property); - repl.setClassloaderUrls(ccl.getURLs()); - LazyOpenInterpreter intp = new LazyOpenInterpreter(new ClassloaderInterpreter(repl, cl)); - return intp; - } catch (SecurityException e) { - throw new InterpreterException(e); - } catch (NoSuchMethodException e) { - throw new InterpreterException(e); - } catch (IllegalArgumentException e) { - throw new InterpreterException(e); - } catch (InstantiationException e) { - throw new InterpreterException(e); - } catch (IllegalAccessException e) { - throw new InterpreterException(e); - } catch (InvocationTargetException e) { - throw new InterpreterException(e); - } catch (ClassNotFoundException e) { - throw new InterpreterException(e); - } finally { - Thread.currentThread().setContextClassLoader(oldcl); - } - } - - private Interpreter connectToRemoteRepl(String interpreterSessionKey, String className, - String host, int port, Properties property, String interpreterSettingId, String userName, - Boolean isUserImpersonate) { - int connectTimeout = conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT); - int maxPoolSize = conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_MAX_POOL_SIZE); - String localRepoPath = conf.getInterpreterLocalRepoPath() + "/" + interpreterSettingId; - LazyOpenInterpreter intp = new LazyOpenInterpreter( - new RemoteInterpreter(property, interpreterSessionKey, className, host, port, localRepoPath, - connectTimeout, maxPoolSize, remoteInterpreterProcessListener, appEventListener, - userName, isUserImpersonate, conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_OUTPUT_LIMIT))); - return intp; - } - - Interpreter createRemoteRepl(String interpreterPath, String interpreterSessionKey, - String className, Properties property, String interpreterSettingId, - String userName, Boolean isUserImpersonate, InterpreterRunner interpreterRunner) { - int connectTimeout = conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT); - String localRepoPath = conf.getInterpreterLocalRepoPath() + "/" + interpreterSettingId; - int maxPoolSize = conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_MAX_POOL_SIZE); - String interpreterRunnerPath; - String interpreterGroupName = interpreterSettingManager.get(interpreterSettingId).getName(); - if (null != interpreterRunner) { - interpreterRunnerPath = interpreterRunner.getPath(); - Path p = Paths.get(interpreterRunnerPath); - if (!p.isAbsolute()) { - interpreterRunnerPath = Joiner.on(File.separator) - .join(interpreterPath, interpreterRunnerPath); - } - } else { - interpreterRunnerPath = conf.getInterpreterRemoteRunnerPath(); - } - - RemoteInterpreter remoteInterpreter = - new RemoteInterpreter(property, interpreterSessionKey, className, - interpreterRunnerPath, interpreterPath, localRepoPath, connectTimeout, maxPoolSize, - remoteInterpreterProcessListener, appEventListener, userName, isUserImpersonate, - conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_OUTPUT_LIMIT), interpreterGroupName); - remoteInterpreter.addEnv(env); - - return new LazyOpenInterpreter(remoteInterpreter); - } - - private List<Interpreter> createOrGetInterpreterList(String user, String noteId, - InterpreterSetting setting) { - InterpreterGroup interpreterGroup = setting.getInterpreterGroup(user, noteId); - synchronized (interpreterGroup) { - String interpreterSessionKey = - interpreterSettingManager.getInterpreterSessionKey(user, noteId, setting); - if (!interpreterGroup.containsKey(interpreterSessionKey)) { - createInterpretersForNote(setting, user, noteId, interpreterSessionKey); - } - return interpreterGroup.get(interpreterSessionKey); - } - } - - private InterpreterSetting getInterpreterSettingByGroup(List<InterpreterSetting> settings, - String group) { - Preconditions.checkNotNull(group, "group should be not null"); - - for (InterpreterSetting setting : settings) { - if (group.equals(setting.getName())) { - return setting; - } - } - return null; - } - - private String getInterpreterClassFromInterpreterSetting(InterpreterSetting setting, - String name) { - Preconditions.checkNotNull(name, "name should be not null"); - - for (InterpreterInfo info : setting.getInterpreterInfos()) { - String infoName = info.getName(); - if (null != info.getName() && name.equals(infoName)) { - return info.getClassName(); - } - } - return null; - } - - private Interpreter getInterpreter(String user, String noteId, InterpreterSetting setting, - String name) { - Preconditions.checkNotNull(noteId, "noteId should be not null"); - Preconditions.checkNotNull(setting, "setting should be not null"); - Preconditions.checkNotNull(name, "name should be not null"); - - String className; - if (null != (className = getInterpreterClassFromInterpreterSetting(setting, name))) { - List<Interpreter> interpreterGroup = createOrGetInterpreterList(user, noteId, setting); - for (Interpreter interpreter : interpreterGroup) { - if (className.equals(interpreter.getClassName())) { - return interpreter; - } - } - } - return null; - } - - public Interpreter getInterpreter(String user, String noteId, String replName) { - List<InterpreterSetting> settings = interpreterSettingManager.getInterpreterSettings(noteId); - InterpreterSetting setting; - Interpreter interpreter; - - if (settings == null || settings.size() == 0) { - return null; - } - - if (replName == null || replName.trim().length() == 0) { - // get default settings (first available) - // TODO(jl): Fix it in case of returning null - InterpreterSetting defaultSettings = interpreterSettingManager - .getDefaultInterpreterSetting(settings); - return createOrGetInterpreterList(user, noteId, defaultSettings).get(0); - } - - String[] replNameSplit = replName.split("\\."); - if (replNameSplit.length == 2) { - String group = null; - String name = null; - group = replNameSplit[0]; - name = replNameSplit[1]; - - setting = getInterpreterSettingByGroup(settings, group); - - if (null != setting) { - interpreter = getInterpreter(user, noteId, setting, name); - - if (null != interpreter) { - return interpreter; - } - } - - throw new InterpreterException(replName + " interpreter not found"); - - } else { - // first assume replName is 'name' of interpreter. ('groupName' is ommitted) - // search 'name' from first (default) interpreter group - // TODO(jl): Handle with noteId to support defaultInterpreter per note. - setting = interpreterSettingManager.getDefaultInterpreterSetting(settings); - - interpreter = getInterpreter(user, noteId, setting, replName); - - if (null != interpreter) { - return interpreter; - } - - // next, assume replName is 'group' of interpreter ('name' is ommitted) - // search interpreter group and return first interpreter. - setting = getInterpreterSettingByGroup(settings, replName); - - if (null != setting) { - List<Interpreter> interpreters = createOrGetInterpreterList(user, noteId, setting); - if (null != interpreters) { - return interpreters.get(0); - } - } - - // Support the legacy way to use it - for (InterpreterSetting s : settings) { - if (s.getGroup().equals(replName)) { - List<Interpreter> interpreters = createOrGetInterpreterList(user, noteId, s); - if (null != interpreters) { - return interpreters.get(0); - } - } - } - } - - return null; - } - - public Map<String, String> getEnv() { - return env; - } - - public void setEnv(Map<String, String> env) { - this.env = env; - } - - -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterGroupFactory.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterGroupFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterGroupFactory.java deleted file mode 100644 index 3b9be40..0000000 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterGroupFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.zeppelin.interpreter; - -import org.apache.commons.lang.NullArgumentException; - -/** - * Created InterpreterGroup - */ -public interface InterpreterGroupFactory { - InterpreterGroup createInterpreterGroup(String interpreterGroupId, InterpreterOption option); -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfo.java ---------------------------------------------------------------------- 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 deleted file mode 100644 index fd632ce..0000000 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfo.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.zeppelin.interpreter; - -import com.google.gson.annotations.SerializedName; - -import java.util.Map; - -/** - * Information of interpreters in this interpreter setting. - * this will be serialized for conf/interpreter.json and REST api response. - */ -public class InterpreterInfo { - private String name; - @SerializedName("class") private String className; - private boolean defaultInterpreter = false; - private Map<String, Object> editor; - - public InterpreterInfo(String className, String name, boolean defaultInterpreter, - Map<String, Object> editor) { - this.className = className; - this.name = name; - this.defaultInterpreter = defaultInterpreter; - this.editor = editor; - } - - public String getName() { - return name; - } - - public String getClassName() { - return className; - } - - public void setName(String name) { - this.name = name; - } - - boolean isDefaultInterpreter() { - return defaultInterpreter; - } - - public Map<String, Object> getEditor() { - return editor; - } - - public void setEditor(Map<String, Object> editor) { - this.editor = editor; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof InterpreterInfo)) { - return false; - } - InterpreterInfo other = (InterpreterInfo) obj; - - boolean sameName = - null == getName() ? null == other.getName() : getName().equals(other.getName()); - boolean sameClassName = null == getClassName() ? - null == other.getClassName() : - getClassName().equals(other.getClassName()); - boolean sameIsDefaultInterpreter = defaultInterpreter == other.isDefaultInterpreter(); - - return sameName && sameClassName && sameIsDefaultInterpreter; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java deleted file mode 100644 index ca688dc..0000000 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.zeppelin.interpreter; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import org.apache.zeppelin.common.JsonSerializable; -import org.sonatype.aether.repository.RemoteRepository; - -import java.util.List; -import java.util.Map; - -/** - * - */ -public class InterpreterInfoSaving implements JsonSerializable { - - private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); - - public Map<String, InterpreterSetting> interpreterSettings; - public Map<String, List<String>> interpreterBindings; - public List<RemoteRepository> interpreterRepositories; - - public String toJson() { - return gson.toJson(this); - } - - public static InterpreterInfoSaving fromJson(String json) { - return gson.fromJson(json, InterpreterInfoSaving.class); - } -}