You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by zj...@apache.org on 2022/04/27 05:42:52 UTC
[zeppelin] branch master updated: [ZEPPELIN-5728] Absence of cancelNote method in Zeppelin Client Api (#4362)
This is an automated email from the ASF dual-hosted git repository.
zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git
The following commit(s) were added to refs/heads/master by this push:
new 8672d6ca23 [ZEPPELIN-5728] Absence of cancelNote method in Zeppelin Client Api (#4362)
8672d6ca23 is described below
commit 8672d6ca23f174179b2525f5fb6b550328418fc7
Author: Guanhua Li <gu...@foxmail.com>
AuthorDate: Wed Apr 27 13:42:44 2022 +0800
[ZEPPELIN-5728] Absence of cancelNote method in Zeppelin Client Api (#4362)
* [ZEPPELIN-5728] Absence of cancelNote method in Zeppelin Client Api
* add test
---
.../client/examples/ZeppelinClientExample.java | 2 +
.../org/apache/zeppelin/client/ZeppelinClient.java | 15 ++++++++
.../apache/zeppelin/rest/NotebookRestApiTest.java | 44 ++++++++++++++++++++++
3 files changed, 61 insertions(+)
diff --git a/zeppelin-client-examples/src/main/java/org/apache/zeppelin/client/examples/ZeppelinClientExample.java b/zeppelin-client-examples/src/main/java/org/apache/zeppelin/client/examples/ZeppelinClientExample.java
index 7254568912..6e6e043c52 100644
--- a/zeppelin-client-examples/src/main/java/org/apache/zeppelin/client/examples/ZeppelinClientExample.java
+++ b/zeppelin-client-examples/src/main/java/org/apache/zeppelin/client/examples/ZeppelinClientExample.java
@@ -56,6 +56,8 @@ public class ZeppelinClientExample {
"%python\nimport time\ntime.sleep(5)\nprint('done')");
zClient.submitParagraph(noteId, paragraphId2);
zClient.waitUtilParagraphRunning(noteId, paragraphId2);
+ // It's also ok here to call zClient.cancelNote(noteId);
+ // CancelNote() would cancel all paragraphs in the note.
zClient.cancelParagraph(noteId, paragraphId2);
paragraphResult = zClient.waitUtilParagraphFinish(noteId, paragraphId2);
System.out.println("Added new paragraph, submit it then cancel it");
diff --git a/zeppelin-client/src/main/java/org/apache/zeppelin/client/ZeppelinClient.java b/zeppelin-client/src/main/java/org/apache/zeppelin/client/ZeppelinClient.java
index 2f8f6bc527..bec349e0bc 100644
--- a/zeppelin-client/src/main/java/org/apache/zeppelin/client/ZeppelinClient.java
+++ b/zeppelin-client/src/main/java/org/apache/zeppelin/client/ZeppelinClient.java
@@ -502,6 +502,21 @@ public class ZeppelinClient {
return queryNoteResult(noteId);
}
+ /**
+ * Cancel a running note.
+ *
+ * @param noteId
+ * @throws Exception
+ */
+ public void cancelNote(String noteId) throws Exception {
+ HttpResponse<JsonNode> response = Unirest
+ .delete("/notebook/job/{noteId}")
+ .routeParam("noteId", noteId)
+ .asJson();
+ checkResponse(response);
+ JsonNode jsonNode = response.getBody();
+ checkJsonNodeStatus(jsonNode);
+ }
/**
* Import note with given note json content to the specified notePath.
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java
index 4744832847..95c167d1b5 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java
@@ -430,6 +430,50 @@ public class NotebookRestApiTest extends AbstractTestRestApi {
}
}
+ @Test
+ public void testCancelNoteJob() throws Exception {
+ LOG.info("Running testCancelNoteJob");
+ String note1Id = null;
+ Notebook notebook = TestUtils.getInstance(Notebook.class);
+ try {
+ note1Id = notebook.createNote("note1", anonymous);
+ // Add 3 paragraphs for the note.
+ List<Paragraph> paragraphs = notebook.processNote(note1Id,
+ note1 -> {
+ List<Paragraph> paragraphsList = new ArrayList<>();
+ for (int i = 0; i < 3; i++) {
+ Paragraph p1 = note1.addNewParagraph(AuthenticationInfo.ANONYMOUS);
+ p1.setText("%python\nimport time\ntime.sleep(10)\nprint('done')");
+ note1.run(p1.getId());
+ paragraphsList.add(p1);
+ }
+ return paragraphsList;
+ });
+ //The first paragraph is running, and the other two is pending.
+ paragraphs.get(0).waitUntilRunning();
+
+
+ // cancel running note
+ CloseableHttpResponse delete = httpDelete("/notebook/job/" + note1Id);
+ assertThat(delete, isAllowed());
+ Map<String, Object> resp = gson.fromJson(EntityUtils.toString(delete.getEntity(), StandardCharsets.UTF_8),
+ new TypeToken<Map<String, Object>>() {
+ }.getType());
+ assertEquals("OK", resp.get("status"));
+ delete.close();
+ for (Paragraph p : paragraphs) {
+ p.waitUntilFinished();
+ assertEquals(Job.Status.ABORT, p.getStatus());
+ }
+
+ } finally {
+ // cleanup
+ if (null != note1Id) {
+ notebook.removeNote(note1Id, anonymous);
+ }
+ }
+ }
+
@Test
public void testRunParagraphSynchronously() throws IOException {
LOG.info("Running testRunParagraphSynchronously");