Author: liyin Date: Wed Apr 2 21:03:43 2014 New Revision: 1584183 URL: http://svn.apache.org/r1584183 Log: [HBASE-9930] Fixing RegionServer OOM Bug.
Author: manukranthk Summary: Serialization/Deserialization in the Get object missed the setFilter() function in the readFields. Test Plan: Unit tests Reviewers: gauravm, rshroff, elliott Reviewed By: gauravm CC: hbase-eng@, elliott Differential Revision: https://phabricator.fb.com/D1248185 Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Get.java hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Result.java hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Get.java URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Get.java?rev=1584183&r1=1584182&r2=1584183&view=diff ============================================================================== --- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Get.java (original) +++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Get.java Wed Apr 2 21:03:43 2014 @@ -299,14 +299,17 @@ public class Get extends OperationWithAt * @return this for invocation chaining */ public Get setFilter(Filter filter) { + if (filter == null) return this; try { this.tFilter = TFilter.getTFilter(filter); + } catch (Exception e) { + throw new RuntimeException(e); + } + try { + this.filter = this.tFilter.getFilter(); } catch (IOException e) { - LOG.error("Caught IOException in serializing filter." + - " Cannot continue."); throw new RuntimeException(e); } - this.filter = tFilter; return this; } @@ -561,6 +564,7 @@ public class Get extends OperationWithAt this.filter = (Filter)createForName(Bytes.toString(Bytes.readByteArray(in))); this.filter.readFields(in); } + setFilter(filter); this.tr = new TimeRange(); tr.readFields(in); int numFamilies = in.readInt(); Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Result.java URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Result.java?rev=1584183&r1=1584182&r2=1584183&view=diff ============================================================================== --- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Result.java (original) +++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/Result.java Wed Apr 2 21:03:43 2014 @@ -733,5 +733,13 @@ public class Result implements Writable, return true; } + public int getBytesSize() { + int ret = 0; + for (KeyValue kv : this.kvs) { + ret += kv.getLength(); + } + return ret; + } + } Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java?rev=1584183&r1=1584182&r2=1584183&view=diff ============================================================================== --- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java (original) +++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java Wed Apr 2 21:03:43 2014 @@ -67,6 +67,7 @@ import org.apache.hadoop.hbase.filter.Re import org.apache.hadoop.hbase.filter.RowFilter; import org.apache.hadoop.hbase.filter.SingleColumnValueFilter; import org.apache.hadoop.hbase.filter.WhileMatchFilter; +import org.apache.hadoop.hbase.filter.WritableByteArrayComparable; import org.apache.hadoop.hbase.io.hfile.BlockCache; import org.apache.hadoop.hbase.io.hfile.CacheConfig; import org.apache.hadoop.hbase.io.hfile.CacheTestHelper; @@ -4496,5 +4497,29 @@ public class TestFromClientSide { r = t.get(g); assertTrue(r.isEmpty()); } + + @Test + public void testGetWithFilter() throws IOException { + final byte [] TABLENAME = Bytes.toBytes("testGetWithFilter"); + HTable t = TEST_UTIL.createTable(TABLENAME, FAMILY); + byte[][] QUALIFIERS = new byte[][] {Bytes.toBytes("a"), + Bytes.toBytes("b") + }; + byte[] row = Bytes.toBytes("row"); + for (int j = 0; j < 2; j++) { + Put p = new Put(row); + p.add(FAMILY, QUALIFIERS[j], row); + t.put(p); + t.flushCommits(); + } + Filter f = new QualifierFilter(CompareFilter.CompareOp.EQUAL, + new BinaryComparator(QUALIFIERS[0])); + Get g = new Get(row); + g.setFilter(f); + Result result = t.get(g); + assertTrue(result.getKvs().size() == 1); + assertTrue(Bytes.equals(result.getKvs().iterator().next().getQualifier(), + QUALIFIERS[0])); + } }
