You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2016/07/08 14:56:33 UTC
zeppelin git commit: ZEPPELIN-1129 Zeppelin fails to load notebooks
with old date format
Repository: zeppelin
Updated Branches:
refs/heads/master 8da3e23a9 -> a9d064c90
ZEPPELIN-1129 Zeppelin fails to load notebooks with old date format
### What is this PR for?
Old notebook fails to load due to date parse exception
### What type of PR is it?
Bug Fix
### What is the Jira issue?
https://issues.apache.org/jira/browse/ZEPPELIN-1129
### How should this be tested?
Keep a notebook with old date format in the notebook dir and reload notebooks on zeppelin home page
### Questions:
* Does the licenses files need update? n/a
* Is there breaking changes for older versions? n/a
* Does this needs documentation? n/a
Author: Renjith Kamath <re...@gmail.com>
Closes #1146 from r-kamath/ZEPPELIN-1129 and squashes the following commits:
901bf2b [Renjith Kamath] ZEPPELIN-1129 Zeppelin fails to load notebooks with old date format
5391d12 [Renjith Kamath] ZEPPELIN-1129 Zeppelin fails to load notebooks with old format
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/a9d064c9
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/a9d064c9
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/a9d064c9
Branch: refs/heads/master
Commit: a9d064c90f8830779b4339dcf60edff94cc228a8
Parents: 8da3e23
Author: Renjith Kamath <re...@gmail.com>
Authored: Thu Jul 7 17:58:56 2016 +0530
Committer: Lee moon soo <mo...@apache.org>
Committed: Fri Jul 8 07:58:46 2016 -0700
----------------------------------------------------------------------
.../notebook/repo/AzureNotebookRepo.java | 5 +-
.../zeppelin/notebook/repo/S3NotebookRepo.java | 5 +-
.../zeppelin/notebook/repo/VFSNotebookRepo.java | 5 +-
.../apache/zeppelin/notebook/NotebookTest.java | 28 +++++---
.../src/test/resources/2BQA35CJZ/note.json | 69 ++++++++++++++++++++
5 files changed, 100 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/a9d064c9/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/AzureNotebookRepo.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/AzureNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/AzureNotebookRepo.java
index fdb6bbf..be6fbb6 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/AzureNotebookRepo.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/AzureNotebookRepo.java
@@ -27,6 +27,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.zeppelin.conf.ZeppelinConfiguration;
import org.apache.zeppelin.notebook.Note;
import org.apache.zeppelin.notebook.NoteInfo;
+import org.apache.zeppelin.notebook.NotebookImportDeserializer;
import org.apache.zeppelin.notebook.Paragraph;
import org.apache.zeppelin.scheduler.Job;
import org.apache.zeppelin.user.AuthenticationInfo;
@@ -35,6 +36,7 @@ import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.URISyntaxException;
import java.security.InvalidKeyException;
+import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@@ -121,7 +123,8 @@ public class AzureNotebookRepo implements NotebookRepo {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
- Gson gson = gsonBuilder.create();
+ Gson gson = gsonBuilder.registerTypeAdapter(Date.class, new NotebookImportDeserializer())
+ .create();
Note note = gson.fromJson(json, Note.class);
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/a9d064c9/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java
index fc69186..460c993 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/S3NotebookRepo.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
+import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@@ -36,6 +37,7 @@ import org.apache.zeppelin.conf.ZeppelinConfiguration;
import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars;
import org.apache.zeppelin.notebook.Note;
import org.apache.zeppelin.notebook.NoteInfo;
+import org.apache.zeppelin.notebook.NotebookImportDeserializer;
import org.apache.zeppelin.notebook.Paragraph;
import org.apache.zeppelin.scheduler.Job.Status;
import org.apache.zeppelin.user.AuthenticationInfo;
@@ -166,7 +168,8 @@ public class S3NotebookRepo implements NotebookRepo {
private Note getNote(String key) throws IOException {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
- Gson gson = gsonBuilder.create();
+ Gson gson = gsonBuilder.registerTypeAdapter(Date.class, new NotebookImportDeserializer())
+ .create();
S3Object s3object;
try {
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/a9d064c9/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java
index a74e6c7..430a069 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java
@@ -23,6 +23,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@@ -40,6 +41,7 @@ import org.apache.zeppelin.notebook.ApplicationState;
import org.apache.zeppelin.notebook.Note;
import org.apache.zeppelin.notebook.NoteInfo;
import org.apache.zeppelin.notebook.Paragraph;
+import org.apache.zeppelin.notebook.NotebookImportDeserializer;
import org.apache.zeppelin.scheduler.Job.Status;
import org.apache.zeppelin.user.AuthenticationInfo;
import org.slf4j.Logger;
@@ -158,7 +160,8 @@ public class VFSNotebookRepo implements NotebookRepo {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
- Gson gson = gsonBuilder.create();
+ Gson gson = gsonBuilder.registerTypeAdapter(Date.class, new NotebookImportDeserializer())
+ .create();
FileContent content = noteJson.getContent();
InputStream ins = content.getInputStream();
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/a9d064c9/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java
index e67344f..6790297 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java
@@ -145,12 +145,19 @@ public class NotebookTest implements JobListenerFactory{
@Test
public void testReloadAllNotes() throws IOException {
- File srcDir = new File("src/test/resources/2A94M5J1Z");
- File destDir = new File(notebookDir.getAbsolutePath() + "/2A94M5J1Z");
+ /**
+ * 2A94M5J1Z old date format without timezone
+ * 2BQA35CJZ new date format with timezone
+ */
+ String[] noteNames = new String[]{"2A94M5J1Z", "2BQA35CJZ"};
// copy the notebook
try {
- FileUtils.copyDirectory(srcDir, destDir);
+ for (String note : noteNames) {
+ File srcDir = new File("src/test/resources/" + note);
+ File destDir = new File(notebookDir.getAbsolutePath() + "/" + note);
+ FileUtils.copyDirectory(srcDir, destDir);
+ }
} catch (IOException e) {
logger.error(e.toString(), e);
}
@@ -163,17 +170,20 @@ public class NotebookTest implements JobListenerFactory{
Note copiedNote = notebookRepo.get("2A94M5J1Z", null);
notebook.reloadAllNotes(null);
notes = notebook.getAllNotes();
- assertEquals(notes.size(), 1);
- assertEquals(notes.get(0).id(), copiedNote.id());
- assertEquals(notes.get(0).getName(), copiedNote.getName());
- assertEquals(notes.get(0).getParagraphs(), copiedNote.getParagraphs());
+ assertEquals(notes.size(), 2);
+ assertEquals(notes.get(1).id(), copiedNote.id());
+ assertEquals(notes.get(1).getName(), copiedNote.getName());
+ assertEquals(notes.get(1).getParagraphs(), copiedNote.getParagraphs());
// delete the notebook
- FileUtils.deleteDirectory(destDir);
+ for (String note : noteNames) {
+ File destDir = new File(notebookDir.getAbsolutePath() + "/" + note);
+ FileUtils.deleteDirectory(destDir);
+ }
// keep notebook in memory before reloading
notes = notebook.getAllNotes();
- assertEquals(notes.size(), 1);
+ assertEquals(notes.size(), 2);
// delete notebook from notebook list when reloadAllNotes() is called
notebook.reloadAllNotes(null);
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/a9d064c9/zeppelin-zengine/src/test/resources/2BQA35CJZ/note.json
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/test/resources/2BQA35CJZ/note.json b/zeppelin-zengine/src/test/resources/2BQA35CJZ/note.json
new file mode 100644
index 0000000..56f0033
--- /dev/null
+++ b/zeppelin-zengine/src/test/resources/2BQA35CJZ/note.json
@@ -0,0 +1,69 @@
+{
+ "angularObjects": {
+ "2BJB693M8:shared_process": []
+ },
+ "config": {
+ "looknfeel": "default"
+ },
+ "id": "2BQA35CJZ",
+ "info": {},
+ "lastReplName": {
+ "value": "phoenix"
+ },
+ "name": "Activity Dashboard",
+ "paragraphs": [
+ {
+ "$$hashKey": "object:266",
+ "config": {
+ "colWidth": 4,
+ "editorHide": true,
+ "editorMode": "ace/mode/scala",
+ "enabled": true,
+ "graph": {
+ "groups": [],
+ "height": 353,
+ "keys": [
+ {
+ "aggr": "sum",
+ "index": 0,
+ "name": "JOB_ID"
+ }
+ ],
+ "mode": "table",
+ "optionOpen": false,
+ "scatter": {
+ "xAxis": {
+ "aggr": "sum",
+ "index": 0,
+ "name": "JOB_ID"
+ }
+ },
+ "values": [
+ {
+ "aggr": "sum",
+ "index": 1,
+ "name": "TYPE"
+ }
+ ]
+ },
+ "title": true
+ },
+ "dateCreated": "2016-03-29T16:21:09-0700",
+ "dateFinished": "2016-07-02T02:11:16-0700",
+ "dateStarted": "2016-07-02T02:11:12-0700",
+ "dateUpdated": "2016-07-02T02:11:12-0700",
+ "errorMessage": "",
+ "id": "20160616-201120_1946745827",
+ "jobName": "paragraph_1466629190560_-1015742222",
+ "progressUpdateIntervalMs": 500,
+ "settings": {
+ "forms": {},
+ "params": {}
+ },
+ "status": "FINISHED",
+ "text": "SELECT job_id, \n \"type\" AS type, \n \"user\" AS user, \n ( duration_millis / 3600000 ) AS duration_hr \nFROM activity.job \nORDER BY duration_millis DESC \nLIMIT 10 ",
+ "title": "Top 10 Longest Running Jobs",
+ "user": "admin"
+ }
+ ]
+}
\ No newline at end of file