From: Robert Varga Date: Mon, 11 Mar 2024 10:45:51 +0000 (+0100) Subject: Rework JournalSegment writer access X-Git-Tag: v9.0.1~32 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=ec6312137be61efb00cc03ef745bf6e0af31a0f8;hp=f00cb3b9fb1237ee90b2c8bc07821213b4345fb0 Rework JournalSegment writer access The only user of JournalSegment.writer() is SegmentedJournalWriter, which is using acquire/release to guard access to the writer. Rework these methods so that acquire/release are internal and exposed functionality is acquireWriter() and releaseWriter(). JIRA: CONTROLLER-2098 Change-Id: I345cec145fd82ee59c525d183584d69a9e599bf9 Signed-off-by: Robert Varga --- diff --git a/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegment.java b/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegment.java index f5e1b83bbf..992c56ddfc 100644 --- a/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegment.java +++ b/atomix-storage/src/main/java/io/atomix/storage/journal/JournalSegment.java @@ -156,7 +156,7 @@ final class JournalSegment implements AutoCloseable { /** * Acquires a reference to the log segment. */ - void acquire() { + private void acquire() { if (references.getAndIncrement() == 0 && storageLevel == StorageLevel.MAPPED) { writer.map(); } @@ -165,7 +165,7 @@ final class JournalSegment implements AutoCloseable { /** * Releases a reference to the log segment. */ - void release() { + private void release() { if (references.decrementAndGet() == 0) { if (storageLevel == StorageLevel.MAPPED) { writer.unmap(); @@ -177,15 +177,24 @@ final class JournalSegment implements AutoCloseable { } /** - * Returns the segment writer. + * Acquires a reference to the segment writer. * * @return The segment writer. */ - public MappableJournalSegmentWriter writer() { + MappableJournalSegmentWriter acquireWriter() { checkOpen(); + acquire(); + return writer; } + /** + * Releases the reference to the segment writer. + */ + void releaseWriter() { + release(); + } + /** * Creates a new segment reader. * diff --git a/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalWriter.java b/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalWriter.java index 64a4c70c7a..4d13b2e5cc 100644 --- a/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalWriter.java +++ b/atomix-storage/src/main/java/io/atomix/storage/journal/SegmentedJournalWriter.java @@ -28,8 +28,7 @@ public final class SegmentedJournalWriter implements JournalWriter { SegmentedJournalWriter(SegmentedJournal journal) { this.journal = journal; this.currentSegment = journal.getLastSegment(); - currentSegment.acquire(); - this.currentWriter = currentSegment.writer(); + this.currentWriter = currentSegment.acquireWriter(); } @Override @@ -50,10 +49,9 @@ public final class SegmentedJournalWriter implements JournalWriter { @Override public void reset(long index) { if (index > currentSegment.index()) { - currentSegment.release(); + currentSegment.releaseWriter(); currentSegment = journal.resetSegments(index); - currentSegment.acquire(); - currentWriter = currentSegment.writer(); + currentWriter = currentSegment.acquireWriter(); } else { truncate(index - 1); } @@ -101,10 +99,9 @@ public final class SegmentedJournalWriter implements JournalWriter { private void moveToNextSegment() { currentWriter.flush(); - currentSegment.release(); + currentSegment.releaseWriter(); currentSegment = journal.getNextSegment(); - currentSegment.acquire(); - currentWriter = currentSegment.writer(); + currentWriter = currentSegment.acquireWriter(); } @Override @@ -115,11 +112,10 @@ public final class SegmentedJournalWriter implements JournalWriter { // Delete all segments with first indexes greater than the given index. while (index < currentSegment.index() && currentSegment != journal.getFirstSegment()) { - currentSegment.release(); + currentSegment.releaseWriter(); journal.removeSegment(currentSegment); currentSegment = journal.getLastSegment(); - currentSegment.acquire(); - currentWriter = currentSegment.writer(); + currentWriter = currentSegment.acquireWriter(); } // Truncate the current index.