*/
package io.atomix.storage.journal;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.base.MoreObjects;
import io.atomix.storage.journal.index.JournalIndex;
import io.atomix.storage.journal.index.Position;
*/
final class JournalSegment implements AutoCloseable {
private final JournalSegmentFile file;
- private final JournalSegmentDescriptor descriptor;
private final StorageLevel storageLevel;
private final int maxEntrySize;
private final JournalIndex journalIndex;
JournalSegment(
final JournalSegmentFile file,
- final JournalSegmentDescriptor descriptor,
final StorageLevel storageLevel,
final int maxEntrySize,
final double indexDensity) {
- this.file = file;
- this.descriptor = descriptor;
- this.storageLevel = storageLevel;
+ this.file = requireNonNull(file);
+ this.storageLevel = requireNonNull(storageLevel);
this.maxEntrySize = maxEntrySize;
journalIndex = new SparseJournalIndex(indexDensity);
try {
- channel = FileChannel.open(file.file().toPath(),
+ channel = FileChannel.open(file.path(),
StandardOpenOption.CREATE, StandardOpenOption.READ, StandardOpenOption.WRITE);
} catch (IOException e) {
throw new StorageException(e);
}
final var fileWriter = switch (storageLevel) {
- case DISK -> new DiskFileWriter(file.file().toPath(), channel, descriptor.maxSegmentSize(), maxEntrySize);
- case MAPPED -> new MappedFileWriter(file.file().toPath(), channel, descriptor.maxSegmentSize(), maxEntrySize);
+ case DISK -> new DiskFileWriter(file, channel, maxEntrySize);
+ case MAPPED -> new MappedFileWriter(file, channel, maxEntrySize);
};
writer = new JournalSegmentWriter(fileWriter, this, maxEntrySize, journalIndex)
// relinquish mapped memory
* @return The segment's starting index.
*/
long firstIndex() {
- return descriptor.index();
+ return file.descriptor().index();
}
/**
return file;
}
- /**
- * Returns the segment descriptor.
- *
- * @return The segment descriptor.
- */
- JournalSegmentDescriptor descriptor() {
- return descriptor;
- }
-
/**
* Looks up the position of the given index.
*
acquire();
final var buffer = writer.buffer();
- final var path = file.file().toPath();
- final var fileReader = buffer != null ? new MappedFileReader(path, buffer)
- : new DiskFileReader(path, channel, descriptor.maxSegmentSize(), maxEntrySize);
+ final var fileReader = buffer != null ? new MappedFileReader(file, buffer)
+ : new DiskFileReader(file, channel, maxEntrySize);
final var reader = new JournalSegmentReader(this, fileReader, maxEntrySize);
reader.setPosition(JournalSegmentDescriptor.BYTES);
readers.add(reader);
*/
void delete() {
try {
- Files.deleteIfExists(file.file().toPath());
+ Files.deleteIfExists(file.path());
} catch (IOException e) {
throw new StorageException(e);
}
@Override
public String toString() {
+ final var descriptor = file.descriptor();
return MoreObjects.toStringHelper(this)
.add("id", descriptor.id())
.add("version", descriptor.version())
- .add("index", firstIndex())
+ .add("index", descriptor.index())
.toString();
}
}