in ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java [482:525]
void groupRemove(boolean deleteDirectory, boolean renameDirectory) {
final RaftStorageDirectory dir = state.getStorage().getStorageDir();
/* Shutdown is triggered here inorder to avoid any locked files. */
state.getStateMachineUpdater().setRemoving();
close();
try {
closeFinishedLatch.await();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
LOG.warn("{}: Waiting closing interrupted, will not continue to remove group locally", getMemberId());
return;
}
getStateMachine().event().notifyGroupRemove();
if (deleteDirectory) {
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 e) {
LOG.error("{}: Failed to remove RaftStorageDirectory {}", getMemberId(), dir, e);
break;
}
}
} else if(renameDirectory) {
try {
/* Create path with current group in REMOVED_GROUPS_DIR_KEY location */
File toBeRemovedGroupFolder = new File(RaftServerConfigKeys
.removedGroupsDir(proxy.getProperties()),
dir.getRoot().getName());
FileUtils.moveDirectory(dir.getRoot().toPath(),
toBeRemovedGroupFolder.toPath());
LOG.info("{}: Group {} is renamed successfully", getMemberId(), getGroup());
} catch (IOException e) {
LOG.warn("{}: Failed to remove group {}", getMemberId(),
dir.getRoot().getName(), e);
}
}
}