This is an automated email from the ASF dual-hosted git repository.

zghao pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2 by this push:
     new 4c89354  HBASE-22673 Avoid to expose protobuf stuff in Hbck interface
4c89354 is described below

commit 4c89354f3bdf4b91130c24e62926d8d7f991b38d
Author: Guanghao <[email protected]>
AuthorDate: Fri Jul 19 08:03:06 2019 +0800

    HBASE-22673 Avoid to expose protobuf stuff in Hbck interface
    
    Signed-off-by: stack <[email protected]>
    Signed-off-by: Duo Zhang <[email protected]>
---
 .../org/apache/hadoop/hbase/client/HBaseHbck.java  |  18 +--
 .../java/org/apache/hadoop/hbase/client/Hbck.java  |  25 ++--
 .../hbase/shaded/protobuf/RequestConverter.java    |  16 +--
 .../src/main/protobuf/Master.proto                 |  16 ---
 .../hadoop/hbase/master/MasterRpcServices.java     | 157 ---------------------
 .../org/apache/hadoop/hbase/client/TestHbck.java   | 103 --------------
 6 files changed, 19 insertions(+), 316 deletions(-)

diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java
index 79a75d0..64c9f46 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseHbck.java
@@ -24,11 +24,11 @@ import java.util.concurrent.Callable;
 import java.util.stream.Collectors;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.ipc.RpcControllerFactory;
 import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;
 import 
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableStateResponse;
 import 
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.HbckService.BlockingInterface;
@@ -159,7 +159,7 @@ public class HBaseHbck implements Hbck {
   }
 
   @Override
-  public List<Long> scheduleServerCrashProcedure(List<HBaseProtos.ServerName> 
serverNames)
+  public List<Long> scheduleServerCrashProcedures(List<ServerName> serverNames)
       throws IOException {
     try {
       MasterProtos.ScheduleServerCrashProcedureResponse response =
@@ -174,18 +174,4 @@ public class HBaseHbck implements Hbck {
       throw new IOException(se);
     }
   }
-
-  @Override
-  public Map<String, MasterProtos.RegionErrorType>
-      getFailedSplitMergeLegacyRegions(List<TableName> tableNames) throws 
IOException {
-    try {
-      MasterProtos.GetFailedSplitMergeLegacyRegionsResponse response =
-          
this.hbck.getFailedSplitMergeLegacyRegions(rpcControllerFactory.newController(),
-            
RequestConverter.toGetFailedSplitMergeLegacyRegionsRequest(tableNames));
-      return response.getErrorsMap();
-    } catch (ServiceException se) {
-      LOG.debug("get failed split/merge legacy regions failed", se);
-      throw new IOException(se);
-    }
-  }
 }
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java
index 76643e6..aa7d38a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Hbck.java
@@ -21,12 +21,15 @@ import java.io.Closeable;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
+import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.yetus.audience.InterfaceAudience;
 
+import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;
 
@@ -107,18 +110,16 @@ public interface Hbck extends Abortable, Closeable {
   List<Boolean> bypassProcedure(List<Long> pids, long waitTime, boolean 
override, boolean recursive)
       throws IOException;
 
-  List<Long> scheduleServerCrashProcedure(List<HBaseProtos.ServerName> 
serverNames)
-      throws IOException;
-
   /**
-   * This method is to get the regions which left by failed split/merge 
procedures for a certain
-   * table. There are two kinds of region this method will return. One is 
orphan regions left on FS,
-   * which left because split/merge procedure crashed before updating meta. 
And the other one is
-   * unassigned split daughter region or merged region, which left because 
split/merge procedure
-   * crashed before assignment.
-   * @param tableName table to check
-   * @return Map of problematic regions
+   * Use {@link #scheduleServerCrashProcedures(List)} instead.
+   * @deprecated since 2.2.1. Will removed in 3.0.0.
    */
-  Map<String, MasterProtos.RegionErrorType>
-      getFailedSplitMergeLegacyRegions(List<TableName> tableName) throws 
IOException;
+  @Deprecated
+  default List<Long> scheduleServerCrashProcedure(List<HBaseProtos.ServerName> 
serverNames)
+      throws IOException {
+    return scheduleServerCrashProcedures(
+        
serverNames.stream().map(ProtobufUtil::toServerName).collect(Collectors.toList()));
+  }
+
+  List<Long> scheduleServerCrashProcedures(List<ServerName> serverNames) 
throws IOException;
 }
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java
index 19f7aeb..c60a4c6 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java
@@ -1878,19 +1878,11 @@ public final class RequestConverter {
   }
 
   public static MasterProtos.ScheduleServerCrashProcedureRequest
-      toScheduleServerCrashProcedureRequest(List<HBaseProtos.ServerName> 
serverNames) {
-    MasterProtos.ScheduleServerCrashProcedureRequest.Builder b =
+      toScheduleServerCrashProcedureRequest(List<ServerName> serverNames) {
+    MasterProtos.ScheduleServerCrashProcedureRequest.Builder builder =
         MasterProtos.ScheduleServerCrashProcedureRequest.newBuilder();
-    return b.addAllServerName(serverNames).build();
-  }
-
-  public static MasterProtos.GetFailedSplitMergeLegacyRegionsRequest
-      toGetFailedSplitMergeLegacyRegionsRequest(List<TableName> tableNames) {
-    MasterProtos.GetFailedSplitMergeLegacyRegionsRequest.Builder b =
-        MasterProtos.GetFailedSplitMergeLegacyRegionsRequest.newBuilder();
-    List<HBaseProtos.TableName> protoTableNames = tableNames.stream()
-        .map(tableName -> 
ProtobufUtil.toProtoTableName(tableName)).collect(Collectors.toList());
-    return b.addAllTable(protoTableNames).build();
+    serverNames.stream().map(ProtobufUtil::toServerName).forEach(sn -> 
builder.addServerName(sn));
+    return builder.build();
   }
 
   private static List<RegionSpecifier> toEncodedRegionNameRegionSpecifiers(
diff --git a/hbase-protocol-shaded/src/main/protobuf/Master.proto 
b/hbase-protocol-shaded/src/main/protobuf/Master.proto
index fc391be..2ddc542 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Master.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Master.proto
@@ -1104,19 +1104,6 @@ message ScheduleServerCrashProcedureResponse {
   repeated uint64 pid = 1;
 }
 
-message GetFailedSplitMergeLegacyRegionsRequest {
-  repeated TableName table = 1;
-}
-
-enum RegionErrorType {
-  DAUGHTER_MERGED_REGION_NOT_ONLINE = 0;
-  ORPHAN_REGION_ON_FS = 1;
-}
-
-message GetFailedSplitMergeLegacyRegionsResponse {
-  map<string, RegionErrorType> errors = 1;
-}
-
 service HbckService {
   /** Update state of the table in meta only*/
   rpc SetTableStateInMeta(SetTableStateInMetaRequest)
@@ -1147,7 +1134,4 @@ service HbckService {
   /** Schedule a ServerCrashProcedure to help recover a crash server */
   rpc ScheduleServerCrashProcedure(ScheduleServerCrashProcedureRequest)
     returns(ScheduleServerCrashProcedureResponse);
-
-  rpc getFailedSplitMergeLegacyRegions(GetFailedSplitMergeLegacyRegionsRequest)
-    returns(GetFailedSplitMergeLegacyRegionsResponse);
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
index 654336f..8188cf2 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
@@ -2495,163 +2495,6 @@ public class MasterRpcServices extends RSRpcServices
   }
 
   @Override
-  public MasterProtos.GetFailedSplitMergeLegacyRegionsResponse 
getFailedSplitMergeLegacyRegions(
-      RpcController controller, 
MasterProtos.GetFailedSplitMergeLegacyRegionsRequest request)
-      throws ServiceException {
-    List<HBaseProtos.TableName> tables = request.getTableList();
-
-    Map<String, MasterProtos.RegionErrorType> errorRegions = new HashMap<>();
-    try {
-      for (HBaseProtos.TableName tableName : tables) {
-        
errorRegions.putAll(getFailedSplitMergeLegacyRegions(ProtobufUtil.toTableName(tableName)));
-      }
-    } catch (IOException e) {
-      throw new ServiceException(e);
-    }
-    return MasterProtos.GetFailedSplitMergeLegacyRegionsResponse.newBuilder()
-        .putAllErrors(errorRegions).build();
-  }
-
-  private Map<String, MasterProtos.RegionErrorType>
-      getFailedSplitMergeLegacyRegions(TableName tableName) throws IOException 
{
-    if (!MetaTableAccessor.tableExists(master.getConnection(), tableName)) {
-      throw new IOException("table " + tableName.getNameAsString() + " doesn't 
exist");
-    }
-    if (!MetaTableAccessor.getTableState(master.getConnection(), 
tableName).isEnabled()) {
-      throw new IOException(
-          "table " + tableName.getNameAsString() + " is not enabled yet");
-    }
-    final Map<String, MasterProtos.RegionErrorType> problemRegions = new 
HashMap<>();
-
-    // Case 1. find orphan region on fs
-    // orphan regions may due to a failed split region procedure, which 
daughter regions are created
-    // then the procedure is aborted. Or merged region is created then the 
procedure is aborted.
-    List<String> orphanRegions = findOrphanRegionOnFS(tableName);
-    orphanRegions.stream().forEach(
-      region -> problemRegions.put(region, 
MasterProtos.RegionErrorType.ORPHAN_REGION_ON_FS));
-
-    // Case 2. find unassigned daughter regions or merged regions
-    List<String> unassignedDaughterOrMergedRegions =
-        findUnassignedDaughterOrMergedRegions(tableName);
-    unassignedDaughterOrMergedRegions.stream().forEach(region -> 
problemRegions.put(region,
-      MasterProtos.RegionErrorType.DAUGHTER_MERGED_REGION_NOT_ONLINE));
-
-    // if these regions in problemRegions are currently handled by 
SplitTableRegionProcedure or
-    // MergeTableRegionsProcedure, we should remove them from this map
-    master.getProcedures().stream().filter(p -> !(p.isFinished() || 
p.isBypass())).forEach(p -> {
-      if (p instanceof SplitTableRegionProcedure) {
-        problemRegions
-            .remove(((SplitTableRegionProcedure) 
p).getDaughterOneRI().getRegionNameAsString());
-        problemRegions
-            .remove(((SplitTableRegionProcedure) 
p).getDaughterTwoRI().getRegionNameAsString());
-      } else if (p instanceof MergeTableRegionsProcedure) {
-        problemRegions
-            .remove(((MergeTableRegionsProcedure) 
p).getMergedRegion().getRegionNameAsString());
-      }
-    });
-
-    // check if regions are still problematic now
-    checkRegionStillProblematic(problemRegions, tableName);
-    return problemRegions;
-  }
-
-
-  private void checkRegionStillProblematic(
-      Map<String, MasterProtos.RegionErrorType> problemRegions, TableName 
tableName)
-      throws IOException {
-    Iterator<Map.Entry<String, MasterProtos.RegionErrorType>> iterator =
-        problemRegions.entrySet().iterator();
-    while (iterator.hasNext()) {
-      Map.Entry<String, MasterProtos.RegionErrorType> entry = iterator.next();
-      Result r = MetaTableAccessor.getRegionResult(master.getConnection(),
-        Bytes.toBytesBinary(entry.getKey()));
-      switch (entry.getValue()) {
-        case ORPHAN_REGION_ON_FS:
-          // region is build for this directory, it is not a problematic 
region any more
-          if (r != null) {
-            iterator.remove();
-          }
-          break;
-        case DAUGHTER_MERGED_REGION_NOT_ONLINE:
-          RegionState.State state = RegionStateStore.getRegionState(r, 0);
-          if (!state.matches(RegionState.State.CLOSED, 
RegionState.State.SPLITTING_NEW,
-            RegionState.State.MERGED)) {
-            iterator.remove();
-          }
-          break;
-        default:
-          throw new IOException("there should be no problematic region of this 
type");
-      }
-    }
-  }
-
-  private List<String> findUnassignedDaughterOrMergedRegions(TableName 
tableName)
-      throws IOException {
-    Set<String> checkRegions = new HashSet<>();
-    Map<String, RegionState.State> regionStates = new HashMap<>();
-    Map<String, RegionInfo> regionInfos = new HashMap<>();
-
-    MetaTableAccessor.scanMeta(master.getConnection(), tableName,
-      MetaTableAccessor.QueryType.REGION, Integer.MAX_VALUE, r -> {
-        RegionInfo regionInfo = MetaTableAccessor.getRegionInfo(r);
-        regionInfos.put(regionInfo.getRegionNameAsString(), regionInfo);
-        RegionState.State state = RegionStateStore.getRegionState(r, 0);
-        regionStates.put(regionInfo.getEncodedName(), state);
-        if (regionInfo.isSplitParent()) {
-          PairOfSameType<RegionInfo> daughters = 
MetaTableAccessor.getDaughterRegions(r);
-          checkRegions.add(daughters.getFirst().getRegionNameAsString());
-          checkRegions.add(daughters.getSecond().getRegionNameAsString());
-        } else if (r.getValue(HConstants.CATALOG_FAMILY, 
HConstants.MERGEA_QUALIFIER) != null
-            || r.getValue(HConstants.CATALOG_FAMILY, 
HConstants.MERGEB_QUALIFIER) != null) {
-          checkRegions.add(regionInfo.getRegionNameAsString());
-        }
-        return true;
-      });
-
-    // find unassigned merged or split daughter region
-    return checkRegions.stream().map(regionName -> regionInfos.get(regionName))
-        .filter(regionInfo -> !regionInfo.isSplitParent())
-        .filter(regionInfo -> !regionStates.get(regionInfo.getEncodedName())
-            .matches(RegionState.State.OPEN))
-        .map(regionInfo -> 
regionInfo.getRegionNameAsString()).collect(Collectors.toList());
-  }
-
-  private List<String> findOrphanRegionOnFS(TableName tableName) throws 
IOException {
-    // get available regions from meta, merged region should be consider 
available
-    HashSet<String> regionsInMeta = new HashSet<>();
-    MetaTableAccessor.scanMeta(master.getConnection(), tableName,
-      MetaTableAccessor.QueryType.REGION, Integer.MAX_VALUE, r -> {
-        RegionInfo regionInfo = MetaTableAccessor.getRegionInfo(r);
-        regionsInMeta.add(regionInfo.getEncodedName());
-        if (r.getValue(HConstants.CATALOG_FAMILY, HConstants.MERGEA_QUALIFIER) 
!= null
-            || r.getValue(HConstants.CATALOG_FAMILY, 
HConstants.MERGEB_QUALIFIER) != null) {
-          PairOfSameType<RegionInfo> mergedRegions = 
MetaTableAccessor.getMergeRegions(r);
-          regionsInMeta.add(mergedRegions.getFirst().getEncodedName());
-          regionsInMeta.add(mergedRegions.getSecond().getEncodedName());
-        }
-        return true;
-      });
-    // get regionInfo from fs
-    Path tableDir = 
FSUtils.getTableDir(master.getMasterFileSystem().getRootDir(), tableName);
-    FileStatus[] regions =
-        master.getFileSystem().listStatus(tableDir, path -> 
!path.getName().startsWith("."));
-    HashMap<String, String> regionNames = new HashMap<>();
-    for (FileStatus region : regions) {
-      RegionInfo regionInfo =
-          HRegionFileSystem.loadRegionInfoFileContent(master.getFileSystem(), 
region.getPath());
-      regionNames.put(regionInfo.getEncodedName(), 
regionInfo.getRegionNameAsString());
-    }
-    Iterator<Map.Entry<String, String>> regionIterator = 
regionNames.entrySet().iterator();
-    while (regionIterator.hasNext()) {
-      Map.Entry<String, String> region = regionIterator.next();
-      if (regionsInMeta.contains(region.getKey())) {
-        regionIterator.remove();
-      }
-    }
-    return new ArrayList<>(regionNames.values());
-  }
-
-  @Override
   public SwitchRpcThrottleResponse switchRpcThrottle(RpcController controller,
       SwitchRpcThrottleRequest request) throws ServiceException {
     try {
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java
index 8ee00b8..1d5503b 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHbck.java
@@ -18,16 +18,13 @@
 package org.apache.hadoop.hbase.client;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import org.apache.hadoop.hbase.Coprocessor;
@@ -40,10 +37,7 @@ import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;
 import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;
 import org.apache.hadoop.hbase.coprocessor.MasterObserver;
 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
-import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.master.RegionState;
-import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;
-import org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
 import org.apache.hadoop.hbase.master.procedure.TableProcedureInterface;
 import org.apache.hadoop.hbase.procedure2.Procedure;
@@ -55,7 +49,6 @@ import org.apache.hadoop.hbase.testclassification.ClientTests;
 import org.apache.hadoop.hbase.testclassification.LargeTests;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.junit.AfterClass;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
@@ -73,7 +66,6 @@ import org.slf4j.LoggerFactory;
 import org.apache.hbase.thirdparty.com.google.common.io.Closeables;
 
 import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;
 
 /**
  * Class to test HBaseHbck. Spins up the minicluster once at test start and 
then takes it down
@@ -228,101 +220,6 @@ public class TestHbck {
   }
 
   @Test
-  public void testRecoverMergeAfterMetaUpdated() throws Exception {
-    String testTable = async ? "mergeTestAsync" : "mergeTestSync";
-    TEST_UTIL.createMultiRegionTable(TableName.valueOf(testTable), 
Bytes.toBytes("family1"), 5);
-    
TEST_UTIL.loadTable(TEST_UTIL.getConnection().getTable(TableName.valueOf(testTable)),
-      Bytes.toBytes("family1"), true);
-    HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
-    Hbck hbck = getHbck();
-    FailingMergeAfterMetaUpdatedMasterObserver observer = 
master.getMasterCoprocessorHost()
-        .findCoprocessor(FailingMergeAfterMetaUpdatedMasterObserver.class);
-    try (Admin admin = TEST_UTIL.getConnection().getAdmin()) {
-      List<RegionInfo> regions = 
admin.getRegions(TableName.valueOf(testTable));
-      admin.mergeRegionsAsync(regions.get(0).getRegionName(), 
regions.get(1).getRegionName(), true);
-      assertNotNull(observer);
-      observer.latch.await(5000, TimeUnit.MILLISECONDS);
-      Map<String, MasterProtos.RegionErrorType> result =
-          
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      Assert.assertEquals(0, result.size());
-      Optional<Procedure<?>> procedure = 
TEST_UTIL.getHBaseCluster().getMaster().getProcedures()
-          .stream().filter(p -> p instanceof 
MergeTableRegionsProcedure).findAny();
-      Assert.assertTrue(procedure.isPresent());
-      hbck.bypassProcedure(Arrays.asList(procedure.get().getProcId()), 5, 
true, false);
-      result = 
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      Assert.assertEquals(1, result.size());
-      hbck.assigns(Arrays.asList(result.keySet().toArray(new 
String[0])).stream()
-          .map(regionName -> 
regionName.split("\\.")[1]).collect(Collectors.toList()));
-      
ProcedureTestingUtility.waitNoProcedureRunning(master.getMasterProcedureExecutor());
-      // now the state should be fixed
-      result = 
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      Assert.assertEquals(0, result.size());
-    } catch (InterruptedException ie) {
-      throw new IOException(ie);
-    } finally {
-      observer.resetLatch();
-    }
-  }
-
-  @Test
-  public void testRecoverSplitAfterMetaUpdated() throws Exception {
-    String testTable = async ? "splitTestAsync" : "splitTestSync";
-    TEST_UTIL.createMultiRegionTable(TableName.valueOf(testTable), 
Bytes.toBytes("family1"), 5);
-    HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
-    Hbck hbck = getHbck();
-    FailingSplitAfterMetaUpdatedMasterObserver observer = 
master.getMasterCoprocessorHost()
-        .findCoprocessor(FailingSplitAfterMetaUpdatedMasterObserver.class);
-    assertNotNull(observer);
-    try (Admin admin = TEST_UTIL.getConnection().getAdmin()) {
-      byte[] splitKey = Bytes.toBytes("bcd");
-      admin.split(TableName.valueOf(testTable), splitKey);
-      observer.latch.await(5000, TimeUnit.MILLISECONDS);
-      Map<String, MasterProtos.RegionErrorType> result =
-          
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      // since there is a split procedure work on the region, thus this check 
should return a empty
-      // map.
-      Assert.assertEquals(0, result.size());
-      Optional<Procedure<?>> procedure = 
TEST_UTIL.getHBaseCluster().getMaster().getProcedures()
-          .stream().filter(p -> p instanceof 
SplitTableRegionProcedure).findAny();
-      Assert.assertTrue(procedure.isPresent());
-      hbck.bypassProcedure(Arrays.asList(procedure.get().getProcId()), 5, 
true, false);
-      result = 
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      Assert.assertEquals(2, result.size());
-      hbck.assigns(Arrays.asList(result.keySet().toArray(new 
String[0])).stream()
-          .map(regionName -> 
regionName.split("\\.")[1]).collect(Collectors.toList()));
-      
ProcedureTestingUtility.waitNoProcedureRunning(master.getMasterProcedureExecutor());
-      // now the state should be fixed
-      result = 
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      Assert.assertEquals(0, result.size());
-
-      //split one of the daughter region again
-      observer.resetLatch();
-      byte[] splitKey2 = Bytes.toBytes("bcde");
-
-      admin.split(TableName.valueOf(testTable), splitKey2);
-      observer.latch.await(5000, TimeUnit.MILLISECONDS);
-
-      procedure = TEST_UTIL.getHBaseCluster().getMaster().getProcedures()
-          .stream().filter(p -> p instanceof 
SplitTableRegionProcedure).findAny();
-      Assert.assertTrue(procedure.isPresent());
-      hbck.bypassProcedure(Arrays.asList(procedure.get().getProcId()), 5, 
true, false);
-      result = 
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      Assert.assertEquals(2, result.size());
-      hbck.assigns(Arrays.asList(result.keySet().toArray(new 
String[0])).stream()
-          .map(regionName -> 
regionName.split("\\.")[1]).collect(Collectors.toList()));
-      
ProcedureTestingUtility.waitNoProcedureRunning(master.getMasterProcedureExecutor());
-      // now the state should be fixed
-      result = 
hbck.getFailedSplitMergeLegacyRegions(Arrays.asList(TableName.valueOf(testTable)));
-      Assert.assertEquals(0, result.size());
-    } catch (InterruptedException ie) {
-      throw new IOException(ie);
-    } finally {
-      observer.resetLatch();
-    }
-  }
-
-
-  @Test
   public void testScheduleSCP() throws Exception {
     HRegionServer testRs = TEST_UTIL.getRSForFirstRegionInTable(TABLE_NAME);
     TEST_UTIL.loadTable(TEST_UTIL.getConnection().getTable(TABLE_NAME), 
Bytes.toBytes("family1"),

Reply via email to