[hbase] 06/16: HBASE-26248 Should find a suitable way to let users specify the store file tracker implementation (#3665)

2021-12-22 Thread elserj
This is an automated email from the ASF dual-hosted git repository.

elserj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 2052e80e5da50ec0598cc7c873de0357a4f894a5
Author: Duo Zhang 
AuthorDate: Tue Sep 14 16:28:21 2021 +0800

HBASE-26248 Should find a suitable way to let users specify the store file 
tracker implementation (#3665)

Signed-off-by: Wellington Chevreuil 
---
 .../MigrationStoreFileTracker.java | 13 ++-
 .../storefiletracker/StoreFileTracker.java |  7 +-
 .../storefiletracker/StoreFileTrackerBase.java | 12 +--
 .../storefiletracker/StoreFileTrackerFactory.java  | 97 +++---
 .../org/apache/hadoop/hbase/client/TestAdmin.java  |  6 +-
 .../org/apache/hadoop/hbase/client/TestAdmin3.java |  6 +-
 .../hbase/client/TestAsyncTableAdminApi.java   |  6 +-
 .../hbase/client/TestAsyncTableAdminApi3.java  |  6 +-
 .../procedure/MasterProcedureTestingUtility.java   |  6 +-
 .../master/procedure/TestCreateTableProcedure.java |  6 +-
 .../regionserver/TestMergesSplitsAddToTracker.java |  4 +-
 .../TestMigrationStoreFileTracker.java | 27 +++---
 .../TestRegionWithFileBasedStoreFileTracker.java   |  3 +-
 .../TestStoreFileTrackerFactory.java   | 58 +
 14 files changed, 202 insertions(+), 55 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
index 483a240..3eeef90 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.List;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
+import org.apache.hadoop.hbase.procedure2.util.StringUtils;
 import org.apache.hadoop.hbase.regionserver.StoreContext;
 import org.apache.hadoop.hbase.regionserver.StoreFileInfo;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -44,8 +45,8 @@ class MigrationStoreFileTracker extends StoreFileTrackerBase {
 
   public MigrationStoreFileTracker(Configuration conf, boolean 
isPrimaryReplica, StoreContext ctx) {
 super(conf, isPrimaryReplica, ctx);
-this.src = StoreFileTrackerFactory.create(conf, SRC_IMPL, 
isPrimaryReplica, ctx);
-this.dst = StoreFileTrackerFactory.create(conf, DST_IMPL, 
isPrimaryReplica, ctx);
+this.src = StoreFileTrackerFactory.createForMigration(conf, SRC_IMPL, 
isPrimaryReplica, ctx);
+this.dst = StoreFileTrackerFactory.createForMigration(conf, DST_IMPL, 
isPrimaryReplica, ctx);
 Preconditions.checkArgument(!src.getClass().equals(dst.getClass()),
   "src and dst is the same: %s", src.getClass());
   }
@@ -90,7 +91,11 @@ class MigrationStoreFileTracker extends StoreFileTrackerBase 
{
   @Override
   public void persistConfiguration(TableDescriptorBuilder builder) {
 super.persistConfiguration(builder);
-builder.setValue(SRC_IMPL, src.getClass().getName());
-builder.setValue(DST_IMPL, dst.getClass().getName());
+if (StringUtils.isEmpty(builder.getValue(SRC_IMPL))) {
+  builder.setValue(SRC_IMPL, src.getTrackerName());
+}
+if (StringUtils.isEmpty(builder.getValue(DST_IMPL))) {
+  builder.setValue(DST_IMPL, dst.getTrackerName());
+}
   }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
index 81fa1a9..59fe7ef 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
@@ -75,7 +75,12 @@ public interface StoreFileTracker {
   StoreFileWriter createWriter(CreateStoreFileWriterParams params) throws 
IOException;
 
   /**
-   * Saves StoreFileTracker implementations specific configs into the table 
descriptors.
+   * Saves StoreFileTracker implementations specific configurations into the 
table descriptors.
+   * 
+   * This is used to avoid accidentally data loss when changing the cluster 
level store file tracker
+   * implementation, and also possible misconfiguration between master and 
region servers.
+   * 
+   * See HBASE-26246 for more details.
* @param builder The table descriptor builder for the given table.
*/
   void persistConfiguration(TableDescriptorBuilder builder);
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTrackerBase.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/re

[hbase] 06/16: HBASE-26248 Should find a suitable way to let users specify the store file tracker implementation (#3665)

2021-12-17 Thread zhangduo
This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch HBASE-26067
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 56988dd89057d1cf4cf989dd3e1c727d25b56251
Author: Duo Zhang 
AuthorDate: Tue Sep 14 16:28:21 2021 +0800

HBASE-26248 Should find a suitable way to let users specify the store file 
tracker implementation (#3665)

Signed-off-by: Wellington Chevreuil 
---
 .../MigrationStoreFileTracker.java | 13 ++-
 .../storefiletracker/StoreFileTracker.java |  7 +-
 .../storefiletracker/StoreFileTrackerBase.java | 12 +--
 .../storefiletracker/StoreFileTrackerFactory.java  | 97 +++---
 .../org/apache/hadoop/hbase/client/TestAdmin.java  |  6 +-
 .../org/apache/hadoop/hbase/client/TestAdmin3.java |  6 +-
 .../hbase/client/TestAsyncTableAdminApi.java   |  6 +-
 .../hbase/client/TestAsyncTableAdminApi3.java  |  6 +-
 .../procedure/MasterProcedureTestingUtility.java   |  6 +-
 .../master/procedure/TestCreateTableProcedure.java |  6 +-
 .../regionserver/TestMergesSplitsAddToTracker.java |  4 +-
 .../TestMigrationStoreFileTracker.java | 27 +++---
 .../TestRegionWithFileBasedStoreFileTracker.java   |  3 +-
 .../TestStoreFileTrackerFactory.java   | 58 +
 14 files changed, 202 insertions(+), 55 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
index 483a240..3eeef90 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/MigrationStoreFileTracker.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.List;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
+import org.apache.hadoop.hbase.procedure2.util.StringUtils;
 import org.apache.hadoop.hbase.regionserver.StoreContext;
 import org.apache.hadoop.hbase.regionserver.StoreFileInfo;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -44,8 +45,8 @@ class MigrationStoreFileTracker extends StoreFileTrackerBase {
 
   public MigrationStoreFileTracker(Configuration conf, boolean 
isPrimaryReplica, StoreContext ctx) {
 super(conf, isPrimaryReplica, ctx);
-this.src = StoreFileTrackerFactory.create(conf, SRC_IMPL, 
isPrimaryReplica, ctx);
-this.dst = StoreFileTrackerFactory.create(conf, DST_IMPL, 
isPrimaryReplica, ctx);
+this.src = StoreFileTrackerFactory.createForMigration(conf, SRC_IMPL, 
isPrimaryReplica, ctx);
+this.dst = StoreFileTrackerFactory.createForMigration(conf, DST_IMPL, 
isPrimaryReplica, ctx);
 Preconditions.checkArgument(!src.getClass().equals(dst.getClass()),
   "src and dst is the same: %s", src.getClass());
   }
@@ -90,7 +91,11 @@ class MigrationStoreFileTracker extends StoreFileTrackerBase 
{
   @Override
   public void persistConfiguration(TableDescriptorBuilder builder) {
 super.persistConfiguration(builder);
-builder.setValue(SRC_IMPL, src.getClass().getName());
-builder.setValue(DST_IMPL, dst.getClass().getName());
+if (StringUtils.isEmpty(builder.getValue(SRC_IMPL))) {
+  builder.setValue(SRC_IMPL, src.getTrackerName());
+}
+if (StringUtils.isEmpty(builder.getValue(DST_IMPL))) {
+  builder.setValue(DST_IMPL, dst.getTrackerName());
+}
   }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
index 81fa1a9..59fe7ef 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
@@ -75,7 +75,12 @@ public interface StoreFileTracker {
   StoreFileWriter createWriter(CreateStoreFileWriterParams params) throws 
IOException;
 
   /**
-   * Saves StoreFileTracker implementations specific configs into the table 
descriptors.
+   * Saves StoreFileTracker implementations specific configurations into the 
table descriptors.
+   * 
+   * This is used to avoid accidentally data loss when changing the cluster 
level store file tracker
+   * implementation, and also possible misconfiguration between master and 
region servers.
+   * 
+   * See HBASE-26246 for more details.
* @param builder The table descriptor builder for the given table.
*/
   void persistConfiguration(TableDescriptorBuilder builder);
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTrackerBase.java
 
b/hbase-server/src/main/java/org/apache/hadoop/h