You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2020/06/05 00:57:12 UTC
[hbase] branch branch-2.3 updated: HBASE-24505 Reimplement
Hbck.setRegionStateInMeta (#1852)
This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch branch-2.3
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.3 by this push:
new 2f04049 HBASE-24505 Reimplement Hbck.setRegionStateInMeta (#1852)
2f04049 is described below
commit 2f040499b1af115269b967aa59b69c090fd1cb6a
Author: Duo Zhang <zh...@apache.org>
AuthorDate: Fri Jun 5 08:48:39 2020 +0800
HBASE-24505 Reimplement Hbck.setRegionStateInMeta (#1852)
Signed-off-by: Wellington Ramos Chevreuil <wc...@apache.org>
---
.../org/apache/hadoop/hbase/client/HBaseHbck.java | 43 +++++++++---------
.../java/org/apache/hadoop/hbase/client/Hbck.java | 12 ++---
.../hadoop/hbase/shaded/protobuf/ProtobufUtil.java | 12 -----
.../hbase/shaded/protobuf/RequestConverter.java | 23 +++++++---
.../src/main/protobuf/HBase.proto | 3 +-
.../src/main/protobuf/Master.proto | 18 +++++---
.../hadoop/hbase/master/MasterRpcServices.java | 53 +++++++++++++---------
.../org/apache/hadoop/hbase/client/TestHbck.java | 50 ++++++++++----------
8 files changed, 112 insertions(+), 102 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 b776dad..d146a90 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
@@ -18,16 +18,21 @@
package org.apache.hadoop.hbase.client;
import java.io.IOException;
-import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
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.ipc.RpcControllerFactory;
import org.apache.hadoop.hbase.master.RegionState;
-import org.apache.hadoop.hbase.ServerName;
+import org.apache.yetus.audience.InterfaceAudience;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;
+
import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;
@@ -37,18 +42,12 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.BypassProc
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.FixMetaRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableStateResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.HbckService.BlockingInterface;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RegionSpecifierAndState;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunHbckChoreRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunHbckChoreResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ScheduleServerCrashProcedureResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignsResponse;
-import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;
-
-import org.apache.yetus.audience.InterfaceAudience;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
* Use {@link ClusterConnection#getHbck()} to obtain an instance of {@link Hbck} instead of
* constructing an HBaseHbck directly.
@@ -113,18 +112,20 @@ public class HBaseHbck implements Hbck {
}
@Override
- public List<RegionState> setRegionStateInMeta(List<RegionState> states) throws IOException {
+ public Map<String, RegionState.State> setRegionStateInMeta(
+ Map<String, RegionState.State> nameOrEncodedName2State) throws IOException {
try {
- if(LOG.isDebugEnabled()) {
- states.forEach(s ->
- LOG.debug("region={}, state={}", s.getRegion().getRegionName(), s.getState())
- );
+ if (LOG.isDebugEnabled()) {
+ nameOrEncodedName2State.forEach((k, v) -> LOG.debug("region={}, state={}", k, v));
+ }
+ MasterProtos.SetRegionStateInMetaResponse response =
+ hbck.setRegionStateInMeta(rpcControllerFactory.newController(),
+ RequestConverter.buildSetRegionStateInMetaRequest(nameOrEncodedName2State));
+ Map<String, RegionState.State> result = new HashMap<>();
+ for (RegionSpecifierAndState nameAndState : response.getStatesList()) {
+ result.put(nameAndState.getRegionSpecifier().getValue().toStringUtf8(),
+ RegionState.State.convert(nameAndState.getState()));
}
- MasterProtos.GetRegionStateInMetaResponse response = hbck.setRegionStateInMeta(
- rpcControllerFactory.newController(),
- RequestConverter.buildSetRegionStateInMetaRequest(states));
- final List<RegionState> result = new ArrayList<>();
- response.getStatesList().forEach(s -> result.add(RegionState.convert(s)));
return result;
} catch (ServiceException 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 5d7479c..57d2912 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
@@ -22,17 +22,14 @@ 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.hadoop.hbase.master.RegionState;
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;
/**
* Hbck fixup tool APIs. Obtain an instance from {@link ClusterConnection#getHbck()} and call
@@ -57,12 +54,13 @@ public interface Hbck extends Abortable, Closeable {
TableState setTableStateInMeta(TableState state) throws IOException;
/**
- * Update region state in Meta only. No procedures are submitted to manipulate the given region
- * or any other region from same table.
- * @param states list of all region states to be updated in meta
+ * Update region state in Meta only. No procedures are submitted to manipulate the given region or
+ * any other region from same table.
+ * @param nameOrEncodedName2State list of all region states to be updated in meta
* @return previous state of the region in Meta
*/
- List<RegionState> setRegionStateInMeta(List<RegionState> states) throws IOException;
+ Map<String, RegionState.State>
+ setRegionStateInMeta(Map<String, RegionState.State> nameOrEncodedName2State) throws IOException;
/**
* Like {@link Admin#assign(byte[])} but 'raw' in that it can do more than one Region at a time
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
index 563ec95..75f3e46 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
@@ -2303,14 +2303,6 @@ public final class ProtobufUtil {
.setQualifier(UnsafeByteOperations.unsafeWrap(tableName.getQualifier())).build();
}
- public static HBaseProtos.RegionInfo toProtoRegionInfo(
- org.apache.hadoop.hbase.client.RegionInfo regionInfo) {
- return HBaseProtos.RegionInfo.newBuilder()
- .setRegionId(regionInfo.getRegionId())
- .setRegionEncodedName(regionInfo.getEncodedName())
- .setTableName(toProtoTableName(regionInfo.getTable())).build();
- }
-
public static List<TableName> toTableNameList(List<HBaseProtos.TableName> tableNamesList) {
if (tableNamesList == null) {
return new ArrayList<>();
@@ -3271,7 +3263,6 @@ public final class ProtobufUtil {
builder.setOffline(info.isOffline());
builder.setSplit(info.isSplit());
builder.setReplicaId(info.getReplicaId());
- builder.setRegionEncodedName(info.getEncodedName());
return builder.build();
}
@@ -3311,9 +3302,6 @@ public final class ProtobufUtil {
if (proto.hasOffline()) {
rib.setOffline(proto.getOffline());
}
- if (proto.hasRegionEncodedName()) {
- rib.setEncodedName(proto.getRegionEncodedName());
- }
return rib.build();
}
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 00f20b4..9657d6e 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
@@ -44,6 +44,7 @@ import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Increment;
+import org.apache.hadoop.hbase.client.LogQueryFilter;
import org.apache.hadoop.hbase.client.MasterSwitchType;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Put;
@@ -52,7 +53,6 @@ import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.Row;
import org.apache.hadoop.hbase.client.RowMutations;
import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.client.LogQueryFilter;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableState;
import org.apache.hadoop.hbase.client.replication.ReplicationPeerConfigUtil;
@@ -138,6 +138,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegion
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RegionSpecifierAndState;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunCatalogScanRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunCleanerChoreRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningRequest;
@@ -1433,13 +1434,23 @@ public final class RequestConverter {
/**
* Creates a protocol buffer SetRegionStateInMetaRequest
- * @param states list of regions states to update in Meta
+ * @param nameOrEncodedName2State list of regions states to update in Meta
* @return a SetRegionStateInMetaRequest
*/
- public static SetRegionStateInMetaRequest buildSetRegionStateInMetaRequest(
- final List<RegionState> states) {
- final SetRegionStateInMetaRequest.Builder builder = SetRegionStateInMetaRequest.newBuilder();
- states.forEach(s -> builder.addStates(s.convert()));
+ public static SetRegionStateInMetaRequest
+ buildSetRegionStateInMetaRequest(Map<String, RegionState.State> nameOrEncodedName2State) {
+ SetRegionStateInMetaRequest.Builder builder = SetRegionStateInMetaRequest.newBuilder();
+ nameOrEncodedName2State.forEach((name, state) -> {
+ byte[] bytes = Bytes.toBytes(name);
+ RegionSpecifier spec;
+ if (RegionInfo.isEncodedRegionName(bytes)) {
+ spec = buildRegionSpecifier(RegionSpecifierType.ENCODED_REGION_NAME, bytes);
+ } else {
+ spec = buildRegionSpecifier(RegionSpecifierType.REGION_NAME, bytes);
+ }
+ builder.addStates(RegionSpecifierAndState.newBuilder().setRegionSpecifier(spec)
+ .setState(state.convert()).build());
+ });
return builder.build();
}
diff --git a/hbase-protocol-shaded/src/main/protobuf/HBase.proto b/hbase-protocol-shaded/src/main/protobuf/HBase.proto
index 3b28fea..133b1c2 100644
--- a/hbase-protocol-shaded/src/main/protobuf/HBase.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/HBase.proto
@@ -69,7 +69,7 @@ message ColumnFamilySchema {
}
/**
- * Protocol buffer version of HRegionInfo.
+ * Protocol buffer version of RegionInfo.
*/
message RegionInfo {
required uint64 region_id = 1;
@@ -79,7 +79,6 @@ message RegionInfo {
optional bool offline = 5;
optional bool split = 6;
optional int32 replica_id = 7 [default = 0];
- optional string region_encoded_name = 8;
}
/**
diff --git a/hbase-protocol-shaded/src/main/protobuf/Master.proto b/hbase-protocol-shaded/src/main/protobuf/Master.proto
index 7ff2847..505eb81 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Master.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Master.proto
@@ -517,11 +517,6 @@ message GetTableStateResponse {
required TableState table_state = 1;
}
-message GetRegionStateInMetaResponse {
- repeated RegionState states = 1;
-}
-
-
message GetClusterStatusRequest {
repeated Option options = 1;
}
@@ -1090,8 +1085,17 @@ message SetTableStateInMetaRequest {
required TableState table_state = 2;
}
+message RegionSpecifierAndState {
+ required RegionSpecifier region_specifier = 1;
+ required RegionState.State state = 2;
+}
+
message SetRegionStateInMetaRequest {
- repeated RegionState states = 2;
+ repeated RegionSpecifierAndState states = 1;
+}
+
+message SetRegionStateInMetaResponse {
+ repeated RegionSpecifierAndState states = 1;
}
/** Like Admin's AssignRegionRequest except it can
@@ -1158,7 +1162,7 @@ service HbckService {
/** Update state of the region in meta only*/
rpc SetRegionStateInMeta(SetRegionStateInMetaRequest)
- returns(GetRegionStateInMetaResponse);
+ returns(SetRegionStateInMetaResponse);
/**
* Assign regions.
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 b1f0c07..adf8062 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
@@ -18,6 +18,7 @@
package org.apache.hadoop.hbase.master;
import static org.apache.hadoop.hbase.master.MasterWalManager.META_FILTER;
+
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.BindException;
@@ -117,9 +118,11 @@ import org.apache.yetus.audience.InterfaceAudience;
import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;
import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;
import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;
+
import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos;
@@ -142,6 +145,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.Reg
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameStringPair;
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ProcedureDescription;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo;
import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockHeartbeatRequest;
@@ -203,7 +207,6 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedu
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresResponse;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetRegionStateInMetaResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest;
@@ -265,6 +268,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineReg
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RegionSpecifierAndState;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RunCatalogScanRequest;
@@ -284,10 +288,9 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormali
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetRegionStateInMetaRequest;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos
- .SetSnapshotCleanupRequest;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos
- .SetSnapshotCleanupResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetRegionStateInMetaResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSnapshotCleanupRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSnapshotCleanupResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSplitOrMergeEnabledRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSplitOrMergeEnabledResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetTableStateInMetaRequest;
@@ -2478,31 +2481,39 @@ public class MasterRpcServices extends RSRpcServices implements
* @return previous states of the regions
*/
@Override
- public GetRegionStateInMetaResponse setRegionStateInMeta(RpcController controller,
+ public SetRegionStateInMetaResponse setRegionStateInMeta(RpcController controller,
SetRegionStateInMetaRequest request) throws ServiceException {
- final GetRegionStateInMetaResponse.Builder builder = GetRegionStateInMetaResponse.newBuilder();
- for(ClusterStatusProtos.RegionState s : request.getStatesList()) {
- try {
- RegionInfo info = this.master.getAssignmentManager().
- loadRegionFromMeta(s.getRegionInfo().getRegionEncodedName());
+ SetRegionStateInMetaResponse.Builder builder = SetRegionStateInMetaResponse.newBuilder();
+ try {
+ for (RegionSpecifierAndState s : request.getStatesList()) {
+ RegionSpecifier spec = s.getRegionSpecifier();
+ String encodedName;
+ if (spec.getType() == RegionSpecifierType.ENCODED_REGION_NAME) {
+ encodedName = spec.getValue().toStringUtf8();
+ } else {
+ // TODO: actually, a full region name can save a lot on meta scan, improve later.
+ encodedName = RegionInfo.encodeRegionName(spec.getValue().toByteArray());
+ }
+ RegionInfo info = this.master.getAssignmentManager().loadRegionFromMeta(encodedName);
LOG.trace("region info loaded from meta table: {}", info);
- RegionState prevState = this.master.getAssignmentManager().getRegionStates().
- getRegionState(info);
- RegionState newState = RegionState.convert(s);
+ RegionState prevState =
+ this.master.getAssignmentManager().getRegionStates().getRegionState(info);
+ RegionState.State newState = RegionState.State.convert(s.getState());
LOG.info("{} set region={} state from {} to {}", master.getClientIdAuditPrefix(), info,
- prevState.getState(), newState.getState());
+ prevState.getState(), newState);
Put metaPut = MetaTableAccessor.makePutFromRegionInfo(info, System.currentTimeMillis());
metaPut.addColumn(HConstants.CATALOG_FAMILY, HConstants.STATE_QUALIFIER,
- Bytes.toBytes(newState.getState().name()));
+ Bytes.toBytes(newState.name()));
List<Put> putList = new ArrayList<>();
putList.add(metaPut);
MetaTableAccessor.putsToMetaTable(this.master.getConnection(), putList);
- //Loads from meta again to refresh AM cache with the new region state
- this.master.getAssignmentManager().loadRegionFromMeta(info.getEncodedName());
- builder.addStates(prevState.convert());
- } catch (Exception e) {
- throw new ServiceException(e);
+ // Loads from meta again to refresh AM cache with the new region state
+ this.master.getAssignmentManager().loadRegionFromMeta(encodedName);
+ builder.addStates(RegionSpecifierAndState.newBuilder().setRegionSpecifier(spec)
+ .setState(prevState.getState().convert()));
}
+ } catch (Exception e) {
+ throw new ServiceException(e);
}
return builder.build();
}
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 0a8e0e1..48c641b 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
@@ -21,7 +21,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -191,31 +190,30 @@ public class TestHbck {
@Test
public void testSetRegionStateInMeta() throws Exception {
Hbck hbck = getHbck();
- try(Admin admin = TEST_UTIL.getAdmin()){
- final List<RegionInfo> regions = admin.getRegions(TABLE_NAME);
- final AssignmentManager am = TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();
- final List<RegionState> prevStates = new ArrayList<>();
- final List<RegionState> newStates = new ArrayList<>();
- final Map<String, Pair<RegionState, RegionState>> regionsMap = new HashMap<>();
- regions.forEach(r -> {
- RegionState prevState = am.getRegionStates().getRegionState(r);
- prevStates.add(prevState);
- RegionState newState = RegionState.createForTesting(r, RegionState.State.CLOSED);
- newStates.add(newState);
- regionsMap.put(r.getEncodedName(), new Pair<>(prevState, newState));
- });
- final List<RegionState> result = hbck.setRegionStateInMeta(newStates);
- result.forEach(r -> {
- RegionState prevState = regionsMap.get(r.getRegion().getEncodedName()).getFirst();
- assertEquals(prevState.getState(), r.getState());
- });
- regions.forEach(r -> {
- RegionState cachedState = am.getRegionStates().getRegionState(r.getEncodedName());
- RegionState newState = regionsMap.get(r.getEncodedName()).getSecond();
- assertEquals(newState.getState(), cachedState.getState());
- });
- hbck.setRegionStateInMeta(prevStates);
- }
+ Admin admin = TEST_UTIL.getAdmin();
+ final List<RegionInfo> regions = admin.getRegions(TABLE_NAME);
+ final AssignmentManager am = TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();
+ Map<String, RegionState.State> prevStates = new HashMap<>();
+ Map<String, RegionState.State> newStates = new HashMap<>();
+ final Map<String, Pair<RegionState.State, RegionState.State>> regionsMap = new HashMap<>();
+ regions.forEach(r -> {
+ RegionState prevState = am.getRegionStates().getRegionState(r);
+ prevStates.put(r.getEncodedName(), prevState.getState());
+ newStates.put(r.getEncodedName(), RegionState.State.CLOSED);
+ regionsMap.put(r.getEncodedName(),
+ new Pair<>(prevState.getState(), RegionState.State.CLOSED));
+ });
+ final Map<String, RegionState.State> result = hbck.setRegionStateInMeta(newStates);
+ result.forEach((k, v) -> {
+ RegionState.State prevState = regionsMap.get(k).getFirst();
+ assertEquals(prevState, v);
+ });
+ regions.forEach(r -> {
+ RegionState cachedState = am.getRegionStates().getRegionState(r.getEncodedName());
+ RegionState.State newState = regionsMap.get(r.getEncodedName()).getSecond();
+ assertEquals(newState, cachedState.getState());
+ });
+ hbck.setRegionStateInMeta(prevStates);
}
@Test