Do not leak Kryo from atomix.storage
[controller.git] / third-party / atomix / storage / src / main / java / io / atomix / storage / journal / JournalWriter.java
1 /*
2  * Copyright 2017-present Open Networking Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package io.atomix.storage.journal;
17
18 /**
19  * Log writer.
20  *
21  * @author <a href="http://github.com/kuujo">Jordan Halterman</a>
22  */
23 public interface JournalWriter<E> extends AutoCloseable {
24
25   /**
26    * Returns the last written index.
27    *
28    * @return The last written index.
29    */
30   long getLastIndex();
31
32   /**
33    * Returns the last entry written.
34    *
35    * @return The last entry written.
36    */
37   Indexed<E> getLastEntry();
38
39   /**
40    * Returns the next index to be written.
41    *
42    * @return The next index to be written.
43    */
44   long getNextIndex();
45
46   /**
47    * Appends an entry to the journal.
48    *
49    * @param entry The entry to append.
50    * @return The appended indexed entry.
51    */
52   <T extends E> Indexed<T> append(T entry);
53
54   /**
55    * Appends an indexed entry to the log.
56    *
57    * @param entry The indexed entry to append.
58    */
59   void append(Indexed<E> entry);
60
61   /**
62    * Commits entries up to the given index.
63    *
64    * @param index The index up to which to commit entries.
65    */
66   void commit(long index);
67
68   /**
69    * Resets the head of the journal to the given index.
70    *
71    * @param index the index to which to reset the head of the journal
72    */
73   void reset(long index);
74
75   /**
76    * Truncates the log to the given index.
77    *
78    * @param index The index to which to truncate the log.
79    */
80   void truncate(long index);
81
82   /**
83    * Flushes written entries to disk.
84    */
85   void flush();
86
87   @Override
88   void close();
89 }