You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jg...@apache.org on 2009/09/17 03:25:05 UTC
svn commit: r816024 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
src/test/org/apache/hadoop/hbase/client/TestClient.java
Author: jgray
Date: Thu Sep 17 01:25:04 2009
New Revision: 816024
URL: http://svn.apache.org/viewvc?rev=816024&view=rev
Log:
HBASE-1847 Delete latest of a null qualifier when non-null qualifiers exist throws a RuntimeException
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestClient.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=816024&r1=816023&r2=816024&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Thu Sep 17 01:25:04 2009
@@ -30,6 +30,8 @@
HBASE-818 HFile code review and refinement (Schubert Zhang via Stack)
HBASE-1830 HbaseObjectWritable methods should allow null HBCs
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
HBASE-1760 Cleanup TODOs in HTable
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=816024&r1=816023&r2=816024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java Thu Sep 17 01:25:04 2009
@@ -1160,7 +1160,8 @@
NavigableSet<byte []> qualifiers =
new TreeSet<byte []>(Bytes.BYTES_COMPARATOR);
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);
if (result.isEmpty()) {
// Nothing to delete
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestClient.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestClient.java?rev=816024&r1=816023&r2=816024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestClient.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestClient.java Thu Sep 17 01:25:04 2009
@@ -1070,7 +1070,7 @@
result.size() == 9);
}
-
+
public void testDeletes() throws Exception {
byte [] TABLE = Bytes.toBytes("testDeletes");
@@ -1113,6 +1113,9 @@
put.add(FAMILIES[0], QUALIFIER, ts[4], VALUES[4]);
put.add(FAMILIES[0], QUALIFIER, ts[2], VALUES[2]);
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);
delete = new Delete(ROW);
@@ -1120,7 +1123,7 @@
ht.delete(delete);
get = new Get(ROW);
- get.addFamily(FAMILIES[0]);
+ get.addColumn(FAMILIES[0], QUALIFIER);
get.setMaxVersions(Integer.MAX_VALUE);
result = ht.get(get);
assertNResult(result, ROW, FAMILIES[0], QUALIFIER,
@@ -1129,7 +1132,7 @@
0, 2);
scan = new Scan(ROW);
- scan.addFamily(FAMILIES[0]);
+ scan.addColumn(FAMILIES[0], QUALIFIER);
scan.setMaxVersions(Integer.MAX_VALUE);
result = getSingleScanResult(ht, scan);
assertNResult(result, ROW, FAMILIES[0], QUALIFIER,
@@ -1137,6 +1140,16 @@
new byte[][] {VALUES[1], VALUES[2], VALUES[3]},
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
// But alas, this is not to be. We can't put them back in either case.