Author: jgray
Date: Mon Nov 29 21:18:41 2010
New Revision: 1040302

URL: http://svn.apache.org/viewvc?rev=1040302&view=rev
Log:
HBASE-3283 NPE in AssignmentManager if processing shutdown of RS who doesn't 
have any regions assigned to it

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

Modified: hbase/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1040302&r1=1040301&r2=1040302&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon Nov 29 21:18:41 2010
@@ -9,6 +9,8 @@ Release 0.91.0 - Unreleased
    HBASE-3280  YouAreDeadException being swallowed in HRS getMaster
    HBASE-3282  Need to retain DeadServers to ensure we don't allow
                previously expired RS instances to rejoin cluster
+   HBASE-3283  NPE in AssignmentManager if processing shutdown of RS who
+               doesn't have any regions assigned to it
 
   IMPROVEMENTS
    HBASE-2001  Coprocessors: Colocate user code with regions (Mingjie Lai via

Modified: 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1040302&r1=1040301&r2=1040302&view=diff
==============================================================================
--- 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java 
(original)
+++ 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java 
Mon Nov 29 21:18:41 2010
@@ -1597,8 +1597,14 @@ public class AssignmentManager extends Z
     // Remove this server from map of servers to regions, and remove all 
regions
     // of this server from online map of regions.
     Set<HRegionInfo> deadRegions = null;
+    List<HRegionInfo> rits = new ArrayList<HRegionInfo>();
     synchronized (this.regions) {
-      deadRegions = new TreeSet<HRegionInfo>(this.servers.remove(hsi));
+      List<HRegionInfo> assignedRegions = this.servers.remove(hsi);
+      if (assignedRegions == null || assignedRegions.isEmpty()) {
+        // No regions on this server, we are done, return empty list of RITs
+        return rits;
+      }
+      deadRegions = new TreeSet<HRegionInfo>(assignedRegions);
       for (HRegionInfo region : deadRegions) {
         this.regions.remove(region);
       }
@@ -1606,7 +1612,6 @@ public class AssignmentManager extends Z
     // See if any of the regions that were online on this server were in RIT
     // If they are, normal timeouts will deal with them appropriately so
     // let's skip a manual re-assignment.
-    List<HRegionInfo> rits = new ArrayList<HRegionInfo>();
     synchronized (regionsInTransition) {
       for (RegionState region : this.regionsInTransition.values()) {
         if (deadRegions.remove(region.getRegion())) {


Reply via email to