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

vjasani 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 5abb36b  HBASE-25147 : Serialize regionNames in 
ReopenTableRegionsProcedure
5abb36b is described below

commit 5abb36b578be7be4f0fe574b5e6de99d573bd606
Author: Viraj Jasani <[email protected]>
AuthorDate: Mon Oct 5 15:37:34 2020 +0530

    HBASE-25147 : Serialize regionNames in ReopenTableRegionsProcedure
    
    Closes #2494
    
    Signed-off-by: Duo Zhang <[email protected]>
---
 .../src/main/protobuf/MasterProcedure.proto        |  1 +
 .../procedure/ReopenTableRegionsProcedure.java     | 24 +++++++++++++++++++---
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/hbase-protocol-shaded/src/main/protobuf/MasterProcedure.proto 
b/hbase-protocol-shaded/src/main/protobuf/MasterProcedure.proto
index de33345..573eac8 100644
--- a/hbase-protocol-shaded/src/main/protobuf/MasterProcedure.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/MasterProcedure.proto
@@ -465,6 +465,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 7bf834c..1489f98 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
@@ -37,6 +37,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;
@@ -57,19 +58,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,
@@ -224,6 +225,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());
   }
 
@@ -234,5 +246,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();
+    }
   }
 }

Reply via email to