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.
|
* next closest row after the specified row.
|
||||||
* @param startRow row to start scanner at or after
|
* @param startRow row to start scanner at or after
|
||||||
* @return this
|
* @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) {
|
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;
|
this.startRow = startRow;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -389,8 +397,16 @@ public class Scan extends Query {
|
||||||
* use {@link #setRowPrefixFilter(byte[])}.
|
* use {@link #setRowPrefixFilter(byte[])}.
|
||||||
* The 'trailing 0' will not yield the desired result.</p>
|
* The 'trailing 0' will not yield the desired result.</p>
|
||||||
* @return this
|
* @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) {
|
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;
|
this.stopRow = stopRow;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,8 @@ import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
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.ProtobufUtil;
|
||||||
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
|
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
|
||||||
import org.apache.hadoop.hbase.security.visibility.Authorizations;
|
import org.apache.hadoop.hbase.security.visibility.Authorizations;
|
||||||
|
@ -132,5 +134,31 @@ public class TestScan {
|
||||||
fail("should not throw exception");
|
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