hbase git commit: HBASE-21102 ServerCrashProcedure should select target server where no other replicas exist for the current region (Ram)
Repository: hbase Updated Branches: refs/heads/branch-2.1 39e0b8515 -> 27b772ddc HBASE-21102 ServerCrashProcedure should select target server where no other replicas exist for the current region (Ram) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/27b772dd Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/27b772dd Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/27b772dd Branch: refs/heads/branch-2.1 Commit: 27b772ddc63d1ebb6fe1cd6cd12ca2fc6f897286 Parents: 39e0b85 Author: Vasudevan Authored: Mon Sep 17 22:36:50 2018 +0530 Committer: Vasudevan Committed: Mon Sep 17 22:36:50 2018 +0530 -- .../hbase/master/assignment/RegionStates.java | 64 +++ .../hbase/master/balancer/BaseLoadBalancer.java | 56 ++--- .../hadoop/hbase/HBaseTestingUtility.java | 30 +-- .../procedure/TestServerCrashProcedure.java | 34 +--- .../TestServerCrashProcedureWithReplicas.java | 84 5 files changed, 224 insertions(+), 44 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/27b772dd/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java index 5c349e5..40e82f9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java @@ -41,12 +41,14 @@ import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.RegionInfo; +import org.apache.hadoop.hbase.client.RegionReplicaUtil; import org.apache.hadoop.hbase.exceptions.UnexpectedStateException; import org.apache.hadoop.hbase.master.RegionState; import org.apache.hadoop.hbase.master.RegionState.State; import org.apache.hadoop.hbase.procedure2.ProcedureEvent; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; +import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -820,25 +822,39 @@ public class RegionStates { public Map> getSnapShotOfAssignment( final Collection regions) { final Map> result = new HashMap>(); -for (RegionInfo hri: regions) { - final RegionStateNode node = getRegionStateNode(hri); - if (node == null) continue; - - // TODO: State.OPEN - final ServerName serverName = node.getRegionLocation(); - if (serverName == null) continue; - - List serverRegions = result.get(serverName); - if (serverRegions == null) { -serverRegions = new ArrayList(); -result.put(serverName, serverRegions); +if (regions != null) { + for (RegionInfo hri : regions) { +final RegionStateNode node = getRegionStateNode(hri); +if (node == null) { + continue; +} +createSnapshot(node, result); + } +} else { + for (RegionStateNode node : regionsMap.values()) { +if (node == null) { + continue; +} +createSnapshot(node, result); } - - serverRegions.add(node.getRegionInfo()); } return result; } + private void createSnapshot(RegionStateNode node, Map> result) { +final ServerName serverName = node.getRegionLocation(); +if (serverName == null) { + return; +} + +List serverRegions = result.get(serverName); +if (serverRegions == null) { + serverRegions = new ArrayList(); + result.put(serverName, serverRegions); +} +serverRegions.add(node.getRegionInfo()); + } + public Map getRegionAssignments() { final HashMap assignments = new HashMap(); for (RegionStateNode node: regionsMap.values()) { @@ -1127,6 +1143,26 @@ public class RegionStates { return serverNode; } + public boolean isReplicaAvailableForRegion(final RegionInfo info) { +// if the region info itself is a replica return true. +if (!RegionReplicaUtil.isDefaultReplica(info)) { + return true; +} +// iterate the regionsMap for the given region name. If there are replicas it should +// list them in order. +for (RegionStateNode node : regionsMap.tailMap(info.getRegionName()).values()) { + if (!node.getTable().equals(info.getTable()) + || !ServerRegionReplicaUtil.isReplicasForSameRegion(info, node.getRegionInfo())) { +break; + } else if
hbase git commit: HBASE-21102 - ServerCrashProcedure should select target server where no other replicas exist for the current region (ram)
Repository: hbase Updated Branches: refs/heads/branch-2 d35e2f35a -> 2be9196ba HBASE-21102 - ServerCrashProcedure should select target server where no other replicas exist for the current region (ram) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/2be9196b Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/2be9196b Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/2be9196b Branch: refs/heads/branch-2 Commit: 2be9196ba7b113821b979333f55d2425fe38960a Parents: d35e2f3 Author: Vasudevan Authored: Mon Sep 10 13:31:36 2018 +0530 Committer: Vasudevan Committed: Mon Sep 10 13:31:36 2018 +0530 -- .../hbase/master/assignment/RegionStates.java | 42 ++ .../hbase/master/balancer/BaseLoadBalancer.java | 43 +++--- .../hadoop/hbase/HBaseTestingUtility.java | 30 +-- .../procedure/TestServerCrashProcedure.java | 34 +--- .../TestServerCrashProcedureWithReplicas.java | 84 5 files changed, 193 insertions(+), 40 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/2be9196b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java index eeb9252..847d4f0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java @@ -466,25 +466,39 @@ public class RegionStates { public Map> getSnapShotOfAssignment( final Collection regions) { final Map> result = new HashMap>(); -for (RegionInfo hri: regions) { - final RegionStateNode node = getRegionStateNode(hri); - if (node == null) continue; - - // TODO: State.OPEN - final ServerName serverName = node.getRegionLocation(); - if (serverName == null) continue; - - List serverRegions = result.get(serverName); - if (serverRegions == null) { -serverRegions = new ArrayList(); -result.put(serverName, serverRegions); +if (regions != null) { + for (RegionInfo hri : regions) { +final RegionStateNode node = getRegionStateNode(hri); +if (node == null) { + continue; +} +createSnapshot(node, result); + } +} else { + for (RegionStateNode node : regionsMap.values()) { +if (node == null) { + continue; +} +createSnapshot(node, result); } - - serverRegions.add(node.getRegionInfo()); } return result; } + private void createSnapshot(RegionStateNode node, Map> result) { +final ServerName serverName = node.getRegionLocation(); +if (serverName == null) { + return; +} + +List serverRegions = result.get(serverName); +if (serverRegions == null) { + serverRegions = new ArrayList(); + result.put(serverName, serverRegions); +} +serverRegions.add(node.getRegionInfo()); + } + public Map getRegionAssignments() { final HashMap assignments = new HashMap(); for (RegionStateNode node: regionsMap.values()) { http://git-wip-us.apache.org/repos/asf/hbase/blob/2be9196b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java index 0f6e348..20b96ef 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java @@ -741,7 +741,6 @@ public abstract class BaseLoadBalancer implements LoadBalancer { int region = regionsToIndex.get(regionInfo); int primary = regionIndexToPrimaryIndex[region]; - // there is a subset relation for server < host < rack // check server first @@ -1262,7 +1261,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer { return assignments; } -Cluster cluster = createCluster(servers, regions); +Cluster cluster = createCluster(servers, regions, false); List unassignedRegions = new ArrayList<>(); roundRobinAssignment(cluster, regions, unassignedRegions, @@ -1318,12 +1317,19 @@ public abstract class BaseLoadBalancer implements LoadBalancer { return assignments; } - protected Cluster createCluster(List servers, Collection regions) { +
hbase git commit: HBASE-21102 ServerCrashProcedure should select target server where no other replicas exist for the current region (Ram)
Repository: hbase Updated Branches: refs/heads/master b83613fdc -> dc3ada261 HBASE-21102 ServerCrashProcedure should select target server where no other replicas exist for the current region (Ram) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/dc3ada26 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/dc3ada26 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/dc3ada26 Branch: refs/heads/master Commit: dc3ada2614ebdb13a07efc26bd803758e272b548 Parents: b83613f Author: Vasudevan Authored: Mon Sep 10 13:12:02 2018 +0530 Committer: Vasudevan Committed: Mon Sep 10 13:12:02 2018 +0530 -- .../hbase/master/assignment/RegionStates.java | 42 ++ .../hbase/master/balancer/BaseLoadBalancer.java | 42 +++--- .../hadoop/hbase/HBaseTestingUtility.java | 30 +-- .../procedure/TestServerCrashProcedure.java | 34 +--- .../TestServerCrashProcedureWithReplicas.java | 84 5 files changed, 192 insertions(+), 40 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hbase/blob/dc3ada26/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java index eeb9252..847d4f0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java @@ -466,25 +466,39 @@ public class RegionStates { public Map> getSnapShotOfAssignment( final Collection regions) { final Map> result = new HashMap>(); -for (RegionInfo hri: regions) { - final RegionStateNode node = getRegionStateNode(hri); - if (node == null) continue; - - // TODO: State.OPEN - final ServerName serverName = node.getRegionLocation(); - if (serverName == null) continue; - - List serverRegions = result.get(serverName); - if (serverRegions == null) { -serverRegions = new ArrayList(); -result.put(serverName, serverRegions); +if (regions != null) { + for (RegionInfo hri : regions) { +final RegionStateNode node = getRegionStateNode(hri); +if (node == null) { + continue; +} +createSnapshot(node, result); + } +} else { + for (RegionStateNode node : regionsMap.values()) { +if (node == null) { + continue; +} +createSnapshot(node, result); } - - serverRegions.add(node.getRegionInfo()); } return result; } + private void createSnapshot(RegionStateNode node, Map> result) { +final ServerName serverName = node.getRegionLocation(); +if (serverName == null) { + return; +} + +List serverRegions = result.get(serverName); +if (serverRegions == null) { + serverRegions = new ArrayList(); + result.put(serverName, serverRegions); +} +serverRegions.add(node.getRegionInfo()); + } + public Map getRegionAssignments() { final HashMap assignments = new HashMap(); for (RegionStateNode node: regionsMap.values()) { http://git-wip-us.apache.org/repos/asf/hbase/blob/dc3ada26/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java -- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java index 0f6e348..55cdabc 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java @@ -741,7 +741,6 @@ public abstract class BaseLoadBalancer implements LoadBalancer { int region = regionsToIndex.get(regionInfo); int primary = regionIndexToPrimaryIndex[region]; - // there is a subset relation for server < host < rack // check server first @@ -1262,7 +1261,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer { return assignments; } -Cluster cluster = createCluster(servers, regions); +Cluster cluster = createCluster(servers, regions, false); List unassignedRegions = new ArrayList<>(); roundRobinAssignment(cluster, regions, unassignedRegions, @@ -1318,12 +1317,19 @@ public abstract class BaseLoadBalancer implements LoadBalancer { return assignments; } - protected Cluster createCluster(List servers, Collection regions) { +