You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2011/10/25 01:13:01 UTC

svn commit: r1188439 - in /hbase/trunk: CHANGES.txt src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java

Author: stack
Date: Mon Oct 24 23:13:01 2011
New Revision: 1188439

URL: http://svn.apache.org/viewvc?rev=1188439&view=rev
Log:
HBASE-4578 NPE when altering a table that has moving regions

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1188439&r1=1188438&r2=1188439&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon Oct 24 23:13:01 2011
@@ -394,6 +394,7 @@ Release 0.92.0 - Unreleased
    HBASE-4647  RAT finds about 40 files missing licenses
    HBASE-4642  Add Apache License Header
    HBASE-4591  TTL for old HLogs should be calculated from last modification time.
+   HBASE-4578  NPE when altering a table that has moving regions (gaojinchao)
 
   TESTS
    HBASE-4450  test for number of blocks read: to serve as baseline for expected

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java?rev=1188439&r1=1188438&r2=1188439&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java Mon Oct 24 23:13:01 2011
@@ -20,6 +20,7 @@
 package org.apache.hadoop.hbase.master.handler;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.NavigableMap;
@@ -86,7 +87,6 @@ public abstract class TableEventHandler 
       if (eventType.isOnlineSchemaChangeSupported() && this.masterServices.
           getAssignmentManager().getZKTable().
           isEnabledTable(Bytes.toString(tableName))) {
-        this.masterServices.getAssignmentManager().setRegionsToReopen(hris);
         if (reOpenAllRegions(hris)) {
           LOG.info("Completed table operation " + eventType + " on table " +
               Bytes.toString(tableName));
@@ -108,17 +108,27 @@ public abstract class TableEventHandler 
     TreeMap<ServerName, List<HRegionInfo>> serverToRegions = Maps
         .newTreeMap();
     NavigableMap<HRegionInfo, ServerName> hriHserverMapping = table.getRegionLocations();
-
+    List<HRegionInfo> reRegions = new ArrayList<HRegionInfo>();
     for (HRegionInfo hri : regions) {
       ServerName rsLocation = hriHserverMapping.get(hri);
+
+      // Skip the offlined split parent region
+      // See HBASE-4578 for more information.
+      if (null == rsLocation) {
+        LOG.info("Skip " + hri);
+        continue;
+      }
       if (!serverToRegions.containsKey(rsLocation)) {
         LinkedList<HRegionInfo> hriList = Lists.newLinkedList();
         serverToRegions.put(rsLocation, hriList);
       }
+      reRegions.add(hri);
       serverToRegions.get(rsLocation).add(hri);
     }
-    LOG.info("Reopening " + regions.size() + " regions on "
+    
+    LOG.info("Reopening " + reRegions.size() + " regions on "
         + serverToRegions.size() + " region servers.");
+    this.masterServices.getAssignmentManager().setRegionsToReopen(reRegions);
     BulkReOpen bulkReopen = new BulkReOpen(this.server, serverToRegions,
         this.masterServices.getAssignmentManager());
     while (true) {