HBASE-16540 Adding checks in Scanner's setStartRow and setStopRow for invalid row key sizes.
Signed-off-by: Gary Helmling <garyh@apache.org>
This commit is contained in:
parent
8ad14bac67
commit
7028a0d889
|
@ -362,8 +362,16 @@ public class Scan extends Query {
|
|||
* @param startRow row to start scan on (inclusive)
|
||||
* Note: In order to make startRow exclusive add a trailing 0 byte
|
||||
* @return this
|
||||
* @throws IllegalArgumentException if startRow does not meet criteria
|
||||
* for a row key (when length exceeds {@link HConstants#MAX_ROW_LENGTH})
|
||||
*/
|
||||
public Scan setStartRow(byte [] startRow) {
|
||||
if (Bytes.len(startRow) > HConstants.MAX_ROW_LENGTH) {
|
||||
throw new IllegalArgumentException(
|
||||
"startRow's length must be less than or equal to " +
|
||||
HConstants.MAX_ROW_LENGTH + " to meet the criteria" +
|
||||
" for a row key.");
|
||||
}
|
||||
this.startRow = startRow;
|
||||
return this;
|
||||
}
|
||||
|
@ -376,8 +384,16 @@ public class Scan extends Query {
|
|||
* use {@link #setRowPrefixFilter(byte[])}.
|
||||
* The 'trailing 0' will not yield the desired result.</p>
|
||||
* @return this
|
||||
* @throws IllegalArgumentException if stopRow does not meet criteria
|
||||
* for a row key (when length exceeds {@link HConstants#MAX_ROW_LENGTH})
|
||||
*/
|
||||
public Scan setStopRow(byte [] stopRow) {
|
||||
if (Bytes.len(stopRow) > HConstants.MAX_ROW_LENGTH) {
|
||||
throw new IllegalArgumentException(
|
||||
"stopRow's length must be less than or equal to " +
|
||||
HConstants.MAX_ROW_LENGTH + " to meet the criteria" +
|
||||
" for a row key.");
|
||||
}
|
||||
this.stopRow = stopRow;
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -25,10 +25,11 @@ import java.io.IOException;
|
|||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.hadoop.hbase.testclassification.SmallTests;
|
||||
import org.apache.hadoop.hbase.HConstants;
|
||||
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
|
||||
import org.apache.hadoop.hbase.security.visibility.Authorizations;
|
||||
import org.apache.hadoop.hbase.testclassification.SmallTests;
|
||||
import org.apache.hadoop.hbase.util.Bytes;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
@ -131,5 +132,31 @@ public class TestScan {
|
|||
fail("should not throw exception");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetStartRowAndSetStopRow() {
|
||||
Scan scan = new Scan();
|
||||
scan.setStartRow(null);
|
||||
scan.setStartRow(new byte[1]);
|
||||
scan.setStartRow(new byte[HConstants.MAX_ROW_LENGTH]);
|
||||
try {
|
||||
scan.setStartRow(new byte[HConstants.MAX_ROW_LENGTH+1]);
|
||||
fail("should've thrown exception");
|
||||
} catch (IllegalArgumentException iae) {
|
||||
} catch (Exception e) {
|
||||
fail("expected IllegalArgumentException to be thrown");
|
||||
}
|
||||
|
||||
scan.setStopRow(null);
|
||||
scan.setStopRow(new byte[1]);
|
||||
scan.setStopRow(new byte[HConstants.MAX_ROW_LENGTH]);
|
||||
try {
|
||||
scan.setStopRow(new byte[HConstants.MAX_ROW_LENGTH+1]);
|
||||
fail("should've thrown exception");
|
||||
} catch (IllegalArgumentException iae) {
|
||||
} catch (Exception e) {
|
||||
fail("expected IllegalArgumentException to be thrown");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue