HBASE-1847 Delete latest of a null qualifier when non-null qualifiers exist throws a RuntimeException

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@816024 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Gray 2009-09-17 01:25:04 +00:00
parent b59e375a5c
commit e50c404aca
3 changed files with 20 additions and 4 deletions

View File

@ -30,6 +30,8 @@ Release 0.21.0 - Unreleased
HBASE-818 HFile code review and refinement (Schubert Zhang via Stack) HBASE-818 HFile code review and refinement (Schubert Zhang via Stack)
HBASE-1830 HbaseObjectWritable methods should allow null HBCs HBASE-1830 HbaseObjectWritable methods should allow null HBCs
for when Writable is not Configurable (Stack via jgray) for when Writable is not Configurable (Stack via jgray)
HBASE-1847 Delete latest of a null qualifier when non-null qualifiers
exist throws a RuntimeException
IMPROVEMENTS IMPROVEMENTS
HBASE-1760 Cleanup TODOs in HTable HBASE-1760 Cleanup TODOs in HTable

View File

@ -1160,7 +1160,8 @@ public class HRegion implements HConstants, HeapSize { // , Writable{
NavigableSet<byte []> qualifiers = NavigableSet<byte []> qualifiers =
new TreeSet<byte []>(Bytes.BYTES_COMPARATOR); new TreeSet<byte []>(Bytes.BYTES_COMPARATOR);
byte [] q = kv.getQualifier(); byte [] q = kv.getQualifier();
if (q != null && q.length > 0) qualifiers.add(kv.getQualifier()); if(q == null) q = HConstants.EMPTY_BYTE_ARRAY;
qualifiers.add(q);
get(store, g, qualifiers, result); get(store, g, qualifiers, result);
if (result.isEmpty()) { if (result.isEmpty()) {
// Nothing to delete // Nothing to delete

View File

@ -1113,6 +1113,9 @@ public class TestClient extends HBaseClusterTestCase {
put.add(FAMILIES[0], QUALIFIER, ts[4], VALUES[4]); put.add(FAMILIES[0], QUALIFIER, ts[4], VALUES[4]);
put.add(FAMILIES[0], QUALIFIER, ts[2], VALUES[2]); put.add(FAMILIES[0], QUALIFIER, ts[2], VALUES[2]);
put.add(FAMILIES[0], QUALIFIER, ts[3], VALUES[3]); put.add(FAMILIES[0], QUALIFIER, ts[3], VALUES[3]);
put.add(FAMILIES[0], null, ts[4], VALUES[4]);
put.add(FAMILIES[0], null, ts[2], VALUES[2]);
put.add(FAMILIES[0], null, ts[3], VALUES[3]);
ht.put(put); ht.put(put);
delete = new Delete(ROW); delete = new Delete(ROW);
@ -1120,7 +1123,7 @@ public class TestClient extends HBaseClusterTestCase {
ht.delete(delete); ht.delete(delete);
get = new Get(ROW); get = new Get(ROW);
get.addFamily(FAMILIES[0]); get.addColumn(FAMILIES[0], QUALIFIER);
get.setMaxVersions(Integer.MAX_VALUE); get.setMaxVersions(Integer.MAX_VALUE);
result = ht.get(get); result = ht.get(get);
assertNResult(result, ROW, FAMILIES[0], QUALIFIER, assertNResult(result, ROW, FAMILIES[0], QUALIFIER,
@ -1129,7 +1132,7 @@ public class TestClient extends HBaseClusterTestCase {
0, 2); 0, 2);
scan = new Scan(ROW); scan = new Scan(ROW);
scan.addFamily(FAMILIES[0]); scan.addColumn(FAMILIES[0], QUALIFIER);
scan.setMaxVersions(Integer.MAX_VALUE); scan.setMaxVersions(Integer.MAX_VALUE);
result = getSingleScanResult(ht, scan); result = getSingleScanResult(ht, scan);
assertNResult(result, ROW, FAMILIES[0], QUALIFIER, assertNResult(result, ROW, FAMILIES[0], QUALIFIER,
@ -1137,6 +1140,16 @@ public class TestClient extends HBaseClusterTestCase {
new byte[][] {VALUES[1], VALUES[2], VALUES[3]}, new byte[][] {VALUES[1], VALUES[2], VALUES[3]},
0, 2); 0, 2);
// Test for HBASE-1847
delete = new Delete(ROW);
delete.deleteColumn(FAMILIES[0], null);
ht.delete(delete);
// Cleanup null qualifier
delete = new Delete(ROW);
delete.deleteColumns(FAMILIES[0], null);
ht.delete(delete);
// Expected client behavior might be that you can re-put deleted values // Expected client behavior might be that you can re-put deleted values
// But alas, this is not to be. We can't put them back in either case. // But alas, this is not to be. We can't put them back in either case.