You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2012/01/20 03:23:09 UTC
svn commit: r1233733 -
/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java
Author: nspiegelberg
Date: Fri Jan 20 02:23:09 2012
New Revision: 1233733
URL: http://svn.apache.org/viewvc?rev=1233733&view=rev
Log:
[HBASE-3421] Fetch one KV at a time at compaction (v2 of the fix)
Summary:
Compactions have been failing in production, bringing the regionserver
down with an OOM. The hypothesis is that there is a row with lots of KVs and
they are brought into memory all at once. This fix makes a compaction fetch one
KV at a time. Compared to the open-source fix
(https://issues.apache.org/jira/browse/HBASE-3421) we are setting the limit to
1
instead of a configurable number because there is no real batching benefit
(everything is already happening on the server side).
This is a second version of the fix, reverting the last one that changed
flush instead of compaction.
Test Plan: Unit tests. Push to dark launch.
Reviewers: kannan
Reviewed By: kannan
CC: gqchen, hbase-eng@lists, kannan
Differential Revision: https://phabricator.fb.com/D390382
Revert Plan: OK
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java?rev=1233733&r1=1233732&r2=1233733&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java Fri Jan 20 02:23:09 2012
@@ -590,7 +590,7 @@ public class Store extends SchemaConfigu
final List<KeyValue> kvs = new ArrayList<KeyValue>();
boolean hasMore;
do {
- hasMore = scanner.next(kvs, 1);
+ hasMore = scanner.next(kvs);
if (!kvs.isEmpty()) {
for (KeyValue kv : kvs) {
// If we know that this KV is going to be included always, then let us
@@ -1276,7 +1276,7 @@ public class Store extends SchemaConfigu
// since scanner.next() can return 'false' but still be delivering data,
// we have to use a do/while loop.
ArrayList<KeyValue> kvs = new ArrayList<KeyValue>();
- while (scanner.next(kvs)) {
+ while (scanner.next(kvs, 1)) {
if (writer == null && !kvs.isEmpty()) {
writer = createWriterInTmp(maxKeyCount, false);
}