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); } } }