[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-26 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit f3d0b535b80ccf5cbb610b3a8b15aa743219ca42
Author: Duo Zhang 
AuthorDate: Thu Jun 25 23:17:03 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)
---
 .../apache/hadoop/hbase/CatalogFamilyFormat.java   |  17 +++
 .../org/apache/hadoop/hbase/master/HMaster.java|  70 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  80 
 .../hbase/master/assignment/RegionStateStore.java  |  71 +-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../client/TestFailedMetaReplicaAssigment.java |  11 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 22 files changed, 371 insertions(+), 190 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
index cec43ae..a2c59de 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
@@ -27,6 +27,7 @@ import java.util.NavigableMap;
 import java.util.SortedMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
@@ -34,6 +35,7 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.TableState;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -346,4 +348,19 @@ public class CatalogFamilyFormat {
   throw new IOException(e);
 }
   }
+
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index cc3a44f..2e2136e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.CatalogFamilyFormat;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +86,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-26 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit c966320986c22bdba4d6ae50443a3290d66af7ca
Author: Duo Zhang 
AuthorDate: Thu Jun 25 23:17:03 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)
---
 .../apache/hadoop/hbase/CatalogFamilyFormat.java   |  17 +++
 .../org/apache/hadoop/hbase/master/HMaster.java|  70 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  80 
 .../hbase/master/assignment/RegionStateStore.java  |  71 +-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hadoop/hbase/client/TestMetaWithReplicas.java  |  50 ---
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 22 files changed, 393 insertions(+), 207 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
index cec43ae..a2c59de 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
@@ -27,6 +27,7 @@ import java.util.NavigableMap;
 import java.util.SortedMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
@@ -34,6 +35,7 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.TableState;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -346,4 +348,19 @@ public class CatalogFamilyFormat {
   throw new IOException(e);
 }
   }
+
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index cc3a44f..2e2136e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.CatalogFamilyFormat;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +86,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-25 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 7074997b01438dd001351aa4cd9ff84d8556474f
Author: Duo Zhang 
AuthorDate: Thu Jun 25 23:17:03 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)
---
 .../apache/hadoop/hbase/CatalogFamilyFormat.java   |  17 +++
 .../org/apache/hadoop/hbase/master/HMaster.java|  70 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  80 
 .../hbase/master/assignment/RegionStateStore.java  |  71 +-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hadoop/hbase/client/TestMetaWithReplicas.java  |  50 ---
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 22 files changed, 393 insertions(+), 207 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
index cec43ae..a2c59de 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
@@ -27,6 +27,7 @@ import java.util.NavigableMap;
 import java.util.SortedMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
@@ -34,6 +35,7 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.TableState;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -346,4 +348,19 @@ public class CatalogFamilyFormat {
   throw new IOException(e);
 }
   }
+
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 5a9404a..f04c25e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.CatalogFamilyFormat;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +86,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-24 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 6f759aa4eb4fa58f9e588375c6a40940f61d1a63
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../apache/hadoop/hbase/CatalogFamilyFormat.java   |  17 +++
 .../org/apache/hadoop/hbase/master/HMaster.java|  70 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 145 +
 .../hbase/master/assignment/AssignmentManager.java |  80 
 .../hbase/master/assignment/RegionStateStore.java  |  71 +-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 365 insertions(+), 186 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
index cec43ae..a2c59de 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/CatalogFamilyFormat.java
@@ -27,6 +27,7 @@ import java.util.NavigableMap;
 import java.util.SortedMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
@@ -34,6 +35,7 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.TableState;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -346,4 +348,19 @@ public class CatalogFamilyFormat {
   throw new IOException(e);
 }
   }
+
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(HConstants.CATALOG_FAMILY, 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 9fdb0e5..62b0fe9 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.CatalogFamilyFormat;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +86,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-21 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 9d926cb47d3fd4e4527b605e94ff19b912dc6323
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  80 
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 363 insertions(+), 189 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 9fdb0e5..4e30741 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +85,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-21 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 634098f5145da926251307ca7322c821bfa1e6e0
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  84 
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 367 insertions(+), 189 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 9fdb0e5..4e30741 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +85,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-08 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 7c9906266f1bdcff71783f814ac7982c80da3cb6
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  78 +++
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 363 insertions(+), 187 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 8d27ec9..fb92c8f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +85,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-07 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 01e52f868df4a3378b18e0b820c8cf67c00d5d52
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  78 +++
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 363 insertions(+), 187 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 8d27ec9..fb92c8f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +85,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-05 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 1c0d770b594495cd74722f9a89dbd318ff7c714c
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  78 +++
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 363 insertions(+), 187 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 8d27ec9..fb92c8f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -59,6 +59,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -82,9 +85,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-06-01 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 064dcbda63039167aa2a703636cbbae38fdbd9f5
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  78 +++
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hbase/master/region/MasterRegionFactory.java   |   9 +-
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  12 +-
 .../master/assignment/MockMasterServices.java  |  32 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 363 insertions(+), 187 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 0d4e1a0..a46fdae 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -58,6 +58,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -81,9 +84,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-05-28 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 39c899e35bdaf09d7a420ae53ea0304cef8a8066
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  78 +++
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hadoop/hbase/master/store/LocalStore.java  |   7 +
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  10 +-
 .../master/assignment/MockMasterServices.java  |  31 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 361 insertions(+), 184 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 4b9cf73..4be605a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -58,6 +58,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -81,9 +84,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-05-28 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 21504fd8c99b09fd68c5cb540ddb2fde21f8c77c
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  78 +++
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hadoop/hbase/master/store/LocalStore.java  |   7 +
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  10 +-
 .../master/assignment/MockMasterServices.java  |  31 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 361 insertions(+), 184 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 4b9cf73..4be605a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -58,6 +58,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -81,9 +84,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import 

[hbase] 01/01: HBASE-24388 Store the locations of meta regions in master local store (#1746)

2020-05-26 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-11288.splittable-meta
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit dad86562648011877ccf45497a2cd543d94e0cea
Author: Duo Zhang 
AuthorDate: Wed May 27 11:30:37 2020 +0800

HBASE-24388 Store the locations of meta regions in master local store 
(#1746)

Signed-off-by: Guanghao Zhang 
Signed-off-by: stack 
---
 .../org/apache/hadoop/hbase/MetaTableAccessor.java |  19 ++-
 .../org/apache/hadoop/hbase/master/HMaster.java|  69 --
 .../hadoop/hbase/master/MasterMetaBootstrap.java   | 144 +
 .../hbase/master/assignment/AssignmentManager.java |  78 +++
 .../hbase/master/assignment/RegionStateStore.java  |  72 ++-
 .../hadoop/hbase/master/store/LocalStore.java  |   7 +
 .../store/region/RegionProcedureStore.java |   5 +-
 .../hbase/master/TestCloseAnOpeningRegion.java |   8 +-
 .../hbase/master/TestClusterRestartFailover.java   |  10 +-
 .../master/assignment/MockMasterServices.java  |  31 +++--
 .../assignment/TestOpenRegionProcedureBackoff.java |  10 +-
 .../assignment/TestOpenRegionProcedureHang.java|  10 +-
 .../assignment/TestRaceBetweenSCPAndDTP.java   |  10 +-
 .../assignment/TestRaceBetweenSCPAndTRSP.java  |  10 +-
 .../TestRegionAssignedToMultipleRegionServers.java |  10 +-
 .../assignment/TestReportOnlineRegionsRace.java|  10 +-
 ...tReportRegionStateTransitionFromDeadServer.java |  10 +-
 .../TestReportRegionStateTransitionRetry.java  |  10 +-
 .../master/assignment/TestSCPGetRegionsRace.java   |  10 +-
 .../assignment/TestWakeUpUnexpectedProcedure.java  |  10 +-
 .../region/TestRegionProcedureStoreMigration.java  |   2 +-
 21 files changed, 361 insertions(+), 184 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index f0124d3..ed8de18 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -384,8 +384,8 @@ public class MetaTableAccessor {
   }
 
   /**
-   * @return Deserialized values of  pairs taken from 
column values that match
-   *   the regex 'info:merge.*' in array of cells.
+   * @return Deserialized values of qualifier,regioninfo pairs taken 
from column values that
+   * match the regex 'info:merge.*' in array of cells.
*/
   @Nullable
   public static Map getMergeRegionsWithName(Cell [] cells) 
{
@@ -1403,6 +1403,21 @@ public class MetaTableAccessor {
 }
   }
 
+  public static Delete removeRegionReplica(byte[] metaRow, int 
replicaIndexToDeleteFrom,
+int numReplicasToRemove) {
+int absoluteIndex = replicaIndexToDeleteFrom + numReplicasToRemove;
+long now = EnvironmentEdgeManager.currentTime();
+Delete deleteReplicaLocations = new Delete(metaRow);
+for (int i = replicaIndexToDeleteFrom; i < absoluteIndex; i++) {
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getSeqNumColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getStartCodeColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getServerNameColumn(i), now);
+  deleteReplicaLocations.addColumns(getCatalogFamily(), 
getRegionStateColumn(i), now);
+}
+return deleteReplicaLocations;
+  }
+
   /**
* Deletes some replica columns corresponding to replicas for the passed rows
* @param metaRows rows in hbase:meta
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 4b9cf73..4be605a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -58,6 +58,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.CellBuilderFactory;
+import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.ChoreService;
 import org.apache.hadoop.hbase.ClusterId;
 import org.apache.hadoop.hbase.ClusterMetrics;
@@ -81,9 +84,11 @@ import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.RegionStatesCount;
+import