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());
+ }
+ }
}