You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2011/02/28 20:11:42 UTC
svn commit: r1075490 - in /hbase/branches/0.90: CHANGES.txt
src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreLAB.java
Author: rawson
Date: Mon Feb 28 19:11:42 2011
New Revision: 1075490
URL: http://svn.apache.org/viewvc?rev=1075490&view=rev
Log:
HBASE-3572 memstore lab can leave half inited data structs
Modified:
hbase/branches/0.90/CHANGES.txt
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreLAB.java
Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1075490&r1=1075489&r2=1075490&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Mon Feb 28 19:11:42 2011
@@ -10,6 +10,7 @@ Release 0.90.2 - February 9th, 2011
HBASE-3566 writeToWAL is not serialized for increment operation
HBASE-3576 MasterAddressTracker is registered to ZooKeeperWatcher twice
HBASE-3561 OPTS arguments are duplicated
+ HBASE-3572 memstore lab can leave half inited data structs (bad!)
IMPROVEMENTS
HBASE-3542 MultiGet methods in Thrift
Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreLAB.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreLAB.java?rev=1075490&r1=1075489&r2=1075490&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreLAB.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreLAB.java Mon Feb 28 19:11:42 2011
@@ -154,6 +154,7 @@ public class MemStoreLAB {
private byte[] data;
private static final int UNINITIALIZED = -1;
+ private static final int OOM = -2;
/**
* Offset for the next allocation, or the sentinel value -1
* which implies that the chunk is still uninitialized.
@@ -182,7 +183,13 @@ public class MemStoreLAB {
*/
public void init() {
assert nextFreeOffset.get() == UNINITIALIZED;
- data = new byte[size];
+ try {
+ data = new byte[size];
+ } catch (OutOfMemoryError e) {
+ boolean failInit = nextFreeOffset.compareAndSet(UNINITIALIZED, OOM);
+ assert failInit; // should be true.
+ throw e;
+ }
// Mark that it's ready for use
boolean initted = nextFreeOffset.compareAndSet(
UNINITIALIZED, 0);
@@ -207,6 +214,10 @@ public class MemStoreLAB {
Thread.yield();
continue;
}
+ if (oldOffset == OOM) {
+ // doh we ran out of ram. return -1 to chuck this away.
+ return -1;
+ }
if (oldOffset + size > data.length) {
return -1; // alloc doesn't fit