Index: src/java/org/apache/hadoop/hbase/master/RegionManager.java =================================================================== --- src/java/org/apache/hadoop/hbase/master/RegionManager.java (revision 810436) +++ src/java/org/apache/hadoop/hbase/master/RegionManager.java (working copy) @@ -425,20 +425,22 @@ return regionsToAssign; // dont assign anything to this server. } - for (RegionState s: regionsInTransition.values()) { - HRegionInfo i = s.getRegionInfo(); - if (i == null) { - continue; - } - if (reassigningMetas && - !i.isMetaRegion()) { - // Can't assign user regions until all meta regions have been assigned - // and are on-line - continue; - } - if (s.isUnassigned()) { - regionsToAssign.add(s); - } + synchronized(regionsInTransition) { + for (RegionState s: regionsInTransition.values()) { + HRegionInfo i = s.getRegionInfo(); + if (i == null) { + continue; + } + if (reassigningMetas && + !i.isMetaRegion()) { + // Can't assign user regions until all meta regions have been assigned + // and are on-line + continue; + } + if (s.isUnassigned()) { + regionsToAssign.add(s); + } + } } return regionsToAssign; } @@ -834,14 +836,16 @@ // This might be expensive, but we need to make sure we dont // get double assignment to the same regionserver. - for (RegionState s : regionsInTransition.values()) { - if (s.getRegionInfo().isMetaRegion() - && !s.isUnassigned() - && s.getServerName() != null - && s.getServerName().equals(server.toString())) { - // Has an outstanding meta region to be assigned. - return true; - } + synchronized(regionsInTransition) { + for (RegionState s : regionsInTransition.values()) { + if (s.getRegionInfo().isMetaRegion() + && !s.isUnassigned() + && s.getServerName() != null + && s.getServerName().equals(server.toString())) { + // Has an outstanding meta region to be assigned. + return true; + } + } } return false; }