You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/08/31 09:44:11 UTC
[iotdb] branch master updated: [IOTDB-4027] Ratis snapshot atomicity: Reorder (#7178)
This is an automated email from the ASF dual-hosted git repository.
jackietien 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 0d47aab530 [IOTDB-4027] Ratis snapshot atomicity: Reorder (#7178)
0d47aab530 is described below
commit 0d47aab5304d01d3e094ddd64f11a9c35a0adb7b
Author: William Song <48...@users.noreply.github.com>
AuthorDate: Wed Aug 31 17:44:04 2022 +0800
[IOTDB-4027] Ratis snapshot atomicity: Reorder (#7178)
---
.../ratis/ApplicationStateMachineProxy.java | 29 ++++++++++++++--------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java
index be98aac33b..071bb266b4 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java
@@ -181,24 +181,31 @@ public class ApplicationStateMachineProxy extends BaseStateMachine {
}
boolean applicationTakeSnapshotSuccess = applicationStateMachine.takeSnapshot(snapshotDir);
+ if (!applicationTakeSnapshotSuccess) {
+ deleteIncompleteSnapshot(snapshotDir);
+ return RaftLog.INVALID_LOG_INDEX;
+ }
+
boolean addTermIndexMetafileSuccess =
snapshotStorage.addTermIndexMetaFile(snapshotDir, metadata);
-
- if (!applicationTakeSnapshotSuccess || !addTermIndexMetafileSuccess) {
- // this takeSnapshot failed, clean up files and directories
- // statemachine is supposed to clear snapshotDir on failure
- boolean isEmpty = snapshotDir.delete();
- if (!isEmpty) {
- logger.warn(
- "StateMachine take snapshot failed but leave unexpected remaining files at "
- + snapshotDir.getAbsolutePath());
- FileUtils.deleteFully(snapshotDir);
- }
+ if (!addTermIndexMetafileSuccess) {
+ deleteIncompleteSnapshot(snapshotDir);
return RaftLog.INVALID_LOG_INDEX;
}
+
return lastApplied.getIndex();
}
+ private void deleteIncompleteSnapshot(File snapshotDir) throws IOException {
+ // this takeSnapshot failed, clean up files and directories
+ // statemachine is supposed to clear snapshotDir on failure
+ boolean isEmpty = snapshotDir.delete();
+ if (!isEmpty) {
+ logger.info("Snapshot directory is incomplete, deleting " + snapshotDir.getAbsolutePath());
+ FileUtils.deleteFully(snapshotDir);
+ }
+ }
+
private void loadSnapshot(File latestSnapshotDir) {
if (latestSnapshotDir == null) {
return;