You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2011/07/23 21:50:20 UTC

svn commit: r1150206 - in /hbase/trunk: CHANGES.txt src/main/java/org/apache/hadoop/hbase/rest/RowSpec.java src/test/java/org/apache/hadoop/hbase/rest/TestRowResource.java

Author: apurtell
Date: Sat Jul 23 19:50:19 2011
New Revision: 1150206

URL: http://svn.apache.org/viewvc?rev=1150206&view=rev
Log:
HBASE-4116 [stargate] StringIndexOutOfBoundsException in row spec parse

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/rest/RowSpec.java
    hbase/trunk/src/test/java/org/apache/hadoop/hbase/rest/TestRowResource.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1150206&r1=1150205&r2=1150206&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Sat Jul 23 19:50:19 2011
@@ -171,6 +171,8 @@ Release 0.91.0 - Unreleased
    HBASE-4127  Don't modify table's name away in HBaseAdmin
    HBASE-4105  Stargate does not support Content-Type: application/json and
                Content-Encoding: gzip in parallel
+   HBASE-4116  [stargate] StringIndexOutOfBoundsException in row spec parse
+               (Allan Yan)
 
   IMPROVEMENTS
    HBASE-3290  Max Compaction Size (Nicolas Spiegelberg via Stack)  

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/rest/RowSpec.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/rest/RowSpec.java?rev=1150206&r1=1150205&r2=1150206&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/rest/RowSpec.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/rest/RowSpec.java Sat Jul 23 19:50:19 2011
@@ -70,15 +70,15 @@ public class RowSpec {
         i++;
       }
       i++;
-      startRow = sb.toString();
+      String row = startRow = sb.toString();
       int idx = startRow.indexOf(',');
       if (idx != -1) {
-        startRow = URLDecoder.decode(startRow.substring(0, idx),
+        startRow = URLDecoder.decode(row.substring(0, idx),
           HConstants.UTF8_ENCODING);
-        endRow = URLDecoder.decode(startRow.substring(idx + 1),
+        endRow = URLDecoder.decode(row.substring(idx + 1),
           HConstants.UTF8_ENCODING);
       } else {
-        startRow = URLDecoder.decode(startRow, HConstants.UTF8_ENCODING);
+        startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);
       }
     } catch (IndexOutOfBoundsException e) {
       throw new IllegalArgumentException(e);

Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/rest/TestRowResource.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/rest/TestRowResource.java?rev=1150206&r1=1150205&r2=1150206&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/rest/TestRowResource.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/rest/TestRowResource.java Sat Jul 23 19:50:19 2011
@@ -46,6 +46,7 @@ import org.apache.hadoop.hbase.rest.mode
 import org.apache.hadoop.hbase.util.Bytes;
 
 import static org.junit.Assert.*;
+
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -141,6 +142,20 @@ public class TestRowResource {
     return getValueXML(path.toString());
   }
 
+  private static Response getValueXML(String table, String startRow,
+      String endRow, String column) throws IOException {
+    StringBuilder path = new StringBuilder();
+    path.append('/');
+    path.append(table);
+    path.append('/');
+    path.append(startRow);
+    path.append(",");
+    path.append(endRow);
+    path.append('/');
+    path.append(column);
+    return getValueXML(path.toString());
+  }
+
   private static Response getValueXML(String url) throws IOException {
     Response response = client.get(url, Constants.MIMETYPE_XML);
     return response;
@@ -483,4 +498,32 @@ public class TestRowResource {
     response = deleteRow(TABLE, ROW_2);
     assertEquals(response.getCode(), 200);
   }
+
+  @Test
+  public void testStartEndRowGetPutXML() throws IOException, JAXBException {
+    String[] rows = { ROW_1, ROW_2, ROW_3 };
+    String[] values = { VALUE_1, VALUE_2, VALUE_3 }; 
+    Response response = null;
+    for (int i = 0; i < rows.length; i++) {
+      response = putValueXML(TABLE, rows[i], COLUMN_1, values[i]);
+      assertEquals(200, response.getCode());
+      checkValueXML(TABLE, rows[i], COLUMN_1, values[i]);
+    }
+    response = getValueXML(TABLE, rows[0], rows[2], COLUMN_1);
+    assertEquals(200, response.getCode());
+    CellSetModel cellSet = (CellSetModel)
+      unmarshaller.unmarshal(new ByteArrayInputStream(response.getBody()));
+    assertEquals(2, cellSet.getRows().size());
+    for (int i = 0; i < cellSet.getRows().size()-1; i++) {
+      RowModel rowModel = cellSet.getRows().get(i);
+      for (CellModel cell: rowModel.getCells()) {
+        assertEquals(COLUMN_1, Bytes.toString(cell.getColumn()));
+        assertEquals(values[i], Bytes.toString(cell.getValue()));
+      }   
+    }
+    for (String row : rows) {
+      response = deleteRow(TABLE, row);
+      assertEquals(200, response.getCode());
+    }
+  }
 }