Repository: zeppelin
Updated Branches:
  refs/heads/branch-0.6 f7027a9c3 -> 72d397235


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 <[email protected]>

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

(cherry picked from commit a9d064c90f8830779b4339dcf60edff94cc228a8)
Signed-off-by: Lee moon soo <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/72d39723
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/72d39723
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/72d39723

Branch: refs/heads/branch-0.6
Commit: 72d397235a93493c267d79b7d9e122855f19b3e3
Parents: f7027a9
Author: Renjith Kamath <[email protected]>
Authored: Thu Jul 7 17:58:56 2016 +0530
Committer: Lee moon soo <[email protected]>
Committed: Fri Jul 8 07:59:07 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/72d39723/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/72d39723/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/72d39723/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 152e087..d256d35 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;
 
@@ -39,6 +40,7 @@ import 
org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars;
 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;
@@ -157,7 +159,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/72d39723/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 0305b21..a6be051 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
@@ -128,12 +128,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);
     }
@@ -146,17 +153,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/72d39723/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

Reply via email to