You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sz...@apache.org on 2018/04/24 18:10:34 UTC
incubator-ratis git commit: RATIS-228. Handle zero size
log_inprogress file. Contributed by Kit Hui
Repository: incubator-ratis
Updated Branches:
refs/heads/master bbc79cf46 -> 55fffd96b
RATIS-228. Handle zero size log_inprogress file. Contributed by Kit Hui
Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/55fffd96
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/55fffd96
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/55fffd96
Branch: refs/heads/master
Commit: 55fffd96b8b1c31e1a4b9549b26657c881eea02e
Parents: bbc79cf
Author: Tsz Sze <sz...@HW14119.local>
Authored: Tue Apr 24 11:09:06 2018 -0700
Committer: Tsz Sze <sz...@HW14119.local>
Committed: Tue Apr 24 11:09:06 2018 -0700
----------------------------------------------------------------------
.../apache/ratis/server/storage/LogSegment.java | 5 ++++-
.../server/storage/RaftStorageDirectory.java | 10 +++++++---
.../server/storage/TestRaftLogSegment.java | 21 ++++++++++++++++++++
3 files changed, 32 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/55fffd96/ratis-server/src/main/java/org/apache/ratis/server/storage/LogSegment.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/LogSegment.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/LogSegment.java
index 61fda5c..827e2e3 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/storage/LogSegment.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/LogSegment.java
@@ -138,7 +138,10 @@ class LogSegment implements Comparable<Long> {
FileUtils.truncateFile(file, segment.getTotalSize());
}
- Preconditions.assertTrue(start == segment.records.get(0).getTermIndex().getIndex());
+ Preconditions.assertTrue(start == segment.getStartIndex());
+ if (!segment.records.isEmpty()) {
+ Preconditions.assertTrue(start == segment.records.get(0).getTermIndex().getIndex());
+ }
if (!isOpen) {
Preconditions.assertTrue(segment.getEndIndex() == end);
}
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/55fffd96/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageDirectory.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageDirectory.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageDirectory.java
index 530f679..ded7d52 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageDirectory.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageDirectory.java
@@ -52,8 +52,6 @@ public class RaftStorageDirectory {
static final Pattern CLOSED_SEGMENT_REGEX = Pattern.compile("log_(\\d+)-(\\d+)");
static final Pattern OPEN_SEGMENT_REGEX = Pattern.compile("log_inprogress_(\\d+)(?:\\..*)?");
- private static final List<Pattern> LOGSEGMENTS_REGEXES =
- Arrays.asList(CLOSED_SEGMENT_REGEX, OPEN_SEGMENT_REGEX);
enum StorageState {
NON_EXISTENT,
@@ -182,13 +180,19 @@ public class RaftStorageDirectory {
try (DirectoryStream<Path> stream =
Files.newDirectoryStream(getCurrentDir().toPath())) {
for (Path path : stream) {
- for (Pattern pattern : LOGSEGMENTS_REGEXES) {
+ for (Pattern pattern : Arrays.asList(CLOSED_SEGMENT_REGEX, OPEN_SEGMENT_REGEX)) {
Matcher matcher = pattern.matcher(path.getFileName().toString());
if (matcher.matches()) {
+ if (pattern == OPEN_SEGMENT_REGEX && Files.size(path) == 0L) {
+ Files.delete(path);
+ LOG.info("Delete zero size file " + path);
+ break;
+ }
final long startIndex = Long.parseLong(matcher.group(1));
final long endIndex = matcher.groupCount() == 2 ?
Long.parseLong(matcher.group(2)) : INVALID_LOG_INDEX;
list.add(new LogPathAndIndex(path, startIndex, endIndex));
+ break;
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/55fffd96/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
index 26477c2..690ad59 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java
@@ -37,6 +37,8 @@ import org.junit.Test;
import java.io.File;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -320,4 +322,23 @@ public class TestRaftLogSegment extends BaseTest {
Assert.assertEquals(totalSize, file.length());
}
+
+ @Test
+ public void testZeroSizeInProgressFile() throws Exception {
+ final RaftStorage storage = new RaftStorage(storageDir, StartupOption.REGULAR);
+ final File file = storage.getStorageDir().getOpenLogFile(0);
+ storage.close();
+
+ // create zero size in-progress file
+ LOG.info("file: " + file);
+ Assert.assertTrue(file.createNewFile());
+ final Path path = file.toPath();
+ Assert.assertTrue(Files.exists(path));
+ Assert.assertEquals(0, Files.size(path));
+
+ // getLogSegmentFiles should remove it.
+ final List<RaftStorageDirectory.LogPathAndIndex> logs = storage.getStorageDir().getLogSegmentFiles();
+ Assert.assertEquals(0, logs.size());
+ Assert.assertFalse(Files.exists(path));
+ }
}