HBASE-10743. Replica map update is problematic in RegionStates

git-svn-id: https://svn.apache.org/repos/asf/hbase/branches/hbase-10070@1577384 
13f79535-47bb-0310-9956-ffa450edef68


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/72ba7866
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/72ba7866
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/72ba7866

Branch: refs/heads/master
Commit: 72ba78667c12ebefc3a9c6d2fbd07aec593f7ac6
Parents: 4111684
Author: Devaraj Das <d...@apache.org>
Authored: Thu Mar 13 23:37:25 2014 +0000
Committer: Enis Soztutar <e...@apache.org>
Committed: Fri Jun 27 16:39:39 2014 -0700

----------------------------------------------------------------------
 .../java/org/apache/hadoop/hbase/master/RegionStates.java     | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/72ba7866/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
index 8bb2b11..490de82 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
@@ -404,6 +404,7 @@ public class RegionStates {
       if (!serverName.equals(oldServerName)) {
         LOG.info("Onlined " + hri.getShortNameToLog() + " on " + serverName);
         addToServerHoldings(serverName, hri);
+        addToReplicaMapping(hri);
         if (oldServerName != null) {
           LOG.info("Offlined " + hri.getShortNameToLog() + " from " + 
oldServerName);
           removeFromServerHoldings(oldServerName, hri);
@@ -419,7 +420,9 @@ public class RegionStates {
       serverHoldings.put(serverName, regions);
     }
     regions.add(hri);
+  }
 
+  private void addToReplicaMapping(HRegionInfo hri) {
     HRegionInfo defaultReplica = 
RegionReplicaUtil.getRegionInfoForDefaultReplica(hri);
     Set<HRegionInfo> replicas =
         defaultReplicaToOtherReplicas.get(defaultReplica);
@@ -436,6 +439,9 @@ public class RegionStates {
     if (oldRegions.isEmpty()) {
       serverHoldings.remove(serverName);
     }
+  }
+
+  private void removeFromReplicaMapping(HRegionInfo hri) {
     HRegionInfo defaultReplica = 
RegionReplicaUtil.getRegionInfoForDefaultReplica(hri);
     Set<HRegionInfo> replicas = 
defaultReplicaToOtherReplicas.get(defaultReplica);
     if (replicas != null) {
@@ -525,6 +531,7 @@ public class RegionStates {
       if (oldServerName != null && serverHoldings.containsKey(oldServerName)) {
         LOG.info("Offlined " + hri.getShortNameToLog() + " from " + 
oldServerName);
         removeFromServerHoldings(oldServerName, hri);
+        removeFromReplicaMapping(hri);
       }
     }
   }

Reply via email to