Index: src/contrib/hbase/src/java/org/apache/hadoop/hbase/HMemcache.java =================================================================== --- src/contrib/hbase/src/java/org/apache/hadoop/hbase/HMemcache.java (revision 571003) +++ src/contrib/hbase/src/java/org/apache/hadoop/hbase/HMemcache.java (working copy) @@ -58,9 +58,7 @@ /** * Constructor */ - public HMemcache() { - super(); - } + public HMemcache() {} /** represents the state of the memcache at a specified point in time */ static class Snapshot { @@ -320,7 +318,7 @@ // Generate list of iterators HStoreKey firstKey = new HStoreKey(firstRow); for(int i = 0; i < backingMaps.length; i++) { - keyIterators[i] = (firstRow.getLength() != 0)? + keyIterators[i] = (firstRow != null && firstRow.getLength() != 0)? backingMaps[i].tailMap(firstKey).keySet().iterator(): backingMaps[i].keySet().iterator(); while(getNext(i)) { Index: src/contrib/hbase/src/java/org/apache/hadoop/hbase/HRegion.java =================================================================== --- src/contrib/hbase/src/java/org/apache/hadoop/hbase/HRegion.java (revision 571003) +++ src/contrib/hbase/src/java/org/apache/hadoop/hbase/HRegion.java (working copy) @@ -208,6 +208,7 @@ final int memcacheFlushSize; final int blockingMemcacheSize; + protected final long threadWakeFrequency; private final HLocking lock = new HLocking(); private long desiredMaxFileSize; private final long maxSequenceId; @@ -244,6 +245,7 @@ this.conf = conf; this.regionInfo = regionInfo; this.memcache = new HMemcache(); + this.threadWakeFrequency = conf.getLong(THREAD_WAKE_FREQUENCY, 10 * 1000); // Declare the regionName. This is a unique string for the region, used to // build a unique filename. @@ -1055,18 +1057,20 @@ * the notify. */ private synchronized void checkResources() { - if (checkCommitsSinceFlush()) { - return; - } + boolean blocked = false; - LOG.warn("Blocking updates for '" + Thread.currentThread().getName() + - "': Memcache size " + - StringUtils.humanReadableInt(this.memcache.getSize()) + - " is >= than blocking " + - StringUtils.humanReadableInt(this.blockingMemcacheSize) + " size"); while (!checkCommitsSinceFlush()) { + if (!blocked) { + LOG.info("Blocking updates for '" + Thread.currentThread().getName() + + "': Memcache size " + + StringUtils.humanReadableInt(this.memcache.getSize()) + + " is >= than blocking " + + StringUtils.humanReadableInt(this.blockingMemcacheSize) + " size"); + } + + blocked = true; try { - wait(); + wait(threadWakeFrequency); } catch (InterruptedException e) { // continue; } @@ -1071,8 +1075,10 @@ // continue; } } - LOG.warn("Unblocking updates for '" + Thread.currentThread().getName() + - "'"); + if (blocked) { + LOG.info("Unblocking updates for '" + Thread.currentThread().getName() + + "'"); + } } /*