KYLIN-2814 code cleanup in RestClient

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2e4474e4
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2e4474e4
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2e4474e4

Branch: refs/heads/2622-2764
Commit: 2e4474e46cb563096635d0b749ee023e0fcb66d0
Parents: ae311b1
Author: Li Yang <liy...@apache.org>
Authored: Sun Sep 3 18:38:15 2017 +0800
Committer: Li Yang <liy...@apache.org>
Committed: Sun Sep 3 18:38:15 2017 +0800

----------------------------------------------------------------------
 .../kylin/common/restclient/RestClient.java     | 144 ++++++++++++-------
 1 file changed, 90 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/2e4474e4/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
----------------------------------------------------------------------
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
index b0ca5f7..95aa626 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
@@ -27,7 +27,8 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
+import javax.xml.bind.DatatypeConverter;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.auth.AuthScope;
@@ -45,20 +46,17 @@ import org.apache.http.params.HttpConnectionParams;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.EntityUtils;
 import org.apache.kylin.common.util.JsonUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import javax.xml.bind.DatatypeConverter;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 /**
  * @author yangli9
  */
 public class RestClient {
 
-    protected String host;
-    protected int port;
-    protected String baseUrl;
-    protected String userName;
-    protected String password;
-    protected DefaultHttpClient client;
+    private static final Logger logger = 
LoggerFactory.getLogger(RestClient.class);
 
     protected static Pattern fullRestPattern = 
Pattern.compile("(?:([^:]+)[:]([^@]+)[@])?([^:]+)(?:[:](\\d+))?");
 
@@ -74,9 +72,17 @@ public class RestClient {
         return m.matches();
     }
 
+    // 
============================================================================
+
+    protected String host;
+    protected int port;
+    protected String baseUrl;
+    protected String userName;
+    protected String password;
+    protected DefaultHttpClient client;
+
     /**
-     * @param uri
-     *            "user:pwd@host:port"
+     * @param uri "user:pwd@host:port"
      */
     public RestClient(String uri) {
         Matcher m = fullRestPattern.matcher(uri);
@@ -127,32 +133,30 @@ public class RestClient {
 
             if (response.getStatusLine().getStatusCode() != 200) {
                 String msg = EntityUtils.toString(response.getEntity());
-                throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode() + " with cache wipe url " + url + "\n" 
+ msg);
+                throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode()
+                        + " with cache wipe url " + url + "\n" + msg);
             }
-        } catch (Exception ex) {
-            throw new IOException(ex);
         } finally {
-            if (response != null) {
-                EntityUtils.consume(response.getEntity());
-            }
-            request.releaseConnection();
+            cleanup(request, response);
         }
     }
 
     public String getKylinProperties() throws IOException {
         String url = baseUrl + "/admin/config";
         HttpGet request = new HttpGet(url);
+        HttpResponse response = null;
         try {
-            HttpResponse response = client.execute(request);
+            response = client.execute(request);
             String msg = EntityUtils.toString(response.getEntity());
             Map<String, String> map = JsonUtil.readValueAsMap(msg);
             msg = map.get("config");
 
             if (response.getStatusLine().getStatusCode() != 200)
-                throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode() + " with cache wipe url " + url + "\n" 
+ msg);
+                throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode()
+                        + " with cache wipe url " + url + "\n" + msg);
             return msg;
         } finally {
-            request.releaseConnection();
+            cleanup(request, response);
         }
     }
 
@@ -167,18 +171,24 @@ public class RestClient {
     public boolean buildCube(String cubeName, long startTime, long endTime, 
String buildType) throws Exception {
         String url = baseUrl + "/cubes/" + cubeName + "/build";
         HttpPut put = newPut(url);
-        HashMap<String, String> paraMap = new HashMap<String, String>();
-        paraMap.put("startTime", startTime + "");
-        paraMap.put("endTime", endTime + "");
-        paraMap.put("buildType", buildType);
-        String jsonMsg = new ObjectMapper().writeValueAsString(paraMap);
-        put.setEntity(new StringEntity(jsonMsg, "UTF-8"));
-        HttpResponse response = client.execute(put);
-        String result = getContent(response);
-        if (response.getStatusLine().getStatusCode() != 200) {
-            throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode() + " with build cube url " + url + "\n" 
+ jsonMsg);
-        } else {
-            return true;
+        HttpResponse response = null;
+        try {
+            HashMap<String, String> paraMap = new HashMap<String, String>();
+            paraMap.put("startTime", startTime + "");
+            paraMap.put("endTime", endTime + "");
+            paraMap.put("buildType", buildType);
+            String jsonMsg = new ObjectMapper().writeValueAsString(paraMap);
+            put.setEntity(new StringEntity(jsonMsg, "UTF-8"));
+            response = client.execute(put);
+            getContent(response);
+            if (response.getStatusLine().getStatusCode() != 200) {
+                throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode()
+                        + " with build cube url " + url + "\n" + jsonMsg);
+            } else {
+                return true;
+            }
+        } finally {
+            cleanup(put, response);
         }
     }
 
@@ -197,22 +207,33 @@ public class RestClient {
     public HashMap getCube(String cubeName) throws Exception {
         String url = baseUrl + "/cubes/" + cubeName;
         HttpGet get = newGet(url);
-        get.setURI(new URI(url));
-        HttpResponse response = client.execute(get);
-        return dealResponse(response);
+        HttpResponse response = null;
+        try {
+            get.setURI(new URI(url));
+            response = client.execute(get);
+            return dealResponse(response);
+        } finally {
+            cleanup(get, response);
+        }
     }
 
     private boolean changeCubeStatus(String url) throws Exception {
         HttpPut put = newPut(url);
-        HashMap<String, String> paraMap = new HashMap<String, String>();
-        String jsonMsg = new ObjectMapper().writeValueAsString(paraMap);
-        put.setEntity(new StringEntity(jsonMsg, "UTF-8"));
-        HttpResponse response = client.execute(put);
-        String result = getContent(response);
-        if (response.getStatusLine().getStatusCode() != 200) {
-            throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode() + " with url " + url + "\n" + jsonMsg);
-        } else {
-            return true;
+        HttpResponse response = null;
+        try {
+            HashMap<String, String> paraMap = new HashMap<String, String>();
+            String jsonMsg = new ObjectMapper().writeValueAsString(paraMap);
+            put.setEntity(new StringEntity(jsonMsg, "UTF-8"));
+            response = client.execute(put);
+            getContent(response);
+            if (response.getStatusLine().getStatusCode() != 200) {
+                throw new IOException("Invalid response " + 
response.getStatusLine().getStatusCode() + " with url "
+                        + url + "\n" + jsonMsg);
+            } else {
+                return true;
+            }
+        } finally {
+            cleanup(put, response);
         }
     }
 
@@ -265,16 +286,21 @@ public class RestClient {
     private boolean setCache(boolean flag) throws IOException {
         String url = baseUrl + "/admin/config";
         HttpPut put = newPut(url);
-        HashMap<String, String> paraMap = new HashMap<String, String>();
-        paraMap.put("key", "kylin.query.cache-enabled");
-        paraMap.put("value", flag + "");
-        put.setEntity(new StringEntity(new 
ObjectMapper().writeValueAsString(paraMap), "UTF-8"));
-        HttpResponse response = client.execute(put);
-        EntityUtils.consume(response.getEntity());
-        if (response.getStatusLine().getStatusCode() != 200) {
-            return false;
-        } else {
-            return true;
+        HttpResponse response = null;
+        try {
+            HashMap<String, String> paraMap = new HashMap<String, String>();
+            paraMap.put("key", "kylin.query.cache-enabled");
+            paraMap.put("value", flag + "");
+            put.setEntity(new StringEntity(new 
ObjectMapper().writeValueAsString(paraMap), "UTF-8"));
+            response = client.execute(put);
+            EntityUtils.consume(response.getEntity());
+            if (response.getStatusLine().getStatusCode() != 200) {
+                return false;
+            } else {
+                return true;
+            }
+        } finally {
+            cleanup(put, response);
         }
     }
 
@@ -296,4 +322,14 @@ public class RestClient {
         return result.toString();
     }
 
+    private void cleanup(HttpRequestBase request, HttpResponse response) {
+        try {
+            if (response != null)
+                EntityUtils.consume(response.getEntity());
+        } catch (Exception ex) {
+            logger.error("Error during HTTP connection cleanup", ex);
+        }
+        request.releaseConnection();
+    }
+
 }

Reply via email to