From 926877f74ff564663d1e892cbad4c13a25e7e373 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 23 Mar 2024 13:27:22 +0100 Subject: [PATCH] Simplify JournalSegmentReader entry access The only user is SegmentedJournalReader, which is using these methods to implement its tryNext() operation. Mirror this with JournalSegmentReader.tryNext(), which simplifies some of the logic. JIRA: CONTROLLER-2109 Change-Id: Id104743b16199b4734b322d1397b85280f03346b Signed-off-by: Robert Varga --- .../storage/journal/JournalSegmentReader.java | 26 +++++++------------ .../journal/SegmentedJournalReader.java | 10 ++++--- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegmentReader.java b/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegmentReader.java index c9f8c1b05d..36cd6ef5c3 100644 --- a/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegmentReader.java +++ b/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegmentReader.java @@ -19,7 +19,6 @@ import static java.util.Objects.requireNonNull; import io.atomix.storage.journal.index.JournalIndex; import io.atomix.storage.journal.index.Position; -import java.util.NoSuchElementException; import org.eclipse.jdt.annotation.Nullable; abstract sealed class JournalSegmentReader permits DiskJournalSegmentReader, MappedJournalSegmentReader { @@ -59,24 +58,17 @@ abstract sealed class JournalSegmentReader permits DiskJournalSegmentReader, return currentEntry != null ? currentEntry.index() + 1 : firstIndex; } - /** - * Returns whether the reader has a next entry to read. - * - * @return Whether the reader has a next entry to read. - */ - final boolean hasNext() { - return nextEntry != null || (nextEntry = readNext()) != null; - } - /** * Returns the next entry in the reader. * - * @return The next entry in the reader. - * @throws UnsupportedOperationException if there is no such entry + * @return The next entry in the reader, or {@code null} */ - final Indexed next() { - if (!hasNext()) { - throw new NoSuchElementException(); + final @Nullable Indexed tryNext() { + if (nextEntry == null) { + nextEntry = readNext(); + } + if (nextEntry == null) { + return null; } // Set the current entry to the next entry. @@ -116,8 +108,8 @@ abstract sealed class JournalSegmentReader permits DiskJournalSegmentReader, setPosition(position.position()); nextEntry = readNext(); } - while (getNextIndex() < index && hasNext()) { - next(); + while (getNextIndex() < index && tryNext() != null) { + // Nothing else } } diff --git a/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalReader.java b/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalReader.java index 3f5d3f9e4f..50270442e7 100644 --- a/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalReader.java +++ b/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalReader.java @@ -118,9 +118,11 @@ sealed class SegmentedJournalReader implements JournalReader permits Commi @Override public Indexed tryNext() { - if (currentReader.hasNext()) { - previousEntry = currentReader.getCurrentEntry(); - return currentReader.next(); + final var current = currentReader.getCurrentEntry(); + final var next = currentReader.tryNext(); + if (next != null) { + previousEntry = current; + return next; } final var nextSegment = journal.getNextSegment(currentSegment.index()); @@ -133,7 +135,7 @@ sealed class SegmentedJournalReader implements JournalReader permits Commi currentSegment = nextSegment; currentReader = currentSegment.createReader(); - return currentReader.hasNext() ? currentReader.next() : null; + return currentReader.tryNext(); } @Override -- 2.36.6