From 2597ebfcdcb48fa0ca6175bf2f461782fd267181 Mon Sep 17 00:00:00 2001 From: Jungtaek Lim Date: Tue, 22 Dec 2015 14:34:58 +0900 Subject: [PATCH 1/3] ZEPPELIN-528 Add 'progress' to paragraph information when running * It would be hard to trap RUNNING state, so I can't add UT --- .../src/main/java/org/apache/zeppelin/scheduler/Job.java | 6 +++--- .../src/main/java/org/apache/zeppelin/notebook/Note.java | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/Job.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/Job.java index 4c8c70a4af6..7d90db4c191 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/Job.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/Job.java @@ -58,15 +58,15 @@ public static enum Status { FINISHED, ERROR, ABORT; - boolean isReady() { + public boolean isReady() { return this == READY; } - boolean isRunning() { + public boolean isRunning() { return this == RUNNING; } - boolean isPending() { + public boolean isPending() { return this == PENDING; } } diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java index 93dcec582ae..5aa27c42529 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java @@ -303,6 +303,9 @@ public List> generateParagraphsInfo (){ info.put("status", p.getStatus().toString()); info.put("started", p.getDateStarted().toString()); info.put("finished", p.getDateFinished().toString()); + if (p.getStatus().isRunning()) { + info.put("progress", String.valueOf(p.progress())); + } paragraphsInfo.add(info); } } From 31a8e88ff1c29ec3c308c81c0b18e5ed246e6e4c Mon Sep 17 00:00:00 2001 From: Jungtaek Lim Date: Wed, 23 Dec 2015 07:48:54 +0900 Subject: [PATCH 2/3] ZEPPELIN-528 Explain new field 'progress' to JSON output --- docs/rest-api/rest-notebook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rest-api/rest-notebook.md b/docs/rest-api/rest-notebook.md index 7393c5a2a87..b6f05facdd3 100644 --- a/docs/rest-api/rest-notebook.md +++ b/docs/rest-api/rest-notebook.md @@ -381,7 +381,7 @@ limitations under the License. sample JSON response -
{"status":"OK","body":[{"id":"20151121-212654_766735423","status":"FINISHED","finished":"Tue Nov 24 14:21:40 KST 2015","started":"Tue Nov 24 14:21:39 KST 2015"},{"id":"20151121-212657_730976687","status":"FINISHED","finished":"Tue Nov 24 14:21:40 KST 2015","started":"Tue Nov 24 14:21:40 KST 2015"}]}
+
{"status":"OK","body":[{"id":"20151121-212654_766735423","status":"FINISHED","finished":"Tue Nov 24 14:21:40 KST 2015","started":"Tue Nov 24 14:21:39 KST 2015"},{"progress":"1","id":"20151121-212657_730976687","status":"RUNNING","finished":"Tue Nov 24 14:21:35 KST 2015","started":"Tue Nov 24 14:21:40 KST 2015"}]}
From dc86b01cd8b7756bd7fa0314a51a58d00e9fd913 Mon Sep 17 00:00:00 2001 From: Jungtaek Lim Date: Thu, 24 Dec 2015 15:03:15 +0900 Subject: [PATCH 3/3] ZEPPELIN-528 Add UT to get notebook job (especially 'progress' field) --- .../zeppelin/rest/ZeppelinRestApiTest.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java index 2db30924027..c69b2239ed9 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java @@ -433,6 +433,59 @@ public void testNoteJobs() throws IOException, InterruptedException { ZeppelinServer.notebook.removeNote(note.getId()); } + @Test + public void testGetNotebookJob() throws IOException, InterruptedException { + LOG.info("testGetNotebookJob"); + // Create note to run test. + Note note = ZeppelinServer.notebook.createNote(); + assertNotNull("can't create new note", note); + note.setName("note for run test"); + Paragraph paragraph = note.addParagraph(); + + Map config = paragraph.getConfig(); + config.put("enabled", true); + paragraph.setConfig(config); + + paragraph.setText("%sh sleep 1"); + note.persist(); + String noteID = note.getId(); + + note.runAll(); + + // wait until paragraph gets started + while (!paragraph.getStatus().isRunning()) { + Thread.sleep(100); + } + + // assume that status of the paragraph is running + GetMethod get = httpGet("/notebook/job/" + noteID); + assertThat("test get notebook job: ", get, isAllowed()); + String responseBody = get.getResponseBodyAsString(); + get.releaseConnection(); + + LOG.info("test get notebook job: \n" + responseBody); + Map resp = gson.fromJson(responseBody, new TypeToken>() { + }.getType()); + + List> paragraphs = (List>) resp.get("body"); + assertEquals(1, paragraphs.size()); + assertTrue(paragraphs.get(0).containsKey("progress")); + int progress = Integer.parseInt((String) paragraphs.get(0).get("progress")); + assertTrue(progress >= 0 && progress <= 100); + + // wait until job is finished or timeout. + int timeout = 1; + while (!paragraph.isTerminated()) { + Thread.sleep(100); + if (timeout++ > 10) { + LOG.info("testGetNotebookJob timeout job."); + break; + } + } + + ZeppelinServer.notebook.removeNote(note.getId()); + } + @Test public void testRunParagraphWithParams() throws IOException, InterruptedException { LOG.info("testRunParagraphWithParams");