You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sh...@apache.org on 2020/05/18 05:51:02 UTC

[incubator-ratis] branch master updated: RATIS-930. Fix failed to remove RaftStorageDirectory (#101)

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

shashikant pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new 6064300  RATIS-930. Fix failed to remove RaftStorageDirectory (#101)
6064300 is described below

commit 60643005d0a6faaa25c1810fac9fcb68cda88c3b
Author: runzhiwang <51...@users.noreply.github.com>
AuthorDate: Mon May 18 13:50:56 2020 +0800

    RATIS-930. Fix failed to remove RaftStorageDirectory (#101)
---
 .../apache/ratis/server/impl/RaftServerImpl.java   | 26 ++++++++++++++++------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
index 083094a..2653936 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
@@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory;
 
 import javax.management.ObjectName;
 import java.io.IOException;
+import java.nio.file.NoSuchFileException;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionException;
@@ -274,15 +275,26 @@ public class RaftServerImpl implements RaftServerProtocol, RaftServerAsynchronou
       } catch (Exception ignored) {
         LOG.warn("{}: Failed to close state", getMemberId(), ignored);
       }
-      leaderElectionMetrics.unregister();
-      raftServerMetrics.unregister();
-      RaftServerMetrics.removeRaftServerMetrics(this);
+      try {
+        leaderElectionMetrics.unregister();
+        raftServerMetrics.unregister();
+        RaftServerMetrics.removeRaftServerMetrics(this);
+      } catch (Exception ignored) {
+        LOG.warn("{}: Failed to unregister metric", getMemberId(), ignored);
+      }
       if (deleteDirectory) {
         final RaftStorageDirectory dir = state.getStorage().getStorageDir();
-        try {
-          FileUtils.deleteFully(dir.getRoot());
-        } catch(Exception ignored) {
-          LOG.warn("{}: Failed to remove RaftStorageDirectory {}", getMemberId(), dir, ignored);
+        for (int i = 0; i < FileUtils.NUM_ATTEMPTS; i ++) {
+          try {
+            FileUtils.deleteFully(dir.getRoot());
+            LOG.info("{}: Succeed to remove RaftStorageDirectory {}", getMemberId(), dir);
+            break;
+          } catch (NoSuchFileException e) {
+            LOG.warn("{}: Some file does not exist {}", getMemberId(), dir, e);
+          } catch (Exception ignored) {
+            LOG.error("{}: Failed to remove RaftStorageDirectory {}", getMemberId(), dir, ignored);
+            break;
+          }
         }
       }
     });