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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9d73c8445c5 Clear storage engine snapshot after region migration 
(#12975)
9d73c8445c5 is described below

commit 9d73c8445c5b22dbe3c556ce4b3ceaa970b98d30
Author: Li Yu Heng <[email protected]>
AuthorDate: Fri Jul 19 16:24:03 2024 +0800

    Clear storage engine snapshot after region migration (#12975)
    
    * gg
    
    * add comment
---
 .../org/apache/iotdb/consensus/IStateMachine.java  |  9 ++++++++
 .../consensus/iot/IoTConsensusServerImpl.java      |  1 +
 .../dataregion/DataRegionStateMachine.java         |  9 +++++++-
 .../dataregion/snapshot/SnapshotTaker.java         | 25 ++++++++++++++++++++++
 4 files changed, 43 insertions(+), 1 deletion(-)

diff --git 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/IStateMachine.java
 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/IStateMachine.java
index 7f9666078a5..d1f59d7a7b7 100644
--- 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/IStateMachine.java
+++ 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/IStateMachine.java
@@ -90,6 +90,15 @@ public interface IStateMachine {
     return takeSnapshot(snapshotDir);
   }
 
+  /**
+   * Clear snapshot of current statemachine.
+   *
+   * @return true if all snapshot dir delete successfully
+   */
+  default boolean clearSnapshot() {
+    throw new UnsupportedOperationException("not implemented yet");
+  }
+
   /**
    * Load the latest snapshot from given dir.
    *
diff --git 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/IoTConsensusServerImpl.java
 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/IoTConsensusServerImpl.java
index 4ac574d282a..1f5dbc41010 100644
--- 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/IoTConsensusServerImpl.java
+++ 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/iot/IoTConsensusServerImpl.java
@@ -890,6 +890,7 @@ public class IoTConsensusServerImpl {
   public void cleanupLocalSnapshot() {
     try {
       cleanupSnapshot(newSnapshotDirName);
+      stateMachine.clearSnapshot();
     } catch (ConsensusGroupModifyPeerException e) {
       logger.warn(
           "Cleanup local snapshot fail. You may manually delete {}.", 
newSnapshotDirName, e);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataRegionStateMachine.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataRegionStateMachine.java
index 2cc420e1f86..e60ee576a8e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataRegionStateMachine.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataRegionStateMachine.java
@@ -92,7 +92,9 @@ public class DataRegionStateMachine extends BaseStateMachine {
   @Override
   public boolean takeSnapshot(File snapshotDir) {
     try {
-      return new 
SnapshotTaker(region).takeFullSnapshot(snapshotDir.getAbsolutePath(), true);
+      SnapshotTaker snapshotTaker = new SnapshotTaker(region);
+      snapshotTaker.cleanSnapshot();
+      return snapshotTaker.takeFullSnapshot(snapshotDir.getAbsolutePath(), 
true);
     } catch (Exception e) {
       logger.error(
           "Exception occurs when taking snapshot for {}-{} in {}",
@@ -120,6 +122,11 @@ public class DataRegionStateMachine extends 
BaseStateMachine {
     }
   }
 
+  @Override
+  public boolean clearSnapshot() {
+    return SnapshotTaker.clearSnapshotOfDataRegion(region);
+  }
+
   @Override
   public void loadSnapshot(File latestSnapshotRootDir) {
     DataRegion newRegion =
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/snapshot/SnapshotTaker.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/snapshot/SnapshotTaker.java
index 5fcbe60e9f6..5712e989a77 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/snapshot/SnapshotTaker.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/snapshot/SnapshotTaker.java
@@ -134,6 +134,31 @@ public class SnapshotTaker {
     }
   }
 
+  public boolean cleanSnapshot() {
+    return clearSnapshotOfDataRegion(this.dataRegion);
+  }
+
+  public static boolean clearSnapshotOfDataRegion(DataRegion dataRegion) {
+    String[] dataDirs = 
IoTDBDescriptor.getInstance().getConfig().getDataDirs();
+    boolean allSuccess = true;
+    for (String dataDir : dataDirs) {
+      StringBuilder pathBuilder = new StringBuilder(dataDir);
+      
pathBuilder.append(File.separator).append(IoTDBConstant.SNAPSHOT_FOLDER_NAME);
+      pathBuilder.append(File.separator).append(dataRegion.getDatabaseName());
+      
pathBuilder.append(IoTDBConstant.FILE_NAME_SEPARATOR).append(dataRegion.getDataRegionId());
+      try {
+        FileUtils.recursivelyDeleteFolder(pathBuilder.toString());
+      } catch (IOException e) {
+        allSuccess = false;
+        LOGGER.warn(
+            "Clear snapshot dir fail, you should manually delete this dir 
before do region migration again: {}",
+            pathBuilder,
+            e);
+      }
+    }
+    return allSuccess;
+  }
+
   private void readLockTheFile() {
     TsFileManager manager = dataRegion.getTsFileManager();
     manager.readLock();

Reply via email to