You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by vj...@apache.org on 2020/10/05 10:20:14 UTC
[hbase] branch master updated: HBASE-25147 : Serialize regionNames
in ReopenTableRegionsProcedure
This is an automated email from the ASF dual-hosted git repository.
vjasani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new 23ce918 HBASE-25147 : Serialize regionNames in ReopenTableRegionsProcedure
23ce918 is described below
commit 23ce91819aec35aec28116316d4bd5c37889591f
Author: Viraj Jasani <vj...@apache.org>
AuthorDate: Mon Oct 5 15:37:34 2020 +0530
HBASE-25147 : Serialize regionNames in ReopenTableRegionsProcedure
Closes #2494
Signed-off-by: Duo Zhang <zh...@apache.org>
---
.../protobuf/server/master/MasterProcedure.proto | 1 +
.../procedure/ReopenTableRegionsProcedure.java | 24 +++++++++++++++++++---
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto b/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto
index b18de27..59a1d68 100644
--- a/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto
@@ -487,6 +487,7 @@ enum ReopenTableRegionsState {
message ReopenTableRegionsStateData {
required TableName table_name = 1;
repeated RegionLocation region = 2;
+ repeated bytes region_names = 3;
}
enum InitMetaState {
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.java
index ffa485d..aa89094 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.java
@@ -36,6 +36,7 @@ import org.apache.yetus.audience.InterfaceAudience;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;
import org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils;
import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
@@ -56,19 +57,19 @@ public class ReopenTableRegionsProcedure
// Specify specific regions of a table to reopen.
// if specified null, all regions of the table will be reopened.
- private final List<byte[]> regionNames;
+ private List<byte[]> regionNames;
private List<HRegionLocation> regions = Collections.emptyList();
private RetryCounter retryCounter;
public ReopenTableRegionsProcedure() {
- regionNames = null;
+ regionNames = Collections.emptyList();
}
public ReopenTableRegionsProcedure(TableName tableName) {
this.tableName = tableName;
- this.regionNames = null;
+ this.regionNames = Collections.emptyList();
}
public ReopenTableRegionsProcedure(final TableName tableName,
@@ -223,6 +224,17 @@ public class ReopenTableRegionsProcedure
ReopenTableRegionsStateData.Builder builder = ReopenTableRegionsStateData.newBuilder()
.setTableName(ProtobufUtil.toProtoTableName(tableName));
regions.stream().map(ProtobufUtil::toRegionLocation).forEachOrdered(builder::addRegion);
+ if (CollectionUtils.isNotEmpty(regionNames)) {
+ // As of this writing, wrapping this statement withing if condition is only required
+ // for backward compatibility as we used to have 'regionNames' as null for cases
+ // where all regions of given table should be reopened. Now, we have kept emptyList()
+ // for 'regionNames' to indicate all regions of given table should be reopened unless
+ // 'regionNames' contains at least one specific region, in which case only list of regions
+ // that 'regionNames' contain should be reopened, not all regions of given table.
+ // Now, we don't need this check since we are not dealing with null 'regionNames' and hence,
+ // guarding by this if condition can be removed in HBase 4.0.0.
+ regionNames.stream().map(ByteString::copyFrom).forEachOrdered(builder::addRegionNames);
+ }
serializer.serialize(builder.build());
}
@@ -233,5 +245,11 @@ public class ReopenTableRegionsProcedure
tableName = ProtobufUtil.toTableName(data.getTableName());
regions = data.getRegionList().stream().map(ProtobufUtil::toRegionLocation)
.collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(data.getRegionNamesList())) {
+ regionNames = data.getRegionNamesList().stream().map(ByteString::toByteArray)
+ .collect(Collectors.toList());
+ } else {
+ regionNames = Collections.emptyList();
+ }
}
}