You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by an...@apache.org on 2016/11/05 05:03:15 UTC

zeppelin git commit: [ZEPPELIN-1627] - Fix latency on notebook save in ZeppelinHubNotebookRepo

Repository: zeppelin
Updated Branches:
  refs/heads/master dd20e7bf8 -> 4a1a2e48b


[ZEPPELIN-1627] - Fix latency on notebook save in ZeppelinHubNotebookRepo

### What is this PR for?
Fix latency issue when user save a notebook while using zeppelinhub notebook storage.

### What type of PR is it?
[Improvement]

### Jira issue
[ZEPPELIN-1627](https://issues.apache.org/jira/browse/ZEPPELIN-1627)

### Questions:
* Does the licenses files need update? No
* Is there breaking changes for older versions? No
* Does this needs documentation? No

Author: Anthony Corbacho <co...@gmail.com>

Closes #1591 from anthonycorbacho/feat/ZeppelinHubRepoSaveNoteShouldNotBlock and squashes the following commits:

c0b0875 [Anthony Corbacho] Remove unused variables
ae52108 [Anthony Corbacho] Fix latency on notebook save in ZeppelinHubNotebookRepo


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

Branch: refs/heads/master
Commit: 4a1a2e48bffa8b18ee10629d7283c7f77aff4cbb
Parents: dd20e7b
Author: Anthony Corbacho <co...@gmail.com>
Authored: Fri Nov 4 15:07:31 2016 +0900
Committer: Anthony Corbacho <co...@gmail.com>
Committed: Sat Nov 5 14:03:08 2016 +0900

----------------------------------------------------------------------
 .../rest/ZeppelinhubRestApiHandler.java         | 44 +++++++++++++-------
 1 file changed, 30 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4a1a2e48/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/rest/ZeppelinhubRestApiHandler.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/rest/ZeppelinhubRestApiHandler.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/rest/ZeppelinhubRestApiHandler.java
index 82159fc..63699e6 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/rest/ZeppelinhubRestApiHandler.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/zeppelinhub/rest/ZeppelinhubRestApiHandler.java
@@ -27,6 +27,7 @@ import org.apache.commons.lang.StringUtils;
 import org.eclipse.jetty.client.HttpClient;
 import org.eclipse.jetty.client.api.Request;
 import org.eclipse.jetty.client.api.Response;
+import org.eclipse.jetty.client.api.Result;
 import org.eclipse.jetty.client.util.InputStreamResponseListener;
 import org.eclipse.jetty.client.util.StringContentProvider;
 import org.eclipse.jetty.http.HttpMethod;
@@ -114,7 +115,7 @@ public class ZeppelinhubRestApiHandler {
   }
 
   public String asyncGet(String argument) throws IOException {
-    return sendToZeppelinHub(HttpMethod.GET, zepelinhubUrl + argument);
+    return sendToZeppelinHub(HttpMethod.GET, zepelinhubUrl + argument, StringUtils.EMPTY, true);
   }
   
   public String asyncPutWithResponseBody(String url, String json) throws IOException {
@@ -122,7 +123,7 @@ public class ZeppelinhubRestApiHandler {
       LOG.error("Empty note, cannot send it to zeppelinHub");
       throw new IOException("Cannot send emtpy note to zeppelinHub");
     }
-    return sendToZeppelinHub(HttpMethod.PUT, zepelinhubUrl + url, json);
+    return sendToZeppelinHub(HttpMethod.PUT, zepelinhubUrl + url, json, true);
   }
   
   public void asyncPut(String jsonNote) throws IOException {
@@ -130,7 +131,7 @@ public class ZeppelinhubRestApiHandler {
       LOG.error("Cannot save empty note/string to ZeppelinHub");
       return;
     }
-    sendToZeppelinHub(HttpMethod.PUT, zepelinhubUrl, jsonNote);
+    sendToZeppelinHub(HttpMethod.PUT, zepelinhubUrl, jsonNote, false);
   }
 
   public void asyncDel(String argument) throws IOException {
@@ -138,28 +139,41 @@ public class ZeppelinhubRestApiHandler {
       LOG.error("Cannot delete empty note from ZeppelinHub");
       return;
     }
-    sendToZeppelinHub(HttpMethod.DELETE, zepelinhubUrl + argument);
+    sendToZeppelinHub(HttpMethod.DELETE, zepelinhubUrl + argument, StringUtils.EMPTY, false);
   }
   
-  private String sendToZeppelinHub(HttpMethod method, String url) throws IOException {
-    return sendToZeppelinHub(method, url, StringUtils.EMPTY);
+  private String sendToZeppelinHub(HttpMethod method, String url, String json, boolean withResponse)
+      throws IOException {
+    Request request = client.newRequest(url).method(method).header(ZEPPELIN_TOKEN_HEADER, token);
+    if ((method.equals(HttpMethod.PUT) || method.equals(HttpMethod.POST))
+        && !StringUtils.isBlank(json)) {
+      request.content(new StringContentProvider(json, "UTF-8"), "application/json;charset=UTF-8");
+    }
+    return withResponse ?
+        sendToZeppelinHub(request) : sendToZeppelinHubWithoutResponseBody(request);
+  }
+  
+  private String sendToZeppelinHubWithoutResponseBody(Request request) throws IOException {
+    request.send(new Response.CompleteListener() {
+      @Override
+      public void onComplete(Result result) {
+        Request req = result.getRequest();
+        LOG.info("ZeppelinHub {} {} returned with status {}: {}", req.getMethod(),
+            req.getURI(), result.getResponse().getStatus(), result.getResponse().getReason());
+      }
+    });
+    return StringUtils.EMPTY;
   }
   
-  private String sendToZeppelinHub(HttpMethod method, String url, String json) throws IOException {
+  private String sendToZeppelinHub(final Request request) throws IOException {
     InputStreamResponseListener listener = new InputStreamResponseListener();
     Response response;
     String data;
-
-    Request request = client.newRequest(url).method(method).header(ZEPPELIN_TOKEN_HEADER, token);
-    if ((method.equals(HttpMethod.PUT) || method.equals(HttpMethod.POST)) &&
-        !StringUtils.isBlank(json)) {
-      request.content(new StringContentProvider(json, "UTF-8"), "application/json;charset=UTF-8");
-    }
     request.send(listener);
-
     try {
       response = listener.get(30, TimeUnit.SECONDS);
     } catch (InterruptedException | TimeoutException | ExecutionException e) {
+      String method = request.getMethod();
       LOG.error("Cannot perform {} request to ZeppelinHub", method, e);
       throw new IOException("Cannot perform " + method + " request to ZeppelinHub", e);
     }
@@ -170,6 +184,8 @@ public class ZeppelinhubRestApiHandler {
         data = IOUtils.toString(responseContent, "UTF-8");
       }
     } else {
+      String method = response.getRequest().getMethod();
+      String url = response.getRequest().getURI().toString();
       LOG.error("ZeppelinHub {} {} returned with status {} ", method, url, code);
       throw new IOException("Cannot perform " + method + " request to ZeppelinHub");
     }