import static java.util.Objects.requireNonNull;
import com.google.common.base.MoreObjects;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.controller.raft.journal.FromByteBufMapper;
+import org.opendaylight.controller.raft.journal.RaftJournal;
+import org.opendaylight.controller.raft.journal.ToByteBufMapper;
/**
- * A {@link Journal} implementation based on a {@link ByteBufJournal}.
+ * A {@link Journal} implementation based on a {@link RaftJournal}.
*/
public final class SegmentedJournal<E> implements Journal<E> {
- private final SegmentedJournalWriter<E> writer;
- private final ByteBufMapper<E> mapper;
- private final ByteBufJournal journal;
+ private final @NonNull SegmentedJournalWriter<E> writer;
+ private final @NonNull FromByteBufMapper<E> readMapper;
+ private final @NonNull RaftJournal journal;
- public SegmentedJournal(final ByteBufJournal journal, final ByteBufMapper<E> mapper) {
+ public SegmentedJournal(final RaftJournal journal, final FromByteBufMapper<E> readMapper,
+ final ToByteBufMapper<E> writeMapper) {
this.journal = requireNonNull(journal, "journal is required");
- this.mapper = requireNonNull(mapper, "mapper cannot be null");
- writer = new SegmentedJournalWriter<>(journal.writer(), mapper);
+ this.readMapper = requireNonNull(readMapper, "readMapper cannot be null");
+ writer = new SegmentedJournalWriter<>(journal.writer(),
+ requireNonNull(writeMapper, "writeMapper cannot be null"));
+ }
+
+ @Override
+ public long firstIndex() {
+ return journal.firstIndex();
}
@Override
case ALL -> journal.openReader(index);
case COMMITS -> journal.openCommitsReader(index);
};
- return new SegmentedJournalReader<>(byteReader, mapper);
+ return new SegmentedJournalReader<>(byteReader, readMapper);
}
@Override