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
8855670cd7
commit
c57acf28e7
|
@ -373,8 +373,16 @@ public class Scan extends Query {
|
|||
* next closest row after the specified row.
|
||||
* @param startRow row to start scanner at or after
|
||||
* @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;
|
||||
}
|
||||
|
@ -389,8 +397,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,6 +25,8 @@ import java.io.IOException;
|
|||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.hadoop.hbase.HConstants;
|
||||
import org.apache.hadoop.hbase.exceptions.IllegalArgumentIOException;
|
||||
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
|
||||
import org.apache.hadoop.hbase.security.visibility.Authorizations;
|
||||
|
@ -132,5 +134,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