You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2013/10/21 22:31:47 UTC
svn commit: r1534365 - in /hbase/branches/0.94/src:
main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
Author: larsh
Date: Mon Oct 21 20:31:47 2013
New Revision: 1534365
URL: http://svn.apache.org/r1534365
Log:
HBASE-9783 o.a.h.h.r.HRegion.mutateRow() with non-existent CF cause NPE (Aditya Kishore)
Modified:
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=1534365&r1=1534364&r2=1534365&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java Mon Oct 21 20:31:47 2013
@@ -4923,6 +4923,7 @@ public class HRegion implements HeapSize
long txid = 0;
boolean walSyncSuccessful = false;
+ boolean memstoreUpdated = false;
boolean locked = false;
// 2. acquire the row lock(s)
@@ -4982,6 +4983,7 @@ public class HRegion implements HeapSize
// 7. apply to memstore
long addedSize = 0;
+ memstoreUpdated = true;
for (Mutation m : mutations) {
addedSize += applyFamilyMapToMemstore(m.getFamilyMap(), w);
}
@@ -5021,7 +5023,7 @@ public class HRegion implements HeapSize
}
} finally {
// 12. clean up if needed
- if (!walSyncSuccessful) {
+ if (memstoreUpdated && !walSyncSuccessful) {
int kvsRolledback = 0;
for (Mutation m : mutations) {
for (Map.Entry<byte[], List<KeyValue>> e : m.getFamilyMap()
Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java?rev=1534365&r1=1534364&r2=1534365&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java Mon Oct 21 20:31:47 2013
@@ -63,6 +63,7 @@ import org.apache.hadoop.hbase.client.HT
import org.apache.hadoop.hbase.client.Increment;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.RowMutations;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.ColumnCountGetFilter;
@@ -1013,6 +1014,26 @@ public class TestHRegion extends HBaseTe
}
}
+ public void testmutateRowsWithLocks_wrongCF() throws IOException {
+ this.region = initHRegion(tableName, this.getName(), conf, fam1, fam2);
+ try {
+ Put put = new Put(row2);
+ put.add(fam3, qual1, value1);
+ RowMutations rm = new RowMutations(row2);
+ rm.add(put);
+ try {
+ region.mutateRow(rm);
+ fail();
+ } catch (DoNotRetryIOException expected) {
+ // expected exception.
+ LOG.debug("Caught expected exception: " + expected.getMessage());
+ }
+ } finally {
+ HRegion.closeHRegion(this.region);
+ this.region = null;
+ }
+ }
+
public void testCheckAndDelete_ThatDeleteWasWritten() throws IOException{
byte [] tableName = Bytes.toBytes("testtable");
byte [] row1 = Bytes.toBytes("row1");