Repository: zeppelin Updated Branches: refs/heads/master e929aef8c -> 67cb82895
[ZEPPELIN-1189] Get note revision websocket api ### What is this PR for? Adds websocket api for getting note revision. ### What type of PR is it? Improvement | Feature ### Todos * [x] - add backend websocket handle * [x] - add frontend call ### What is the Jira issue? [#1189](https://issues.apache.org/jira/browse/ZEPPELIN-1189) ### How should this be tested? green CI (can be tested once frontend implemented) ### 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: Khalid Huseynov <[email protected]> Author: Khalid Huseynov <[email protected]> Author: Khalid Huseynov <[email protected]> Closes #1192 from khalidhuseynov/versioning/get-note-revision-api and squashes the following commits: f1ab994 [Khalid Huseynov] Merge branch 'master' into versioning/get-note-revision-api 683b481 [Khalid Huseynov] receive Revision object from frontend aa0a7d6 [Khalid Huseynov] Revert "change NotebookRepo api to get note revision from Revision object to String revId" ce097ed [Khalid Huseynov] add throws to notebook getRevisionNote baaa704 [Khalid Huseynov] change NotebookRepo api to get note revision from Revision object to String revId d9751c3 [Khalid Huseynov] add backend ws api to get note revision 3783fc9 [Khalid Huseynov] receive ws NOTE_REVISION msg 79f8ac9 [Khalid Huseynov] add getNoteRevision to front Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/67cb8289 Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/67cb8289 Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/67cb8289 Branch: refs/heads/master Commit: 67cb8289586c622b62255ec13956981e6d2cf3c1 Parents: e929aef Author: Khalid Huseynov <[email protected]> Authored: Tue Jul 19 23:09:42 2016 +0900 Committer: Alexander Bezzubov <[email protected]> Committed: Wed Jul 20 12:13:31 2016 +0900 ---------------------------------------------------------------------- .../org/apache/zeppelin/socket/NotebookServer.java | 16 ++++++++++++++++ .../src/app/notebook/notebook.controller.js | 6 ++++++ .../websocketEvents/websocketEvents.factory.js | 2 ++ .../websocketEvents/websocketMsg.service.js | 10 ++++++++++ .../java/org/apache/zeppelin/notebook/Notebook.java | 6 ++++++ .../zeppelin/notebook/repo/NotebookRepoSync.java | 11 ++++++++--- .../apache/zeppelin/notebook/socket/Message.java | 3 +++ 7 files changed, 51 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/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 853c0d5..1859ba0 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 @@ -45,6 +45,7 @@ import org.apache.zeppelin.interpreter.InterpreterResult; import org.apache.zeppelin.interpreter.InterpreterSetting; import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener; import org.apache.zeppelin.notebook.*; +import org.apache.zeppelin.notebook.repo.NotebookRepo.Revision; import org.apache.zeppelin.notebook.socket.Message; import org.apache.zeppelin.notebook.socket.Message.OP; import org.apache.zeppelin.scheduler.Job; @@ -220,6 +221,9 @@ public class NotebookServer extends WebSocketServlet implements case CHECKPOINT_NOTEBOOK: checkpointNotebook(conn, notebook, messagereceived); break; + case NOTE_REVISION: + getNoteRevision(conn, notebook, messagereceived); + break; case LIST_NOTEBOOK_JOBS: unicastNotebookJobInfo(conn, messagereceived); break; @@ -1129,6 +1133,18 @@ public class NotebookServer extends WebSocketServlet implements notebook.checkpointNote(noteId, commitMessage, subject); } + private void getNoteRevision(NotebookSocket conn, Notebook notebook, Message fromMessage) + throws IOException { + String noteId = (String) fromMessage.get("noteId"); + Revision revision = (Revision) fromMessage.get("revision"); + AuthenticationInfo subject = new AuthenticationInfo(fromMessage.principal); + Note revisionNote = notebook.getNoteRevision(noteId, revision, subject); + conn.send(serializeMessage(new Message(OP.NOTE_REVISION) + .put("noteId", noteId) + .put("revisionId", revision) + .put("data", revisionNote))); + } + /** * This callback is for the paragraph that runs on ZeppelinServer * @param noteId http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/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 7d58e46..4727650 100644 --- a/zeppelin-web/src/app/notebook/notebook.controller.js +++ b/zeppelin-web/src/app/notebook/notebook.controller.js @@ -175,6 +175,12 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro document.getElementById('note.checkpoint.message').value = ''; }; + // receive certain revision of note + $scope.$on('noteRevision', function(event, data) { + console.log('received note revision %o', data); + //TODO(xxx): render it + }); + $scope.runNote = function() { BootstrapDialog.confirm({ closable: true, http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js ---------------------------------------------------------------------- diff --git a/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js b/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js index 2fb5003..6c9eeee 100644 --- a/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js +++ b/zeppelin-web/src/components/websocketEvents/websocketEvents.factory.js @@ -109,6 +109,8 @@ angular.module('zeppelinWebApp').factory('websocketEvents', $rootScope.$broadcast('appLoad', data); } else if (op === 'APP_STATUS_CHANGE') { $rootScope.$broadcast('appStatusChange', data); + } else if (op === 'NOTE_REVISION') { + $rootScope.$broadcast('noteRevision', data); } }); http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js ---------------------------------------------------------------------- diff --git a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js index 698b8ff..9a82c9b 100644 --- a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js +++ b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js @@ -161,6 +161,16 @@ angular.module('zeppelinWebApp').service('websocketMsgSrv', function($rootScope, }); }, + getNoteRevision: function(noteId, revisionId) { + websocketEvents.sendNewEvent({ + op: 'NOTE_REVISION', + data: { + noteId: noteId, + revisionId: revisionId + } + }); + }, + isConnected: function() { return websocketEvents.isConnected(); }, http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java index c56c4ee..9937d61 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java @@ -55,6 +55,7 @@ import org.apache.zeppelin.interpreter.InterpreterGroup; import org.apache.zeppelin.interpreter.InterpreterSetting; import org.apache.zeppelin.interpreter.remote.RemoteAngularObjectRegistry; import org.apache.zeppelin.notebook.repo.NotebookRepo; +import org.apache.zeppelin.notebook.repo.NotebookRepo.Revision; import org.apache.zeppelin.notebook.repo.NotebookRepoSync; import org.apache.zeppelin.resource.ResourcePoolUtils; import org.apache.zeppelin.scheduler.Job; @@ -357,6 +358,11 @@ public class Notebook implements NoteEventListener { notebookRepo.checkpoint(noteId, checkpointMessage, subject); } + public Note getNoteRevision(String noteId, Revision revision, AuthenticationInfo subject) + throws IOException { + return notebookRepo.get(noteId, revision, subject); + } + @SuppressWarnings("rawtypes") private Note loadNoteFromRepo(String id, AuthenticationInfo subject) { Note note = null; http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java index ab53f5f..4e735e8 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java @@ -354,9 +354,14 @@ public class NotebookRepoSync implements NotebookRepo { } @Override - public Note get(String noteId, Revision rev, AuthenticationInfo subject) throws IOException { - // Auto-generated method stub - return null; + public Note get(String noteId, Revision rev, AuthenticationInfo subject) { + Note revisionNote = null; + try { + revisionNote = getRepo(0).get(noteId, rev, subject); + } catch (IOException e) { + LOG.error("Failed to get revision {} of note {}", rev.id, noteId, e); + } + return revisionNote; } @Override http://git-wip-us.apache.org/repos/asf/zeppelin/blob/67cb8289/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java index 08b3235..c0baf40 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/socket/Message.java @@ -114,6 +114,9 @@ public class Message { CHECKPOINT_NOTEBOOK, // [c-s] checkpoint notebook to storage repository // @param noteId // @param checkpointName + NOTE_REVISION, // [c-s] get certain revision of note + // @param noteId + // @param revisionId APP_APPEND_OUTPUT, // [s-c] append output APP_UPDATE_OUTPUT, // [s-c] update (replace) output
