Improve segmented journal actor metrics
[controller.git] / opendaylight / md-sal / sal-akka-segmented-journal / src / main / java / org / opendaylight / controller / akka / segjournal / DataJournalEntry.java
1 /*
2  * Copyright (c) 2019 Pantheon Technologies, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.akka.segjournal;
9
10 import static java.util.Objects.requireNonNull;
11
12 import akka.persistence.PersistentRepr;
13 import io.atomix.storage.journal.JournalSegment;
14
15 /**
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
18  * index.
19  *
20  * @author Robert Varga
21  */
22 abstract class DataJournalEntry {
23     /**
24      * A single data journal entry on its way to the backing file.
25      */
26     static final class ToPersistence extends DataJournalEntry {
27         private final PersistentRepr repr;
28
29         ToPersistence(final PersistentRepr repr) {
30             this.repr = requireNonNull(repr);
31         }
32
33         PersistentRepr repr() {
34             return repr;
35         }
36     }
37
38     /**
39      * A single data journal entry on its way from the backing file.
40      */
41     static final class FromPersistence extends DataJournalEntry {
42         private final String manifest;
43         private final String writerUuid;
44         private final Object payload;
45
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);
50         }
51
52         PersistentRepr toRepr(final String persistenceId, final long sequenceNr) {
53             return PersistentRepr.apply(payload, sequenceNr, persistenceId, manifest, false, null, writerUuid);
54         }
55     }
56 }