Pārlūkot izejas kodu

HADOOP-1797 Fix NPEs in MetaScanner constructor

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@571333 13f79535-47bb-0310-9956-ffa450edef68
Jim Kellerman 18 gadi atpakaļ
vecāks
revīzija
bb5d45a665

+ 2 - 4
src/contrib/hbase/src/java/org/apache/hadoop/hbase/HMemcache.java

@@ -58,9 +58,7 @@ public class HMemcache {
   /**
    * 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 @@ public class HMemcache {
         // 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)) {

+ 18 - 12
src/contrib/hbase/src/java/org/apache/hadoop/hbase/HRegion.java

@@ -208,6 +208,7 @@ public class HRegion implements HConstants {
 
   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 @@ public class HRegion implements HConstants {
     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,24 +1057,28 @@ public class HRegion implements HConstants {
    * 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;
       }
     }
-    LOG.warn("Unblocking updates for '" + Thread.currentThread().getName() +
-      "'");
+    if (blocked) {
+      LOG.info("Unblocking updates for '" + Thread.currentThread().getName() +
+          "'");
+    }
   }
   
   /*
@@ -1635,4 +1641,4 @@ public class HRegion implements HConstants {
   public static Path getRegionDir(final Path dir, final Text regionName) {
     return new Path(dir, new Path(HREGIONDIR_PREFIX + regionName));
   }
-}
+}