2 * Copyright (c) 2019 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.akka.segjournal;
10 import static java.util.Objects.requireNonNull;
12 import akka.persistence.PersistentRepr;
13 import io.atomix.storage.journal.JournalSegment;
16 * A single entry in the data journal. We do not store {@code persistenceId} for each entry, as that is a
17 * journal-invariant, nor do we store {@code sequenceNr}, as that information is maintained by {@link JournalSegment}'s
20 * @author Robert Varga
22 abstract class DataJournalEntry {
24 * A single data journal entry on its way to the backing file.
26 static final class ToPersistence extends DataJournalEntry {
27 private final PersistentRepr repr;
29 ToPersistence(final PersistentRepr repr) {
30 this.repr = requireNonNull(repr);
33 PersistentRepr repr() {
39 * A single data journal entry on its way from the backing file.
41 static final class FromPersistence extends DataJournalEntry {
42 private final String manifest;
43 private final String writerUuid;
44 private final Object payload;
46 FromPersistence(final String manifest, final String writerUuid, final Object payload) {
47 this.manifest = manifest;
48 this.writerUuid = requireNonNull(writerUuid);
49 this.payload = requireNonNull(payload);
52 PersistentRepr toRepr(final String persistenceId, final long sequenceNr) {
53 return PersistentRepr.apply(payload, sequenceNr, persistenceId, manifest, false, null, writerUuid);