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

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


The following commit(s) were added to refs/heads/branch-3 by this push:
     new a13fbb9fadc HBASE-29257 SnapshotTableAction should have ways to clean 
up snapshots (#6924)
a13fbb9fadc is described below

commit a13fbb9fadc122f9a6e08e85b292d5bb5994d16b
Author: Duo Zhang <[email protected]>
AuthorDate: Sun May 4 22:16:45 2025 +0800

    HBASE-29257 SnapshotTableAction should have ways to clean up snapshots 
(#6924)
    
    Signed-off-by: Nick Dimiduk <[email protected]>
    (cherry picked from commit 5dafa9e3224a1a337643642d296640b72a43f74a)
---
 .../hbase/chaos/actions/SnapshotTableAction.java   | 22 ++++++++++++++++++----
 .../chaos/factories/MobNoKillMonkeyFactory.java    |  3 ++-
 .../MobSlowDeterministicMonkeyFactory.java         | 13 +++++++++----
 .../hbase/chaos/factories/MonkeyConstants.java     |  8 +++++---
 .../hbase/chaos/factories/NoKillMonkeyFactory.java |  3 ++-
 .../factories/SlowDeterministicMonkeyFactory.java  | 14 +++++++++-----
 6 files changed, 45 insertions(+), 18 deletions(-)

diff --git 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/SnapshotTableAction.java
 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/SnapshotTableAction.java
index 89f2413f231..378a237af0f 100644
--- 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/SnapshotTableAction.java
+++ 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/SnapshotTableAction.java
@@ -17,13 +17,19 @@
  */
 package org.apache.hadoop.hbase.chaos.actions;
 
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
 import org.apache.hadoop.hbase.HBaseTestingUtil;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.Admin;
+import org.apache.hadoop.hbase.client.SnapshotType;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableMap;
+
 /**
  * Action that tries to take a snapshot of a table.
  */
@@ -31,14 +37,20 @@ public class SnapshotTableAction extends Action {
   private static final Logger LOG = 
LoggerFactory.getLogger(SnapshotTableAction.class);
   private final TableName tableName;
   private final long sleepTime;
+  private final Map<String, Object> snapshotProps;
 
-  public SnapshotTableAction(TableName tableName) {
-    this(-1, tableName);
+  public SnapshotTableAction(TableName tableName, long ttl) {
+    this(-1, tableName, ttl);
   }
 
-  public SnapshotTableAction(int sleepTime, TableName tableName) {
+  public SnapshotTableAction(int sleepTime, TableName tableName, long ttl) {
     this.tableName = tableName;
     this.sleepTime = sleepTime;
+    if (ttl > 0) {
+      snapshotProps = ImmutableMap.of("TTL", ttl);
+    } else {
+      snapshotProps = Collections.emptyMap();
+    }
   }
 
   @Override
@@ -58,7 +70,9 @@ public class SnapshotTableAction extends Action {
     }
 
     getLogger().info("Performing action: Snapshot table {}", tableName);
-    admin.snapshot(snapshotName, tableName);
+    SnapshotType type =
+      ThreadLocalRandom.current().nextBoolean() ? SnapshotType.FLUSH : 
SnapshotType.SKIPFLUSH;
+    admin.snapshot(snapshotName, tableName, type, snapshotProps);
     if (sleepTime > 0) {
       Thread.sleep(sleepTime);
     }
diff --git 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobNoKillMonkeyFactory.java
 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobNoKillMonkeyFactory.java
index 846c9cf01e0..b08e94b7b8c 100644
--- 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobNoKillMonkeyFactory.java
+++ 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobNoKillMonkeyFactory.java
@@ -55,7 +55,8 @@ public class MobNoKillMonkeyFactory extends MonkeyFactory {
       new MoveRandomRegionOfTableAction(tableName) };
 
     Action[] actions2 = new Action[] { new 
SplitRandomRegionOfTableAction(tableName),
-      new MergeRandomAdjacentRegionsOfTableAction(tableName), new 
SnapshotTableAction(tableName),
+      new MergeRandomAdjacentRegionsOfTableAction(tableName),
+      new SnapshotTableAction(tableName, 
MonkeyConstants.DEFAULT_SNAPSHOT_TABLE_TTL),
       new AddColumnAction(tableName), new RemoveColumnAction(tableName, 
columnFamilies),
       new ChangeEncodingAction(tableName), new 
ChangeCompressionAction(tableName),
       new ChangeBloomFilterAction(tableName), new 
ChangeVersionsAction(tableName) };
diff --git 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobSlowDeterministicMonkeyFactory.java
 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobSlowDeterministicMonkeyFactory.java
index a68a8fc2f14..ef8c307fad8 100644
--- 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobSlowDeterministicMonkeyFactory.java
+++ 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MobSlowDeterministicMonkeyFactory.java
@@ -67,6 +67,7 @@ public class MobSlowDeterministicMonkeyFactory extends 
MonkeyFactory {
   private long restartRsHoldingMetaSleepTime;
   private float compactTableRatio;
   private float compactRandomRegionRatio;
+  private long snapshotTableTtl;
 
   @Override
   public ChaosMonkey build() {
@@ -85,10 +86,11 @@ public class MobSlowDeterministicMonkeyFactory extends 
MonkeyFactory {
     // They should not cause data loss, or unreliability
     // such as region stuck in transition.
     Action[] actions2 = new Action[] { new 
SplitRandomRegionOfTableAction(tableName),
-      new MergeRandomAdjacentRegionsOfTableAction(tableName), new 
SnapshotTableAction(tableName),
-      new AddColumnAction(tableName), new RemoveColumnAction(tableName, 
columnFamilies),
-      new ChangeEncodingAction(tableName), new 
ChangeCompressionAction(tableName),
-      new ChangeBloomFilterAction(tableName), new 
ChangeVersionsAction(tableName) };
+      new MergeRandomAdjacentRegionsOfTableAction(tableName),
+      new SnapshotTableAction(tableName, snapshotTableTtl), new 
AddColumnAction(tableName),
+      new RemoveColumnAction(tableName, columnFamilies), new 
ChangeEncodingAction(tableName),
+      new ChangeCompressionAction(tableName), new 
ChangeBloomFilterAction(tableName),
+      new ChangeVersionsAction(tableName) };
 
     // Destructive actions to mess things around.
     Action[] actions3 = new Action[] {
@@ -158,5 +160,8 @@ public class MobSlowDeterministicMonkeyFactory extends 
MonkeyFactory {
     compactRandomRegionRatio =
       
Float.parseFloat(this.properties.getProperty(MonkeyConstants.COMPACT_RANDOM_REGION_RATIO,
         MonkeyConstants.DEFAULT_COMPACT_RANDOM_REGION_RATIO + ""));
+    snapshotTableTtl =
+      
Long.parseLong(this.properties.getProperty(MonkeyConstants.SNAPSHOT_TABLE_TTL,
+        MonkeyConstants.DEFAULT_SNAPSHOT_TABLE_TTL + ""));
   }
 }
diff --git 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.java
 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.java
index fa001e08544..f906eb863da 100644
--- 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.java
+++ 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.java
@@ -62,13 +62,14 @@ public interface MonkeyConstants {
   String FILL_DISK_FILE_SIZE = "fill.disk.file.size";
   String FILL_DISK_ISSUE_DURATION = "fill.disk.issue.duration";
   String DATA_ISSUE_CHANCE = "data.issue.chance";
+  String SNAPSHOT_TABLE_TTL = "snapshot.table.ttl";
 
   /**
    * A Set of prefixes which encompasses all of the configuration properties 
for the ChaosMonky.
    */
-  Set<String> MONKEY_CONFIGURATION_KEY_PREFIXES = new HashSet<>(
-    Arrays.asList("sdm.", "move.", "restart.", "batch.", "rolling.", 
"compact.", "unbalance.",
-      "decrease.", "decrease.", "graceful.", "cpu.", "network.", "fill.", 
"data.", "skip"));
+  Set<String> MONKEY_CONFIGURATION_KEY_PREFIXES = new 
HashSet<>(Arrays.asList("sdm.", "move.",
+    "restart.", "batch.", "rolling.", "compact.", "unbalance.", "decrease.", 
"decrease.",
+    "graceful.", "cpu.", "network.", "fill.", "data.", "snapshot.", "skip"));
 
   long DEFAULT_PERIODIC_ACTION1_PERIOD = 60 * 1000;
   long DEFAULT_PERIODIC_ACTION2_PERIOD = 90 * 1000;
@@ -108,4 +109,5 @@ public interface MonkeyConstants {
   long DEFAULT_FILL_DISK_FILE_SIZE = 0;
   long DEFAULT_FILL_DISK_ISSUE_DURATION = 5 * 60 * 1000;
   float DEFAULT_DATA_ISSUE_CHANCE = 0.01f;
+  long DEFAULT_SNAPSHOT_TABLE_TTL = -1L;
 }
diff --git 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/NoKillMonkeyFactory.java
 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/NoKillMonkeyFactory.java
index 1bc166e9e17..a9529e40b97 100644
--- 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/NoKillMonkeyFactory.java
+++ 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/NoKillMonkeyFactory.java
@@ -54,7 +54,8 @@ public class NoKillMonkeyFactory extends MonkeyFactory {
       new MoveRandomRegionOfTableAction(tableName) };
 
     Action[] actions2 = new Action[] { new 
SplitRandomRegionOfTableAction(tableName),
-      new MergeRandomAdjacentRegionsOfTableAction(tableName), new 
SnapshotTableAction(tableName),
+      new MergeRandomAdjacentRegionsOfTableAction(tableName),
+      new SnapshotTableAction(tableName, 
MonkeyConstants.DEFAULT_SNAPSHOT_TABLE_TTL),
       new AddColumnAction(tableName), new RemoveColumnAction(tableName, 
columnFamilies),
       new ChangeEncodingAction(tableName), new 
ChangeCompressionAction(tableName),
       new ChangeBloomFilterAction(tableName), new 
ChangeVersionsAction(tableName) };
diff --git 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/SlowDeterministicMonkeyFactory.java
 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/SlowDeterministicMonkeyFactory.java
index 876402111a7..56557768343 100644
--- 
a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/SlowDeterministicMonkeyFactory.java
+++ 
b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/factories/SlowDeterministicMonkeyFactory.java
@@ -71,6 +71,7 @@ public class SlowDeterministicMonkeyFactory extends 
MonkeyFactory {
   private long gracefulRollingRestartTSSLeepTime;
   private long rollingBatchSuspendRSSleepTime;
   private float rollingBatchSuspendtRSRatio;
+  private long snapshotTableTtl;
 
   protected Action[] getLightWeightedActions() {
     return new Action[] { new CompactTableAction(tableName, compactTableRatio),
@@ -81,11 +82,11 @@ public class SlowDeterministicMonkeyFactory extends 
MonkeyFactory {
 
   protected Action[] getMidWeightedActions() {
     return new Action[] { new SplitRandomRegionOfTableAction(tableName),
-      new MergeRandomAdjacentRegionsOfTableAction(tableName), new 
SnapshotTableAction(tableName),
-      new AddColumnAction(tableName), new RemoveColumnAction(tableName, 
columnFamilies),
-      new ChangeEncodingAction(tableName), new 
ChangeCompressionAction(tableName),
-      new ChangeBloomFilterAction(tableName), new 
ChangeVersionsAction(tableName),
-      new ChangeSplitPolicyAction(tableName), };
+      new MergeRandomAdjacentRegionsOfTableAction(tableName),
+      new SnapshotTableAction(tableName, snapshotTableTtl), new 
AddColumnAction(tableName),
+      new RemoveColumnAction(tableName, columnFamilies), new 
ChangeEncodingAction(tableName),
+      new ChangeCompressionAction(tableName), new 
ChangeBloomFilterAction(tableName),
+      new ChangeVersionsAction(tableName), new 
ChangeSplitPolicyAction(tableName), };
   }
 
   protected Action[] getHeavyWeightedActions() {
@@ -193,5 +194,8 @@ public class SlowDeterministicMonkeyFactory extends 
MonkeyFactory {
     rollingBatchSuspendtRSRatio =
       
Float.parseFloat(this.properties.getProperty(MonkeyConstants.ROLLING_BATCH_SUSPEND_RS_RATIO,
         MonkeyConstants.DEFAULT_ROLLING_BATCH_SUSPEND_RS_RATIO + ""));
+    snapshotTableTtl =
+      
Long.parseLong(this.properties.getProperty(MonkeyConstants.SNAPSHOT_TABLE_TTL,
+        MonkeyConstants.DEFAULT_SNAPSHOT_TABLE_TTL + ""));
   }
 }

Reply via email to