Author: apurtell
Date: Sat Jul 23 19:10:45 2011
New Revision: 1150192

URL: http://svn.apache.org/viewvc?rev=1150192&view=rev
Log:
HBASE-4105 Stargate does not support json and gzip in parallel

Modified:
    hbase/branches/0.90/CHANGES.txt
    
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/filter/GZIPResponseWrapper.java
    
hbase/branches/0.90/src/test/java/org/apache/hadoop/hbase/rest/TestGzipFilter.java

Modified: hbase/branches/0.90/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1150192&r1=1150191&r2=1150192&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Sat Jul 23 19:10:45 2011
@@ -83,6 +83,8 @@ Release 0.90.4 - Unreleased
    HBASE-4109  Hostname returned via reverse dns lookup contains trailing 
period if
                configured interface is not "default" (Shrijeet Paliwal)
    HBASE-4126  Make timeoutmonitor timeout after 30 minutes instead of 3
+   HBASE-4105  Stargate does not support Content-Type: application/json and
+               Content-Encoding: gzip in parallel
 
   IMPROVEMENT
    HBASE-3882  hbase-config.sh needs to be updated so it can auto-detects the

Modified: 
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/filter/GZIPResponseWrapper.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/filter/GZIPResponseWrapper.java?rev=1150192&r1=1150191&r2=1150192&view=diff
==============================================================================
--- 
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/filter/GZIPResponseWrapper.java
 (original)
+++ 
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/filter/GZIPResponseWrapper.java
 Sat Jul 23 19:10:45 2011
@@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletRes
 
 public class GZIPResponseWrapper extends HttpServletResponseWrapper {
   private HttpServletResponse response;
-  private GZIPResponseStream os;
+  private ServletOutputStream os;
   private PrintWriter writer;
   private boolean compress = true;
 
@@ -40,6 +40,7 @@ public class GZIPResponseWrapper extends
 
   @Override
   public void setStatus(int status) {
+    super.setStatus(status);
     if (status < 200 || status >= 300) {
       compress = false;
     }
@@ -76,8 +77,8 @@ public class GZIPResponseWrapper extends
     if (writer != null) {
       writer.flush();
     }
-    if (os != null) {
-      os.finish();
+    if (os != null && (os instanceof GZIPResponseStream)) {
+      ((GZIPResponseStream)os).finish();
     } else {
       getResponse().flushBuffer();
     }
@@ -86,8 +87,8 @@ public class GZIPResponseWrapper extends
   @Override
   public void reset() {
     super.reset();
-    if (os != null) {
-      os.resetBuffer();
+    if (os != null && (os instanceof GZIPResponseStream)) {
+      ((GZIPResponseStream)os).resetBuffer();
     }
     writer = null;
     os = null;
@@ -97,8 +98,8 @@ public class GZIPResponseWrapper extends
   @Override
   public void resetBuffer() {
     super.resetBuffer();
-    if (os != null) {
-      os.resetBuffer();
+    if (os != null && (os instanceof GZIPResponseStream)) {
+      ((GZIPResponseStream)os).resetBuffer();
     }
     writer = null;
     os = null;
@@ -124,14 +125,14 @@ public class GZIPResponseWrapper extends
 
   @Override
   public ServletOutputStream getOutputStream() throws IOException {
-    if (!response.isCommitted() && compress) {
-      if (os == null) {
-        os = new GZIPResponseStream(response);
+    if (os == null) {
+      if (!response.isCommitted() && compress) {
+        os = (ServletOutputStream)new GZIPResponseStream(response);
+      } else {
+        os = response.getOutputStream();
       }
-      return os;
-    } else {
-      return response.getOutputStream();
     }
+    return os;
   }
 
   @Override

Modified: 
hbase/branches/0.90/src/test/java/org/apache/hadoop/hbase/rest/TestGzipFilter.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.90/src/test/java/org/apache/hadoop/hbase/rest/TestGzipFilter.java?rev=1150192&r1=1150191&r2=1150192&view=diff
==============================================================================
--- 
hbase/branches/0.90/src/test/java/org/apache/hadoop/hbase/rest/TestGzipFilter.java
 (original)
+++ 
hbase/branches/0.90/src/test/java/org/apache/hadoop/hbase/rest/TestGzipFilter.java
 Sat Jul 23 19:10:45 2011
@@ -132,4 +132,21 @@ public class TestGzipFilter {
     contentEncoding = response.getHeader("Content-Encoding");
     assertTrue(contentEncoding == null || !contentEncoding.contains("gzip"));
   }
+
+  @Test
+  public void testScannerResultCodes() throws Exception {
+    Header[] headers = new Header[3];
+    headers[0] = new Header("Content-Type", Constants.MIMETYPE_XML);
+    headers[1] = new Header("Accept", Constants.MIMETYPE_JSON);
+    headers[2] = new Header("Accept-Encoding", "gzip");
+    Response response = client.post("/" + TABLE + "/scanner", headers,
+        "<Scanner/>".getBytes());
+    assertEquals(response.getCode(), 201);
+    String scannerUrl = response.getLocation();
+    assertNotNull(scannerUrl);
+    response = client.get(scannerUrl);
+    assertEquals(response.getCode(), 200);
+    response = client.get(scannerUrl);
+    assertEquals(response.getCode(), 204);
+  }
 }
\ No newline at end of file


Reply via email to