hbase git commit: HBASE-21102 ServerCrashProcedure should select target server where no other replicas exist for the current region (Ram)

2018-09-17 Thread ramkrishna
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)

2018-09-10 Thread ramkrishna
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)

2018-09-10 Thread ramkrishna
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) {
+