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"),