X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=atomix-storage%2Fsrc%2Fmain%2Fjava%2Fio%2Fatomix%2Fstorage%2Fjournal%2FSegmentedJournal.java;h=7da4655a48591d1192be4be4a6f6419f0c2e9371;hb=a73511c1db6a099397418d2708e073546e8e0a1b;hp=f2d99eec533a094f36ef82476d8094f7f2ddd5cb;hpb=16bcd8d75886f4d9d8ad4e6833147aa516358adf;p=controller.git diff --git a/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournal.java b/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournal.java index f2d99eec53..7da4655a48 100644 --- a/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournal.java +++ b/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournal.java @@ -40,7 +40,6 @@ import static java.util.Objects.requireNonNull; * Segmented journal. */ public final class SegmentedJournal implements Journal { - /** * Returns a new Raft log builder. * @@ -91,7 +90,7 @@ public final class SegmentedJournal implements Journal { this.indexDensity = indexDensity; this.flushOnCommit = flushOnCommit; open(); - this.writer = openWriter(); + this.writer = new SegmentedJournalWriter<>(this); } /** @@ -194,13 +193,13 @@ public final class SegmentedJournal implements Journal { } @Override - public SegmentedJournalWriter writer() { + public JournalWriter writer() { return writer; } @Override - public SegmentedJournalReader openReader(long index) { - return openReader(index, SegmentedJournalReader.Mode.ALL); + public JournalReader openReader(long index) { + return openReader(index, JournalReader.Mode.ALL); } /** @@ -210,21 +209,22 @@ public final class SegmentedJournal implements Journal { * @param mode The mode in which to read entries. * @return The Raft log reader. */ - public SegmentedJournalReader openReader(long index, SegmentedJournalReader.Mode mode) { - SegmentedJournalReader reader = new SegmentedJournalReader<>(this, index, mode); + public JournalReader openReader(long index, JournalReader.Mode mode) { + final var segment = getSegment(index); + final var reader = switch (mode) { + case ALL -> new SegmentedJournalReader<>(this, segment); + case COMMITS -> new CommitsSegmentJournalReader<>(this, segment); + }; + + // Forward reader to specified index + for (long next = reader.getNextIndex(); index > next && reader.hasNext(); next = reader.getNextIndex()) { + reader.next(); + } + readers.add(reader); return reader; } - /** - * Opens a new journal writer. - * - * @return A new journal writer. - */ - protected SegmentedJournalWriter openWriter() { - return new SegmentedJournalWriter<>(this); - } - /** * Opens the segments. */