Skip to content

Commit

Permalink
RATIS-1887. Gap between segement log (apache#919)
Browse files Browse the repository at this point in the history
  • Loading branch information
guohao-rosicky authored Sep 18, 2023
1 parent 979b38a commit 05f3922
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,20 @@ public class SegmentedRaftLogCache {
public static final Logger LOG = LoggerFactory.getLogger(SegmentedRaftLogCache.class);

static final class SegmentFileInfo {
static final SegmentFileInfo[] EMPTY_ARRAY = {};
static final Comparator<SegmentFileInfo> REVERSED_ORDER = Comparator.comparingLong(SegmentFileInfo::getStartIndex)
.thenComparingLong(SegmentFileInfo::getEndIndex)
.reversed();

static SegmentFileInfo[] toSortedArray(List<SegmentFileInfo> list) {
if (list == null) {
return EMPTY_ARRAY;
}
final SegmentFileInfo[] array = list.toArray(EMPTY_ARRAY);
Arrays.sort(array, REVERSED_ORDER);
return array;
}

static SegmentFileInfo newClosedSegmentFileInfo(LogSegment ls) {
Objects.requireNonNull(ls, "ls == null");
Preconditions.assertTrue(!ls.isOpen(), () -> ls + " is OPEN");
Expand Down Expand Up @@ -121,8 +135,7 @@ public SegmentFileInfo[] getToDelete() {

TruncationSegments(SegmentFileInfo toTruncate,
List<SegmentFileInfo> toDelete) {
this.toDelete = toDelete == null ? null :
toDelete.toArray(new SegmentFileInfo[toDelete.size()]);
this.toDelete = SegmentFileInfo.toSortedArray(toDelete);
this.toTruncate = toTruncate;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,21 @@ private class TruncateLog extends Task {
void execute() throws IOException {
freeSegmentedRaftLogOutputStream();

if (segments.getToDelete() != null && segments.getToDelete().length > 0) {
long minStart = segments.getToDelete()[0].getStartIndex();
for (SegmentFileInfo del : segments.getToDelete()) {
final File delFile = del.getFile(storage);
Preconditions.assertTrue(delFile.exists(),
"File %s to be deleted does not exist", delFile);
FileUtils.deleteFile(delFile);
LOG.info("{}: Deleted log file {}", name, delFile);
minStart = Math.min(minStart, del.getStartIndex());
}
if (segments.getToTruncate() == null) {
lastWrittenIndex = minStart - 1;
}
}

if (segments.getToTruncate() != null) {
final File fileToTruncate = segments.getToTruncate().getFile(storage);
Preconditions.assertTrue(fileToTruncate.exists(),
Expand All @@ -674,20 +689,7 @@ void execute() throws IOException {
// update lastWrittenIndex
lastWrittenIndex = segments.getToTruncate().getNewEndIndex();
}
if (segments.getToDelete() != null && segments.getToDelete().length > 0) {
long minStart = segments.getToDelete()[0].getStartIndex();
for (SegmentFileInfo del : segments.getToDelete()) {
final File delFile = del.getFile(storage);
Preconditions.assertTrue(delFile.exists(),
"File %s to be deleted does not exist", delFile);
FileUtils.deleteFile(delFile);
LOG.info("{}: Deleted log file {}", name, delFile);
minStart = Math.min(minStart, del.getStartIndex());
}
if (segments.getToTruncate() == null) {
lastWrittenIndex = minStart - 1;
}
}

if (stateMachineFuture != null) {
IOUtils.getFromFuture(stateMachineFuture, () -> this + "-truncateStateMachineData");
}
Expand Down

0 comments on commit 05f3922

Please sign in to comment.