/**
* Acquires a reference to the log segment.
*/
- void acquire() {
+ private void acquire() {
if (references.getAndIncrement() == 0 && storageLevel == StorageLevel.MAPPED) {
writer.map();
}
/**
* Releases a reference to the log segment.
*/
- void release() {
+ private void release() {
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.
*/
- public MappableJournalSegmentWriter<E> writer() {
+ MappableJournalSegmentWriter<E> acquireWriter() {
checkOpen();
+ acquire();
+
return writer;
}
+ /**
+ * Releases the reference to the segment writer.
+ */
+ void releaseWriter() {
+ release();
+ }
+
/**
* Creates a new segment reader.
*
SegmentedJournalWriter(SegmentedJournal<E> journal) {
this.journal = journal;
this.currentSegment = journal.getLastSegment();
- currentSegment.acquire();
- this.currentWriter = currentSegment.writer();
+ this.currentWriter = currentSegment.acquireWriter();
}
@Override
@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);
}
private void moveToNextSegment() {
currentWriter.flush();
- currentSegment.release();
+ currentSegment.releaseWriter();
currentSegment = journal.getNextSegment();
- currentSegment.acquire();
- currentWriter = currentSegment.writer();
+ currentWriter = currentSegment.acquireWriter();
}
@Override
// 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.