From: Robert Varga Date: Sat, 23 Mar 2024 12:27:22 +0000 (+0100) Subject: Simplify JournalSegmentReader entry access X-Git-Tag: v9.0.2~22 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=926877f74ff564663d1e892cbad4c13a25e7e373;hp=2a6738b69c763377d1f727da9876ffdd9058262f 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 --- 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