You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by jo...@apache.org on 2016/07/15 13:55:00 UTC
[3/3] zeppelin git commit: [ZEPPELIN-1012] Support Interpreter Aliases
[ZEPPELIN-1012] Support Interpreter Aliases
### What is this PR for?
Supporting aliases for same interpreter group and enabling running two interpreters in same group.
### What type of PR is it?
[Feature]
### Todos
* [x] - Add InterpreterSettingRef
* [x] - Add aliases feature
### What is the Jira issue?
* https://issues.apache.org/jira/browse/ZEPPELIN-1012
### How should this be tested?
1. Create spark2 interpreter in a interpreter tab
1. Add that interpreter in a notebook
1. run `%spark` and `%spark2`
### Screenshots (if appropriate)
### Questions:
* Does the licenses files need update? No
* Is there breaking changes for older versions? No
* Does this needs documentation? No
Author: Jongyoul Lee <jo...@gmail.com>
Closes #1145 from jongyoul/ZEPPELIN-1012 and squashes the following commits:
4d38462 [Jongyoul Lee] Reverted modifier of CronJob back to public
2fab2f2 [Jongyoul Lee] Reverted default constructor
7f9f72d [Jongyoul Lee] Fixed the style
4dd8f6e [Jongyoul Lee] Reverted style into original to avoid checkstyle
5eff48f [Jongyoul Lee] Reverted style into original to avoid checkstyle
5e50864 [Jongyoul Lee] Reverted refName to group
fac0b86 [Jongyoul Lee] Reformatted files related to this PR without test classes
5bb15a0 [Jongyoul Lee] Removed some console.log added for debugging
334634a [Jongyoul Lee] Fixed the description of parameter of add method
ca20889 [Jongyoul Lee] Changed setting.group to setting.name Removed meaningless super constructor
dde2232 [Jongyoul Lee] Added catching IOE from caller of createNewSetting
cb7dde5 [Jongyoul Lee] Fixed wrong test to save to file after Zeppelin calls createNewSetting
d59029b [Jongyoul Lee] Removed unused code Fixed the type of variables Adjusted diamond operator
9b05ca2 [Jongyoul Lee] Fixed some style
e585791 [Jongyoul Lee] Fixed some style
634cc21 [Jongyoul Lee] Fixed usage of getGroup
c100f76 [Jongyoul Lee] Removed deprecated method
240c8af [Jongyoul Lee] Removed debugging message
4ff493b [Jongyoul Lee] Fixed test case
d5a4c44 [Jongyoul Lee] Refactored InterpreterSetting Changed menu for creating new InterpreterSetting
16b56c3 [Jongyoul Lee] Fixed broken tests for InterpreterRestApiTest
fccdd9b [Jongyoul Lee] Fixed the style
5159a84 [Jongyoul Lee] Added feature for Interpreter aliases Extracted InterpreterInfo from InterpreterSetting
c4b016e [Jongyoul Lee] Refactored getInterpreter method not to use RegisteredInterpreter
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/b11b6ec2
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/b11b6ec2
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/b11b6ec2
Branch: refs/heads/master
Commit: b11b6ec24edf884c4d485acbe0aa02dc790f0b54
Parents: d8b54cf
Author: Jongyoul Lee <jo...@gmail.com>
Authored: Thu Jul 14 22:35:03 2016 +0900
Committer: Jongyoul Lee <jo...@apache.org>
Committed: Fri Jul 15 22:54:50 2016 +0900
----------------------------------------------------------------------
.../zeppelin/rest/InterpreterRestApi.java | 125 ++--
.../apache/zeppelin/rest/NotebookRestApi.java | 272 ++++----
.../InterpreterSettingListForNoteBind.java | 57 +-
.../message/NewInterpreterSettingRequest.java | 13 +-
.../zeppelin/rest/AbstractTestRestApi.java | 26 +-
.../zeppelin/rest/InterpreterRestApiTest.java | 5 +-
.../zeppelin/rest/ZeppelinSparkClusterTest.java | 10 +-
.../interpreter-create/interpreter-create.html | 6 +-
.../app/interpreter/interpreter.controller.js | 5 +-
.../src/app/interpreter/interpreter.html | 4 +-
.../src/app/notebook/notebook.controller.js | 4 +-
zeppelin-web/src/app/notebook/notebook.html | 2 +-
.../helium/HeliumApplicationFactory.java | 5 +-
.../interpreter/InterpreterFactory.java | 634 +++++++++++--------
.../zeppelin/interpreter/InterpreterInfo.java | 69 ++
.../interpreter/InterpreterSetting.java | 130 ++--
.../java/org/apache/zeppelin/notebook/Note.java | 133 ++--
.../org/apache/zeppelin/notebook/Notebook.java | 174 +++--
.../zeppelin/notebook/utility/IdHashes.java | 13 +-
.../helium/HeliumApplicationFactoryTest.java | 5 +-
.../interpreter/InterpreterFactoryTest.java | 34 +-
.../org/apache/zeppelin/notebook/NoteTest.java | 6 +-
.../apache/zeppelin/notebook/NotebookTest.java | 10 +-
23 files changed, 908 insertions(+), 834 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java
index 9af0a60..8f5a441 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java
@@ -21,7 +21,6 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
-
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -32,36 +31,35 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
+import com.google.gson.Gson;
import org.apache.commons.lang.exception.ExceptionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.sonatype.aether.RepositoryException;
+import org.sonatype.aether.repository.RemoteRepository;
+
import org.apache.zeppelin.annotation.ZeppelinApi;
import org.apache.zeppelin.dep.Repository;
-import org.apache.zeppelin.interpreter.*;
-import org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter;
+import org.apache.zeppelin.interpreter.InterpreterException;
+import org.apache.zeppelin.interpreter.InterpreterFactory;
+import org.apache.zeppelin.interpreter.InterpreterSetting;
import org.apache.zeppelin.rest.message.NewInterpreterSettingRequest;
import org.apache.zeppelin.rest.message.UpdateInterpreterSettingRequest;
import org.apache.zeppelin.server.JsonResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.gson.Gson;
-import org.sonatype.aether.RepositoryException;
-import org.sonatype.aether.repository.RemoteRepository;
/**
* Interpreter Rest API
- *
*/
@Path("/interpreter")
@Produces("application/json")
public class InterpreterRestApi {
- Logger logger = LoggerFactory.getLogger(InterpreterRestApi.class);
+ private static final Logger logger = LoggerFactory.getLogger(InterpreterRestApi.class);
private InterpreterFactory interpreterFactory;
Gson gson = new Gson();
public InterpreterRestApi() {
-
}
public InterpreterRestApi(InterpreterFactory interpreterFactory) {
@@ -70,52 +68,39 @@ public class InterpreterRestApi {
/**
* List all interpreter settings
- * @return
*/
@GET
@Path("setting")
@ZeppelinApi
public Response listSettings() {
- List<InterpreterSetting> interpreterSettings = null;
+ List<InterpreterSetting> interpreterSettings;
interpreterSettings = interpreterFactory.get();
- return new JsonResponse(Status.OK, "", interpreterSettings).build();
+ return new JsonResponse<>(Status.OK, "", interpreterSettings).build();
}
/**
* Add new interpreter setting
- * @param message
- * @return
- * @throws IOException
- * @throws InterpreterException
+ *
+ * @param message NewInterpreterSettingRequest
*/
@POST
@Path("setting")
@ZeppelinApi
public Response newSettings(String message) {
try {
- NewInterpreterSettingRequest request = gson.fromJson(message,
- NewInterpreterSettingRequest.class);
+ NewInterpreterSettingRequest request =
+ gson.fromJson(message, NewInterpreterSettingRequest.class);
Properties p = new Properties();
p.putAll(request.getProperties());
- InterpreterSetting interpreterSetting = interpreterFactory.add(request.getName(),
- request.getGroup(),
- request.getDependencies(),
- request.getOption(),
- p);
- logger.info("new setting created with {}", interpreterSetting.id());
- return new JsonResponse(Status.CREATED, "", interpreterSetting).build();
- } catch (InterpreterException e) {
+ InterpreterSetting interpreterSetting = interpreterFactory
+ .createNewSetting(request.getName(), request.getGroup(), request.getDependencies(),
+ request.getOption(), p);
+ logger.info("new setting created with {}", interpreterSetting.getId());
+ return new JsonResponse<>(Status.CREATED, "", interpreterSetting).build();
+ } catch (InterpreterException | IOException e) {
logger.error("Exception in InterpreterRestApi while creating ", e);
- return new JsonResponse(
- Status.NOT_FOUND,
- e.getMessage(),
- ExceptionUtils.getStackTrace(e)).build();
- } catch (IOException | RepositoryException e) {
- logger.error("Exception in InterpreterRestApi while creating ", e);
- return new JsonResponse(
- Status.INTERNAL_SERVER_ERROR,
- e.getMessage(),
- ExceptionUtils.getStackTrace(e)).build();
+ return new JsonResponse<>(Status.NOT_FOUND, e.getMessage(), ExceptionUtils.getStackTrace(e))
+ .build();
}
}
@@ -126,26 +111,25 @@ public class InterpreterRestApi {
logger.info("Update interpreterSetting {}", settingId);
try {
- UpdateInterpreterSettingRequest request = gson.fromJson(message,
- UpdateInterpreterSettingRequest.class);
- interpreterFactory.setPropertyAndRestart(settingId,
- request.getOption(),
- request.getProperties(),
- request.getDependencies());
+ UpdateInterpreterSettingRequest request =
+ gson.fromJson(message, UpdateInterpreterSettingRequest.class);
+ interpreterFactory
+ .setPropertyAndRestart(settingId, request.getOption(), request.getProperties(),
+ request.getDependencies());
} catch (InterpreterException e) {
logger.error("Exception in InterpreterRestApi while updateSetting ", e);
- return new JsonResponse(
- Status.NOT_FOUND, e.getMessage(), ExceptionUtils.getStackTrace(e)).build();
+ return new JsonResponse<>(Status.NOT_FOUND, e.getMessage(), ExceptionUtils.getStackTrace(e))
+ .build();
} catch (IOException | RepositoryException e) {
logger.error("Exception in InterpreterRestApi while updateSetting ", e);
- return new JsonResponse(
- Status.INTERNAL_SERVER_ERROR, e.getMessage(), ExceptionUtils.getStackTrace(e)).build();
+ return new JsonResponse<>(Status.INTERNAL_SERVER_ERROR, e.getMessage(),
+ ExceptionUtils.getStackTrace(e)).build();
}
InterpreterSetting setting = interpreterFactory.get(settingId);
if (setting == null) {
- return new JsonResponse(Status.NOT_FOUND, "", settingId).build();
+ return new JsonResponse<>(Status.NOT_FOUND, "", settingId).build();
}
- return new JsonResponse(Status.OK, "", setting).build();
+ return new JsonResponse<>(Status.OK, "", setting).build();
}
/**
@@ -172,14 +156,14 @@ public class InterpreterRestApi {
interpreterFactory.restart(settingId);
} catch (InterpreterException e) {
logger.error("Exception in InterpreterRestApi while restartSetting ", e);
- return new JsonResponse(
- Status.NOT_FOUND, e.getMessage(), ExceptionUtils.getStackTrace(e)).build();
+ return new JsonResponse<>(Status.NOT_FOUND, e.getMessage(), ExceptionUtils.getStackTrace(e))
+ .build();
}
InterpreterSetting setting = interpreterFactory.get(settingId);
if (setting == null) {
- return new JsonResponse(Status.NOT_FOUND, "", settingId).build();
+ return new JsonResponse<>(Status.NOT_FOUND, "", settingId).build();
}
- return new JsonResponse(Status.OK, "", setting).build();
+ return new JsonResponse<>(Status.OK, "", setting).build();
}
/**
@@ -188,27 +172,25 @@ public class InterpreterRestApi {
@GET
@ZeppelinApi
public Response listInterpreter(String message) {
- Map<String, RegisteredInterpreter> m = Interpreter.registeredInterpreters;
- return new JsonResponse(Status.OK, "", m).build();
+ Map<String, InterpreterSetting> m = interpreterFactory.getAvailableInterpreterSettings();
+ return new JsonResponse<>(Status.OK, "", m).build();
}
/**
* List of dependency resolving repositories
- * @return
*/
@GET
@Path("repository")
@ZeppelinApi
public Response listRepositories() {
- List<RemoteRepository> interpreterRepositories = null;
- interpreterRepositories = interpreterFactory.getRepositories();
- return new JsonResponse(Status.OK, "", interpreterRepositories).build();
+ List<RemoteRepository> interpreterRepositories = interpreterFactory.getRepositories();
+ return new JsonResponse<>(Status.OK, "", interpreterRepositories).build();
}
/**
* Add new repository
- * @param message
- * @return
+ *
+ * @param message Repository
*/
@POST
@Path("repository")
@@ -216,24 +198,21 @@ public class InterpreterRestApi {
public Response addRepository(String message) {
try {
Repository request = gson.fromJson(message, Repository.class);
- interpreterFactory.addRepository(
- request.getId(),
- request.getUrl(),
- request.isSnapshot(),
+ interpreterFactory.addRepository(request.getId(), request.getUrl(), request.isSnapshot(),
request.getAuthentication());
logger.info("New repository {} added", request.getId());
} catch (Exception e) {
logger.error("Exception in InterpreterRestApi while adding repository ", e);
- return new JsonResponse(
- Status.INTERNAL_SERVER_ERROR, e.getMessage(), ExceptionUtils.getStackTrace(e)).build();
+ return new JsonResponse<>(Status.INTERNAL_SERVER_ERROR, e.getMessage(),
+ ExceptionUtils.getStackTrace(e)).build();
}
return new JsonResponse(Status.CREATED).build();
}
/**
* Delete repository
- * @param repoId
- * @return
+ *
+ * @param repoId ID of repository
*/
@DELETE
@Path("repository/{repoId}")
@@ -244,8 +223,8 @@ public class InterpreterRestApi {
interpreterFactory.removeRepository(repoId);
} catch (Exception e) {
logger.error("Exception in InterpreterRestApi while removing repository ", e);
- return new JsonResponse(
- Status.INTERNAL_SERVER_ERROR, e.getMessage(), ExceptionUtils.getStackTrace(e)).build();
+ return new JsonResponse<>(Status.INTERNAL_SERVER_ERROR, e.getMessage(),
+ ExceptionUtils.getStackTrace(e)).build();
}
return new JsonResponse(Status.OK).build();
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
index c10dee8..700fe1a 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
@@ -18,8 +18,12 @@
package org.apache.zeppelin.rest;
import java.io.IOException;
-import java.util.*;
-
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -31,7 +35,14 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
+import com.google.common.collect.Sets;
+import com.google.common.reflect.TypeToken;
+import com.google.gson.Gson;
import org.apache.commons.lang3.StringUtils;
+import org.quartz.CronExpression;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.apache.zeppelin.annotation.ZeppelinApi;
import org.apache.zeppelin.interpreter.InterpreterSetting;
import org.apache.zeppelin.notebook.Note;
@@ -48,16 +59,7 @@ import org.apache.zeppelin.server.JsonResponse;
import org.apache.zeppelin.socket.NotebookServer;
import org.apache.zeppelin.user.AuthenticationInfo;
import org.apache.zeppelin.utils.SecurityUtils;
-import org.quartz.CronExpression;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.google.common.collect.Sets;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.google.gson.GsonBuilder;
-import com.google.gson.stream.JsonReader;
-import java.io.StringReader;
/**
* Rest api endpoint for the noteBook.
*/
@@ -71,7 +73,8 @@ public class NotebookRestApi {
private SearchService notebookIndex;
private NotebookAuthorization notebookAuthorization;
- public NotebookRestApi() {}
+ public NotebookRestApi() {
+ }
public NotebookRestApi(Notebook notebook, NotebookServer notebookServer, SearchService search) {
this.notebook = notebook;
@@ -87,21 +90,19 @@ public class NotebookRestApi {
@Path("{noteId}/permissions")
@ZeppelinApi
public Response getNotePermissions(@PathParam("noteId") String noteId) {
- Note note = notebook.getNote(noteId);
- HashMap<String, Set<String>> permissionsMap = new HashMap();
+ HashMap<String, Set<String>> permissionsMap = new HashMap<>();
permissionsMap.put("owners", notebookAuthorization.getOwners(noteId));
permissionsMap.put("readers", notebookAuthorization.getReaders(noteId));
permissionsMap.put("writers", notebookAuthorization.getWriters(noteId));
return new JsonResponse<>(Status.OK, "", permissionsMap).build();
}
- String ownerPermissionError(Set<String> current,
- Set<String> allowed) throws IOException {
+ private String ownerPermissionError(Set<String> current, Set<String> allowed) throws IOException {
LOG.info("Cannot change permissions. Connection owners {}. Allowed owners {}",
- current.toString(), allowed.toString());
+ current.toString(), allowed.toString());
return "Insufficient privileges to change permissions.\n\n" +
- "Allowed owners: " + allowed.toString() + "\n\n" +
- "User belongs to: " + current.toString();
+ "Allowed owners: " + allowed.toString() + "\n\n" +
+ "User belongs to: " + current.toString();
}
/**
@@ -112,25 +113,25 @@ public class NotebookRestApi {
@ZeppelinApi
public Response putNotePermissions(@PathParam("noteId") String noteId, String req)
throws IOException {
- HashMap<String, HashSet> permMap = gson.fromJson(req,
- new TypeToken<HashMap<String, HashSet>>(){}.getType());
+ /**
+ * TODO(jl): Fixed the type of HashSet
+ * https://issues.apache.org/jira/browse/ZEPPELIN-1162
+ */
+ HashMap<String, HashSet> permMap =
+ gson.fromJson(req, new TypeToken<HashMap<String, HashSet>>() {
+ }.getType());
Note note = notebook.getNote(noteId);
String principal = SecurityUtils.getPrincipal();
HashSet<String> roles = SecurityUtils.getRoles();
- LOG.info("Set permissions {} {} {} {} {}",
- noteId,
- principal,
- permMap.get("owners"),
- permMap.get("readers"),
- permMap.get("writers")
- );
-
- HashSet<String> userAndRoles = new HashSet<String>();
+ LOG.info("Set permissions {} {} {} {} {}", noteId, principal, permMap.get("owners"),
+ permMap.get("readers"), permMap.get("writers"));
+
+ HashSet<String> userAndRoles = new HashSet<>();
userAndRoles.add(principal);
userAndRoles.addAll(roles);
if (!notebookAuthorization.isOwner(noteId, userAndRoles)) {
- return new JsonResponse<>(Status.FORBIDDEN, ownerPermissionError(userAndRoles,
- notebookAuthorization.getOwners(noteId))).build();
+ return new JsonResponse<>(Status.FORBIDDEN,
+ ownerPermissionError(userAndRoles, notebookAuthorization.getOwners(noteId))).build();
}
HashSet readers = permMap.get("readers");
@@ -146,7 +147,7 @@ public class NotebookRestApi {
}
}
// Set writers, if owners is empty -> set to user requesting the change
- if ( writers != null && !writers.isEmpty()) {
+ if (writers != null && !writers.isEmpty()) {
if (owners.isEmpty()) {
owners = Sets.newHashSet(SecurityUtils.getPrincipal());
}
@@ -155,10 +156,8 @@ public class NotebookRestApi {
notebookAuthorization.setReaders(noteId, readers);
notebookAuthorization.setWriters(noteId, writers);
notebookAuthorization.setOwners(noteId, owners);
- LOG.debug("After set permissions {} {} {}",
- notebookAuthorization.getOwners(noteId),
- notebookAuthorization.getReaders(noteId),
- notebookAuthorization.getWriters(noteId));
+ LOG.debug("After set permissions {} {} {}", notebookAuthorization.getOwners(noteId),
+ notebookAuthorization.getReaders(noteId), notebookAuthorization.getWriters(noteId));
AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
note.persist(subject);
notebookServer.broadcastNote(note);
@@ -167,13 +166,15 @@ public class NotebookRestApi {
/**
* bind a setting to note
+ *
* @throws IOException
*/
@PUT
@Path("interpreter/bind/{noteId}")
@ZeppelinApi
public Response bind(@PathParam("noteId") String noteId, String req) throws IOException {
- List<String> settingIdList = gson.fromJson(req, new TypeToken<List<String>>(){}.getType());
+ List<String> settingIdList = gson.fromJson(req, new TypeToken<List<String>>() {
+ }.getType());
notebook.bindInterpretersToNote(noteId, settingIdList);
return new JsonResponse<>(Status.OK).build();
}
@@ -185,38 +186,27 @@ public class NotebookRestApi {
@Path("interpreter/bind/{noteId}")
@ZeppelinApi
public Response bind(@PathParam("noteId") String noteId) {
- List<InterpreterSettingListForNoteBind> settingList
- = new LinkedList<InterpreterSettingListForNoteBind>();
+ List<InterpreterSettingListForNoteBind> settingList = new LinkedList<>();
List<InterpreterSetting> selectedSettings = notebook.getBindedInterpreterSettings(noteId);
for (InterpreterSetting setting : selectedSettings) {
- settingList.add(new InterpreterSettingListForNoteBind(
- setting.id(),
- setting.getName(),
- setting.getGroup(),
- setting.getInterpreterInfos(),
- true)
- );
+ settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(),
+ setting.getInterpreterInfos(), true));
}
List<InterpreterSetting> availableSettings = notebook.getInterpreterFactory().get();
for (InterpreterSetting setting : availableSettings) {
boolean selected = false;
for (InterpreterSetting selectedSetting : selectedSettings) {
- if (selectedSetting.id().equals(setting.id())) {
+ if (selectedSetting.getId().equals(setting.getId())) {
selected = true;
break;
}
}
if (!selected) {
- settingList.add(new InterpreterSettingListForNoteBind(
- setting.id(),
- setting.getName(),
- setting.getGroup(),
- setting.getInterpreterInfos(),
- false)
- );
+ settingList.add(new InterpreterSettingListForNoteBind(setting.getId(), setting.getName(),
+ setting.getInterpreterInfos(), false));
}
}
return new JsonResponse<>(Status.OK, "", settingList).build();
@@ -228,7 +218,7 @@ public class NotebookRestApi {
public Response getNotebookList() throws IOException {
AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
List<Map<String, String>> notesInfo = notebookServer.generateNotebooksInfo(false, subject);
- return new JsonResponse<>(Status.OK, "", notesInfo ).build();
+ return new JsonResponse<>(Status.OK, "", notesInfo).build();
}
@GET
@@ -245,8 +235,8 @@ public class NotebookRestApi {
/**
* export note REST API
- *
- * @param
+ *
+ * @param noteId ID of Note
* @return note JSON with status.OK
* @throws IOException
*/
@@ -255,12 +245,12 @@ public class NotebookRestApi {
@ZeppelinApi
public Response exportNoteBook(@PathParam("id") String noteId) throws IOException {
String exportJson = notebook.exportNote(noteId);
- return new JsonResponse(Status.OK, "", exportJson).build();
+ return new JsonResponse<>(Status.OK, "", exportJson).build();
}
/**
* import new note REST API
- *
+ *
* @param req - notebook Json
* @return JSON with new note ID
* @throws IOException
@@ -273,9 +263,10 @@ public class NotebookRestApi {
Note newNote = notebook.importNote(req, null, subject);
return new JsonResponse<>(Status.CREATED, "", newNote.getId()).build();
}
-
+
/**
* Create new note REST API
+ *
* @param message - JSON with new note name
* @return JSON with new note ID
* @throws IOException
@@ -284,9 +275,8 @@ public class NotebookRestApi {
@Path("/")
@ZeppelinApi
public Response createNote(String message) throws IOException {
- LOG.info("Create new notebook by JSON {}" , message);
- NewNotebookRequest request = gson.fromJson(message,
- NewNotebookRequest.class);
+ LOG.info("Create new notebook by JSON {}", message);
+ NewNotebookRequest request = gson.fromJson(message, NewNotebookRequest.class);
AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
Note note = notebook.createNote(subject);
List<NewParagraphRequest> initialParagraphs = request.getParagraphs();
@@ -307,12 +297,13 @@ public class NotebookRestApi {
note.persist(subject);
notebookServer.broadcastNote(note);
notebookServer.broadcastNoteList(subject);
- return new JsonResponse<>(Status.CREATED, "", note.getId() ).build();
+ return new JsonResponse<>(Status.CREATED, "", note.getId()).build();
}
/**
* Delete note REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.OK
* @throws IOException
*/
@@ -332,21 +323,21 @@ public class NotebookRestApi {
notebookServer.broadcastNoteList(subject);
return new JsonResponse<>(Status.OK, "").build();
}
-
+
/**
* Clone note REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.CREATED
* @throws IOException, CloneNotSupportedException, IllegalArgumentException
*/
@POST
@Path("{notebookId}")
@ZeppelinApi
- public Response cloneNote(@PathParam("notebookId") String notebookId, String message) throws
- IOException, CloneNotSupportedException, IllegalArgumentException {
- LOG.info("clone notebook by JSON {}" , message);
- NewNotebookRequest request = gson.fromJson(message,
- NewNotebookRequest.class);
+ public Response cloneNote(@PathParam("notebookId") String notebookId, String message)
+ throws IOException, CloneNotSupportedException, IllegalArgumentException {
+ LOG.info("clone notebook by JSON {}", message);
+ NewNotebookRequest request = gson.fromJson(message, NewNotebookRequest.class);
String newNoteName = request.getName();
AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
Note newNote = notebook.cloneNote(notebookId, newNoteName, subject);
@@ -357,6 +348,7 @@ public class NotebookRestApi {
/**
* Insert paragraph REST API
+ *
* @param message - JSON containing paragraph's information
* @return JSON with status.OK
* @throws IOException
@@ -370,7 +362,7 @@ public class NotebookRestApi {
Note note = notebook.getNote(notebookId);
if (note == null) {
- return new JsonResponse(Status.NOT_FOUND, "note not found.").build();
+ return new JsonResponse<>(Status.NOT_FOUND, "note not found.").build();
}
NewParagraphRequest request = gson.fromJson(message, NewParagraphRequest.class);
@@ -388,12 +380,13 @@ public class NotebookRestApi {
AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
note.persist(subject);
notebookServer.broadcastNote(note);
- return new JsonResponse(Status.CREATED, "", p.getId()).build();
+ return new JsonResponse<>(Status.CREATED, "", p.getId()).build();
}
/**
* Get paragraph REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with information of the paragraph
* @throws IOException
*/
@@ -401,7 +394,7 @@ public class NotebookRestApi {
@Path("{notebookId}/paragraph/{paragraphId}")
@ZeppelinApi
public Response getParagraph(@PathParam("notebookId") String notebookId,
- @PathParam("paragraphId") String paragraphId) throws IOException {
+ @PathParam("paragraphId") String paragraphId) throws IOException {
LOG.info("get paragraph {} {}", notebookId, paragraphId);
Note note = notebook.getNote(notebookId);
@@ -414,11 +407,12 @@ public class NotebookRestApi {
return new JsonResponse(Status.NOT_FOUND, "paragraph not found.").build();
}
- return new JsonResponse(Status.OK, "", p).build();
+ return new JsonResponse<>(Status.OK, "", p).build();
}
/**
* Move paragraph REST API
+ *
* @param newIndex - new index to move
* @return JSON with status.OK
* @throws IOException
@@ -427,8 +421,8 @@ public class NotebookRestApi {
@Path("{notebookId}/paragraph/{paragraphId}/move/{newIndex}")
@ZeppelinApi
public Response moveParagraph(@PathParam("notebookId") String notebookId,
- @PathParam("paragraphId") String paragraphId,
- @PathParam("newIndex") String newIndex) throws IOException {
+ @PathParam("paragraphId") String paragraphId, @PathParam("newIndex") String newIndex)
+ throws IOException {
LOG.info("move paragraph {} {} {}", notebookId, paragraphId, newIndex);
Note note = notebook.getNote(notebookId);
@@ -456,7 +450,8 @@ public class NotebookRestApi {
/**
* Delete paragraph REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.OK
* @throws IOException
*/
@@ -464,7 +459,7 @@ public class NotebookRestApi {
@Path("{notebookId}/paragraph/{paragraphId}")
@ZeppelinApi
public Response deleteParagraph(@PathParam("notebookId") String notebookId,
- @PathParam("paragraphId") String paragraphId) throws IOException {
+ @PathParam("paragraphId") String paragraphId) throws IOException {
LOG.info("delete paragraph {} {}", notebookId, paragraphId);
Note note = notebook.getNote(notebookId);
@@ -487,36 +482,38 @@ public class NotebookRestApi {
/**
* Run notebook jobs REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@POST
@Path("job/{notebookId}")
@ZeppelinApi
- public Response runNoteJobs(@PathParam("notebookId") String notebookId) throws
- IOException, IllegalArgumentException {
+ public Response runNoteJobs(@PathParam("notebookId") String notebookId)
+ throws IOException, IllegalArgumentException {
LOG.info("run notebook jobs {} ", notebookId);
Note note = notebook.getNote(notebookId);
if (note == null) {
return new JsonResponse<>(Status.NOT_FOUND, "note not found.").build();
}
-
+
note.runAll();
return new JsonResponse<>(Status.OK).build();
}
/**
* Stop(delete) notebook jobs REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@DELETE
@Path("job/{notebookId}")
@ZeppelinApi
- public Response stopNoteJobs(@PathParam("notebookId") String notebookId) throws
- IOException, IllegalArgumentException {
+ public Response stopNoteJobs(@PathParam("notebookId") String notebookId)
+ throws IOException, IllegalArgumentException {
LOG.info("stop notebook jobs {} ", notebookId);
Note note = notebook.getNote(notebookId);
if (note == null) {
@@ -530,18 +527,19 @@ public class NotebookRestApi {
}
return new JsonResponse<>(Status.OK).build();
}
-
+
/**
* Get notebook job status REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@GET
@Path("job/{notebookId}")
@ZeppelinApi
- public Response getNoteJobStatus(@PathParam("notebookId") String notebookId) throws
- IOException, IllegalArgumentException {
+ public Response getNoteJobStatus(@PathParam("notebookId") String notebookId)
+ throws IOException, IllegalArgumentException {
LOG.info("get notebook job status.");
Note note = notebook.getNote(notebookId);
if (note == null) {
@@ -550,23 +548,21 @@ public class NotebookRestApi {
return new JsonResponse<>(Status.OK, null, note.generateParagraphsInfo()).build();
}
-
+
/**
* Run paragraph job REST API
- *
+ *
* @param message - JSON with params if user wants to update dynamic form's value
* null, empty string, empty json if user doesn't want to update
- *
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@POST
@Path("job/{notebookId}/{paragraphId}")
@ZeppelinApi
- public Response runParagraph(@PathParam("notebookId") String notebookId,
- @PathParam("paragraphId") String paragraphId,
- String message) throws
- IOException, IllegalArgumentException {
+ public Response runParagraph(@PathParam("notebookId") String notebookId,
+ @PathParam("paragraphId") String paragraphId, String message)
+ throws IOException, IllegalArgumentException {
LOG.info("run paragraph job {} {} {}", notebookId, paragraphId, message);
Note note = notebook.getNote(notebookId);
@@ -581,8 +577,8 @@ public class NotebookRestApi {
// handle params if presented
if (!StringUtils.isEmpty(message)) {
- RunParagraphWithParametersRequest request = gson.fromJson(message,
- RunParagraphWithParametersRequest.class);
+ RunParagraphWithParametersRequest request =
+ gson.fromJson(message, RunParagraphWithParametersRequest.class);
Map<String, Object> paramsForUpdating = request.getParams();
if (paramsForUpdating != null) {
paragraph.settings.getParams().putAll(paramsForUpdating);
@@ -598,16 +594,21 @@ public class NotebookRestApi {
/**
* Stop(delete) paragraph job REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
+ * @param paragraphId ID of Paragraph
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@DELETE
@Path("job/{notebookId}/{paragraphId}")
@ZeppelinApi
- public Response stopParagraph(@PathParam("notebookId") String notebookId,
- @PathParam("paragraphId") String paragraphId) throws
- IOException, IllegalArgumentException {
+ public Response stopParagraph(@PathParam("notebookId") String notebookId,
+ @PathParam("paragraphId") String paragraphId) throws IOException, IllegalArgumentException {
+ /**
+ * TODO(jl): Fixed notebookId to noteId
+ * https://issues.apache.org/jira/browse/ZEPPELIN-1163
+ */
LOG.info("stop paragraph job {} ", notebookId);
Note note = notebook.getNote(notebookId);
if (note == null) {
@@ -621,9 +622,10 @@ public class NotebookRestApi {
p.abort();
return new JsonResponse<>(Status.OK).build();
}
-
+
/**
* Register cron job REST API
+ *
* @param message - JSON with cron expressions.
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
@@ -631,18 +633,18 @@ public class NotebookRestApi {
@POST
@Path("cron/{notebookId}")
@ZeppelinApi
- public Response registerCronJob(@PathParam("notebookId") String notebookId, String message) throws
- IOException, IllegalArgumentException {
+ public Response registerCronJob(@PathParam("notebookId") String notebookId, String message)
+ throws IOException, IllegalArgumentException {
+ // TODO(jl): Fixed notebookId to noteId
LOG.info("Register cron job note={} request cron msg={}", notebookId, message);
- CronRequest request = gson.fromJson(message,
- CronRequest.class);
-
+ CronRequest request = gson.fromJson(message, CronRequest.class);
+
Note note = notebook.getNote(notebookId);
if (note == null) {
return new JsonResponse<>(Status.NOT_FOUND, "note not found.").build();
}
-
+
if (!CronExpression.isValidExpression(request.getCronString())) {
return new JsonResponse<>(Status.BAD_REQUEST, "wrong cron expressions.").build();
}
@@ -651,60 +653,64 @@ public class NotebookRestApi {
config.put("cron", request.getCronString());
note.setConfig(config);
notebook.refreshCron(note.id());
-
+
return new JsonResponse<>(Status.OK).build();
}
-
+
/**
* Remove cron job REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@DELETE
@Path("cron/{notebookId}")
@ZeppelinApi
- public Response removeCronJob(@PathParam("notebookId") String notebookId) throws
- IOException, IllegalArgumentException {
+ public Response removeCronJob(@PathParam("notebookId") String notebookId)
+ throws IOException, IllegalArgumentException {
+ // TODO(jl): Fixed notebookId to noteId
LOG.info("Remove cron job note {}", notebookId);
Note note = notebook.getNote(notebookId);
if (note == null) {
return new JsonResponse<>(Status.NOT_FOUND, "note not found.").build();
}
-
+
Map<String, Object> config = note.getConfig();
config.put("cron", null);
note.setConfig(config);
notebook.refreshCron(note.id());
-
+
return new JsonResponse<>(Status.OK).build();
- }
-
+ }
+
/**
* Get cron job REST API
- * @param
+ *
+ * @param notebookId ID of Notebook
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@GET
@Path("cron/{notebookId}")
@ZeppelinApi
- public Response getCronJob(@PathParam("notebookId") String notebookId) throws
- IOException, IllegalArgumentException {
+ public Response getCronJob(@PathParam("notebookId") String notebookId)
+ throws IOException, IllegalArgumentException {
+ // TODO(jl): Fixed notebookId to noteId
LOG.info("Get cron job note {}", notebookId);
Note note = notebook.getNote(notebookId);
if (note == null) {
return new JsonResponse<>(Status.NOT_FOUND, "note not found.").build();
}
-
+
return new JsonResponse<>(Status.OK, note.getConfig().get("cron")).build();
}
/**
* Get notebook jobs for job manager
- * @param
+ *
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@@ -726,7 +732,7 @@ public class NotebookRestApi {
/**
* Get updated notebook jobs for job manager
- * @param
+ *
* @return JSON with status.OK
* @throws IOException, IllegalArgumentException
*/
@@ -734,8 +740,8 @@ public class NotebookRestApi {
@Path("jobmanager/{lastUpdateUnixtime}/")
@ZeppelinApi
public Response getUpdatedJobListforNotebook(
- @PathParam("lastUpdateUnixtime") long lastUpdateUnixTime) throws
- IOException, IllegalArgumentException {
+ @PathParam("lastUpdateUnixtime") long lastUpdateUnixTime)
+ throws IOException, IllegalArgumentException {
LOG.info("Get updated notebook jobs lastUpdateTime {}", lastUpdateUnixTime);
List<Map<String, Object>> notebookJobs;
@@ -759,7 +765,7 @@ public class NotebookRestApi {
LOG.info("Searching notebooks for: {}", queryTerm);
String principal = SecurityUtils.getPrincipal();
HashSet<String> roles = SecurityUtils.getRoles();
- HashSet<String> userAndRoles = new HashSet<String>();
+ HashSet<String> userAndRoles = new HashSet<>();
userAndRoles.add(principal);
userAndRoles.addAll(roles);
List<Map<String, String>> notebooksFound = notebookIndex.query(queryTerm);
@@ -767,8 +773,8 @@ public class NotebookRestApi {
String[] Id = notebooksFound.get(i).get("id").split("/", 2);
String noteId = Id[0];
if (!notebookAuthorization.isOwner(noteId, userAndRoles) &&
- !notebookAuthorization.isReader(noteId, userAndRoles) &&
- !notebookAuthorization.isWriter(noteId, userAndRoles)) {
+ !notebookAuthorization.isReader(noteId, userAndRoles) &&
+ !notebookAuthorization.isWriter(noteId, userAndRoles)) {
notebooksFound.remove(i);
i--;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java
index e0ddacb..6ec5a54 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/InterpreterSettingListForNoteBind.java
@@ -19,69 +19,22 @@ package org.apache.zeppelin.rest.message;
import java.util.List;
-import org.apache.zeppelin.interpreter.Interpreter;
-import org.apache.zeppelin.interpreter.InterpreterSetting;
+import org.apache.zeppelin.interpreter.InterpreterInfo;
/**
* InterpreterSetting information for binding
*/
public class InterpreterSettingListForNoteBind {
- String id;
- String name;
- String group;
+ private String id;
+ private String name;
private boolean selected;
- private List<InterpreterSetting.InterpreterInfo> interpreters;
+ private List<InterpreterInfo> interpreters;
public InterpreterSettingListForNoteBind(String id, String name,
- String group,
- List<InterpreterSetting.InterpreterInfo> interpreters,
- boolean selected) {
- super();
+ List<InterpreterInfo> interpreters, boolean selected) {
this.id = id;
this.name = name;
- this.group = group;
this.interpreters = interpreters;
this.selected = selected;
}
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getGroup() {
- return group;
- }
-
- public void setGroup(String group) {
- this.group = group;
- }
-
- public List<InterpreterSetting.InterpreterInfo> getInterpreterNames() {
- return interpreters;
- }
-
- public void setInterpreterNames(List<InterpreterSetting.InterpreterInfo> interpreters) {
- this.interpreters = interpreters;
- }
-
- public boolean isSelected() {
- return selected;
- }
-
- public void setSelected(boolean selected) {
- this.selected = selected;
- }
-
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/NewInterpreterSettingRequest.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/NewInterpreterSettingRequest.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/NewInterpreterSettingRequest.java
index a559fb5..7e3a414 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/NewInterpreterSettingRequest.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/message/NewInterpreterSettingRequest.java
@@ -24,16 +24,15 @@ import org.apache.zeppelin.dep.Dependency;
import org.apache.zeppelin.interpreter.InterpreterOption;
/**
- * NewInterpreterSetting rest api request message
- *
+ * NewInterpreterSetting rest api request message
*/
public class NewInterpreterSettingRequest {
- String name;
- String group;
+ private String name;
+ private String group;
- Map<String, String> properties;
- List<Dependency> dependencies;
- InterpreterOption option;
+ private Map<String, String> properties;
+ private List<Dependency> dependencies;
+ private InterpreterOption option;
public NewInterpreterSettingRequest() {
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/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 cb77ae7..6cfd961 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
@@ -22,9 +22,7 @@ import java.io.IOException;
import java.lang.ref.WeakReference;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.util.LinkedList;
import java.util.List;
-import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -37,9 +35,6 @@ import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.zeppelin.conf.ZeppelinConfiguration;
-import org.apache.zeppelin.dep.Dependency;
-import org.apache.zeppelin.interpreter.InterpreterGroup;
-import org.apache.zeppelin.interpreter.InterpreterOption;
import org.apache.zeppelin.interpreter.InterpreterSetting;
import org.apache.zeppelin.server.ZeppelinServer;
import org.hamcrest.Description;
@@ -51,7 +46,6 @@ import org.slf4j.LoggerFactory;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
-import org.sonatype.aether.RepositoryException;
public abstract class AbstractTestRestApi {
@@ -149,7 +143,7 @@ public abstract class AbstractTestRestApi {
// assume first one is spark
InterpreterSetting sparkIntpSetting = null;
for(InterpreterSetting intpSetting : ZeppelinServer.notebook.getInterpreterFactory().get()) {
- if (intpSetting.getGroup().equals("spark")) {
+ if (intpSetting.getName().equals("spark")) {
sparkIntpSetting = intpSetting;
}
}
@@ -162,12 +156,12 @@ public abstract class AbstractTestRestApi {
sparkIntpSetting.getProperties().setProperty("spark.home", getSparkHome());
pySpark = true;
sparkR = true;
- ZeppelinServer.notebook.getInterpreterFactory().restart(sparkIntpSetting.id());
+ ZeppelinServer.notebook.getInterpreterFactory().restart(sparkIntpSetting.getId());
} else {
// assume first one is spark
InterpreterSetting sparkIntpSetting = null;
for(InterpreterSetting intpSetting : ZeppelinServer.notebook.getInterpreterFactory().get()) {
- if (intpSetting.getGroup().equals("spark")) {
+ if (intpSetting.getName().equals("spark")) {
sparkIntpSetting = intpSetting;
}
}
@@ -180,7 +174,7 @@ public abstract class AbstractTestRestApi {
sparkR = true;
}
- ZeppelinServer.notebook.getInterpreterFactory().restart(sparkIntpSetting.id());
+ ZeppelinServer.notebook.getInterpreterFactory().restart(sparkIntpSetting.getId());
}
}
}
@@ -401,18 +395,6 @@ public abstract class AbstractTestRestApi {
};
}
- //Create new Setting and return Setting ID
- protected String createTempSetting(String tempName)
- throws IOException, RepositoryException {
- InterpreterSetting setting = ZeppelinServer.notebook.getInterpreterFactory()
- .add(tempName,
- "newGroup",
- new LinkedList<Dependency>(),
- new InterpreterOption(false),
- new Properties());
- return setting.id();
- }
-
protected TypeSafeMatcher<? super JsonElement> hasRootElementNamed(final String memberName) {
return new TypeSafeMatcher<JsonElement>() {
@Override
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/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 4d7caf1..e92432f 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
@@ -25,7 +25,6 @@ import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
-import org.apache.commons.lang3.StringUtils;
import org.apache.zeppelin.interpreter.InterpreterSetting;
import org.apache.zeppelin.notebook.Note;
import org.apache.zeppelin.notebook.Paragraph;
@@ -69,7 +68,7 @@ public class InterpreterRestApiTest extends AbstractTestRestApi {
Map<String, Object> resp = gson.fromJson(get.getResponseBodyAsString(), new TypeToken<Map<String, Object>>() {
}.getType());
Map<String, Object> body = (Map<String, Object>) resp.get("body");
- assertEquals(ZeppelinServer.notebook.getInterpreterFactory().getRegisteredInterpreterList().size(), body.size());
+ assertEquals(ZeppelinServer.notebook.getInterpreterFactory().getAvailableInterpreterSettings().size(), body.size());
get.releaseConnection();
}
@@ -162,7 +161,7 @@ public class InterpreterRestApiTest extends AbstractTestRestApi {
for (InterpreterSetting setting : ZeppelinServer.notebook.getInterpreterFactory().getInterpreterSettings(note.getId())) {
if (setting.getName().equals("md")) {
// Call Restart Interpreter REST API
- PutMethod put = httpPut("/interpreter/setting/restart/" + setting.id(), "");
+ PutMethod put = httpPut("/interpreter/setting/restart/" + setting.getId(), "");
assertThat("test interpreter restart:", put, isAllowed());
put.releaseConnection();
break;
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
index 3c77b45..24a1b90 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
@@ -20,16 +20,10 @@ import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.apache.commons.exec.CommandLine;
-import org.apache.commons.exec.DefaultExecutor;
-import org.apache.commons.exec.ExecuteWatchdog;
-import org.apache.commons.exec.PumpStreamHandler;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.zeppelin.interpreter.InterpreterSetting;
import org.apache.zeppelin.notebook.Note;
import org.apache.zeppelin.notebook.Paragraph;
@@ -204,8 +198,8 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
ZeppelinServer.notebook.getBindedInterpreterSettings(note.id());
for (InterpreterSetting setting : settings) {
- if (setting.getGroup().equals("spark")) {
- ZeppelinServer.notebook.getInterpreterFactory().restart(setting.id());
+ if (setting.getName().equals("spark")) {
+ ZeppelinServer.notebook.getInterpreterFactory().restart(setting.getId());
break;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-web/src/app/interpreter/interpreter-create/interpreter-create.html
----------------------------------------------------------------------
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 97e3103..599248b 100644
--- a/zeppelin-web/src/app/interpreter/interpreter-create/interpreter-create.html
+++ b/zeppelin-web/src/app/interpreter/interpreter-create/interpreter-create.html
@@ -19,7 +19,7 @@ limitations under the License.
<h4>Create new interpreter</h4>
<div class="form-group" style="width:200px">
- <b>Name</b>
+ <b>Interpreter Name</b>
<input id="newInterpreterSettingName" input pu-elastic-input
pu-elastic-input-minwidth="180px" ng-model="newInterpreterSetting.name" />
</div>
@@ -29,8 +29,8 @@ limitations under the License.
style="width:180px">
<select class="form-control input-sm" ng-model="newInterpreterSetting.group"
ng-change="newInterpreterGroupChange()">
- <option ng-repeat="availableInterpreter in availableInterpreters | unique: 'group'| orderBy: 'group'" value="{{availableInterpreter.group}}">
- {{availableInterpreter.group}}
+ <option ng-repeat="availableInterpreter in availableInterpreters | unique: 'name'| orderBy: 'name'" value="{{availableInterpreter.name}}">
+ {{availableInterpreter.name}}
</option>
</select>
</div>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-web/src/app/interpreter/interpreter.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/interpreter/interpreter.controller.js b/zeppelin-web/src/app/interpreter/interpreter.controller.js
index be64c78..affd9bd 100644
--- a/zeppelin-web/src/app/interpreter/interpreter.controller.js
+++ b/zeppelin-web/src/app/interpreter/interpreter.controller.js
@@ -194,15 +194,14 @@ angular.module('zeppelinWebApp').controller('InterpreterCtrl',
};
$scope.newInterpreterGroupChange = function() {
- var el = _.pluck(_.filter($scope.availableInterpreters, {'group': $scope.newInterpreterSetting.group}),
+ var el = _.pluck(_.filter($scope.availableInterpreters, {'name': $scope.newInterpreterSetting.group}),
'properties');
-
var properties = {};
for (var i = 0; i < el.length; i++) {
var intpInfo = el[i];
for (var key in intpInfo) {
properties[key] = {
- value: intpInfo[key].defaultValue,
+ value: intpInfo[key],
description: intpInfo[key].description
};
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-web/src/app/interpreter/interpreter.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/interpreter/interpreter.html b/zeppelin-web/src/app/interpreter/interpreter.html
index d96fadf..088359a 100644
--- a/zeppelin-web/src/app/interpreter/interpreter.html
+++ b/zeppelin-web/src/app/interpreter/interpreter.html
@@ -84,7 +84,7 @@ limitations under the License.
</div>
<div class="box width-full"
- ng-repeat="setting in interpreterSettings | orderBy: 'group' | filter: searchInterpreter">
+ ng-repeat="setting in interpreterSettings | orderBy: 'name' | filter: searchInterpreter">
<div id="{{setting.name | lowercase}}">
<div class="row interpreter">
<div class="col-md-12">
@@ -93,7 +93,7 @@ limitations under the License.
<span style="display:inline-block" ng-repeat="interpreter in setting.interpreterGroup"
title="{{interpreter.class}}">
<span ng-show="!$first">, </span>
- %<span ng-show="!$parent.$first || $first">{{setting.group}}</span
+ %<span ng-show="!$parent.$first || $first">{{setting.name}}</span
><span ng-show="(!$parent.$first || $first) && !$first">.</span
><span ng-show="!$first">{{interpreter.name}}</span>
<span ng-show="$parent.$first && $first">(default)</span>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-web/src/app/notebook/notebook.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/notebook.controller.js b/zeppelin-web/src/app/notebook/notebook.controller.js
index 7e0bd7e..eea8a10 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.js
@@ -588,9 +588,9 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
var selectedIntp = {};
for (key in $scope.interpreterBindings) {
setting = $scope.interpreterBindings[key];
- if (!selectedIntp[setting.group]) {
+ if (!selectedIntp[setting.name]) {
setting.selected = true;
- selectedIntp[setting.group] = true;
+ selectedIntp[setting.name] = true;
}
}
$scope.showSetting = true;
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/zeppelin-web/src/app/notebook/notebook.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/notebook.html b/zeppelin-web/src/app/notebook/notebook.html
index f0e87a7..00fcacd 100644
--- a/zeppelin-web/src/app/notebook/notebook.html
+++ b/zeppelin-web/src/app/notebook/notebook.html
@@ -40,7 +40,7 @@ limitations under the License.
<small>
<span style="display:inline-block" ng-repeat="intp in item.interpreters">
<span ng-show="!$first">, </span>
- %<span ng-show="!$parent.$first || $first">{{item.group}}</span
+ %<span ng-show="!$parent.$first || $first">{{item.name}}</span
><span ng-show="(!$parent.$first || $first) && !$first">.</span
><span ng-show="!$first">{{intp.name}}</span>
<span ng-show="$parent.$first && $first">(default)</span>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b11b6ec2/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 6759f97..e051488 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
@@ -20,6 +20,7 @@ import com.google.gson.Gson;
import org.apache.thrift.TException;
import org.apache.zeppelin.interpreter.Interpreter;
import org.apache.zeppelin.interpreter.InterpreterGroup;
+import org.apache.zeppelin.interpreter.InterpreterInfo;
import org.apache.zeppelin.interpreter.InterpreterSetting;
import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry;
import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcess;
@@ -442,8 +443,8 @@ public class HeliumApplicationFactory implements ApplicationEventListener, Noteb
public void onUnbindInterpreter(Note note, InterpreterSetting setting) {
for (Paragraph p : note.getParagraphs()) {
Interpreter currentInterpreter = p.getCurrentRepl();
- List<InterpreterSetting.InterpreterInfo> infos = setting.getInterpreterInfos();
- for (InterpreterSetting.InterpreterInfo info : infos) {
+ List<InterpreterInfo> infos = setting.getInterpreterInfos();
+ for (InterpreterInfo info : infos) {
if (info.getClassName().equals(currentInterpreter.getClassName())) {
onParagraphRemove(p);
break;