You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by ru...@apache.org on 2021/03/15 01:47:04 UTC
[ratis] branch master updated: RATIS-1332. Always remove
raft-meta.tmp to clean uncommitted changes (#442)
This is an automated email from the ASF dual-hosted git repository.
runzhiwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git
The following commit(s) were added to refs/heads/master by this push:
new 5fba786 RATIS-1332. Always remove raft-meta.tmp to clean uncommitted changes (#442)
5fba786 is described below
commit 5fba786bdbd20adfab957f7ab8f35cb8c5ad6e26
Author: Symious <yi...@foxmail.com>
AuthorDate: Mon Mar 15 09:46:59 2021 +0800
RATIS-1332. Always remove raft-meta.tmp to clean uncommitted changes (#442)
Co-authored-by: Symious <yi...@gmail.com>
---
.../org/apache/ratis/server/storage/RaftStorageImpl.java | 8 +++++---
.../org/apache/ratis/server/storage/TestRaftStorage.java | 12 +++---------
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageImpl.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageImpl.java
index 25a0c4a..93772da 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageImpl.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageImpl.java
@@ -93,6 +93,11 @@ public class RaftStorageImpl implements RaftStorage {
private StorageState analyzeAndRecoverStorage(boolean toLock) throws IOException {
StorageState storageState = storageDir.analyzeStorage(toLock);
+ // Existence of raft-meta.tmp means the change of votedFor/term has not
+ // been committed. Thus we should delete the tmp file.
+ if (storageState != StorageState.NON_EXISTENT) {
+ cleanMetaTmpFile();
+ }
if (storageState == StorageState.NORMAL) {
final File f = storageDir.getMetaFile();
if (!f.exists()) {
@@ -101,9 +106,6 @@ public class RaftStorageImpl implements RaftStorage {
metaFile = new RaftStorageMetadataFileImpl(f);
final RaftStorageMetadata metadata = metaFile.getMetadata();
LOG.info("Read {} from {}", metadata, f);
- // Existence of raft-meta.tmp means the change of votedFor/term has not
- // been committed. Thus we should delete the tmp file.
- cleanMetaTmpFile();
return StorageState.NORMAL;
} else if (storageState == StorageState.NOT_FORMATTED &&
storageDir.isCurrentEmpty()) {
diff --git a/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java b/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
index 0dc85d8..678e432 100644
--- a/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
+++ b/ratis-test/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java
@@ -162,16 +162,10 @@ public class TestRaftStorage extends BaseTest {
Assert.assertEquals(StorageState.NOT_FORMATTED, sd.analyzeStorage(false));
- try {
- newRaftStorage(storageDir);
- Assert.fail("should throw IOException since storage dir is not formatted");
- } catch (IOException e) {
- Assert.assertTrue(
- e.getMessage().contains(StorageState.NOT_FORMATTED.name()));
- }
+ // RaftStorage initialization should succeed as the raft-meta.tmp is
+ // always cleaned.
+ newRaftStorage(storageDir).close();
- // let the storage dir contain both raft-meta and raft-meta.tmp
- formatRaftStorage(storageDir).close();
Assert.assertTrue(sd.getMetaFile().exists());
Assert.assertTrue(sd.getMetaTmpFile().createNewFile());
Assert.assertTrue(sd.getMetaTmpFile().exists());