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())) {