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 <robert.varga@pantheon.tech>
/**
* Acquires a reference to the log segment.
*/
/**
* Acquires a reference to the log segment.
*/
+ private void acquire() {
if (references.getAndIncrement() == 0 && storageLevel == StorageLevel.MAPPED) {
writer.map();
}
if (references.getAndIncrement() == 0 && storageLevel == StorageLevel.MAPPED) {
writer.map();
}
/**
* Releases a reference to the log segment.
*/
/**
* Releases a reference to the log segment.
*/
+ private void release() {
if (references.decrementAndGet() == 0) {
if (storageLevel == StorageLevel.MAPPED) {
writer.unmap();
if (references.decrementAndGet() == 0) {
if (storageLevel == StorageLevel.MAPPED) {
writer.unmap();
- * Returns the segment writer.
+ * Acquires a reference to the segment writer.
*
* @return The segment writer.
*/
*
* @return The segment writer.
*/
- public MappableJournalSegmentWriter<E> writer() {
+ MappableJournalSegmentWriter<E> acquireWriter() {
+ /**
+ * Releases the reference to the segment writer.
+ */
+ void releaseWriter() {
+ release();
+ }
+
/**
* Creates a new segment reader.
*
/**
* Creates a new segment reader.
*
SegmentedJournalWriter(SegmentedJournal<E> journal) {
this.journal = journal;
this.currentSegment = journal.getLastSegment();
SegmentedJournalWriter(SegmentedJournal<E> journal) {
this.journal = journal;
this.currentSegment = journal.getLastSegment();
- currentSegment.acquire();
- this.currentWriter = currentSegment.writer();
+ this.currentWriter = currentSegment.acquireWriter();
@Override
public void reset(long index) {
if (index > currentSegment.index()) {
@Override
public void reset(long index) {
if (index > currentSegment.index()) {
- currentSegment.release();
+ currentSegment.releaseWriter();
currentSegment = journal.resetSegments(index);
currentSegment = journal.resetSegments(index);
- currentSegment.acquire();
- currentWriter = currentSegment.writer();
+ currentWriter = currentSegment.acquireWriter();
} else {
truncate(index - 1);
}
} else {
truncate(index - 1);
}
private void moveToNextSegment() {
currentWriter.flush();
private void moveToNextSegment() {
currentWriter.flush();
- currentSegment.release();
+ currentSegment.releaseWriter();
currentSegment = journal.getNextSegment();
currentSegment = journal.getNextSegment();
- currentSegment.acquire();
- currentWriter = currentSegment.writer();
+ currentWriter = currentSegment.acquireWriter();
// Delete all segments with first indexes greater than the given index.
while (index < currentSegment.index() && currentSegment != journal.getFirstSegment()) {
// 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();
journal.removeSegment(currentSegment);
currentSegment = journal.getLastSegment();
- currentSegment.acquire();
- currentWriter = currentSegment.writer();
+ currentWriter = currentSegment.acquireWriter();
}
// Truncate the current index.
}
// Truncate the current index.