1 package org.csc.phynixx.loggersystem.logger;
2
3 /*
4 * #%L
5 * phynixx-common
6 * %%
7 * Copyright (C) 2014 csc
8 * %%
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * #L%
21 */
22
23
24 import org.csc.phynixx.loggersystem.logger.channellogger.AccessMode;
25 import org.csc.phynixx.loggersystem.logrecord.ILogRecordReplayListener;
26
27 import java.io.IOException;
28
29 /**
30 * A logger is enabled to write data in an atomic manner. The data is entirely written or the data is rejected.
31 *
32 * This class is not thread safe . Use facades to protect instances
33 */
34 public interface IDataLogger {
35
36 /**
37 * Sub-classes call this method to write log records with
38 * a specific record type.
39 *
40 * @param type a record type defined in LogRecordType.
41 * @param data record data to be logged.
42 * @return a log key that can be used to de-reference the record.
43 * <p/>
44 */
45 long write(short type, byte[][] data)
46 throws InterruptedException, IOException;
47
48
49 /**
50 * callback method to replay the data of the logger.
51 * @param replayListener
52 * @throws IOException
53 */
54 void replay(ILogRecordReplayListener replayListener) throws IOException;
55
56 /**
57 * close the Log files and perform necessary cleanup tasks.
58 * The logger could be reopen
59 */
60 void close() throws IOException, InterruptedException;
61
62
63 /**
64 *
65 * @return true if and if the logger is closed
66 */
67 boolean isClosed();
68
69 /**
70 * opens the logger with the specified ACCESS_MODE. If the logger isn't closed it is closed.
71 *
72 * @param accessMode
73 * @throws IOException
74 *
75 * @see #reopen(org.csc.phynixx.loggersystem.logger.channellogger.AccessMode)
76 */
77 void open(AccessMode accessMode) throws IOException;
78
79 /**
80 * reopens the datalogger. It is assumed that the logger is open.
81 * <pre>
82 * READ - position to 0, content cannot be changed or added
83 * WRITE - position to 0 and resets the committed size to 0. Content is deleted (kind of reset)
84 * APPEND - position to the committed size. Content is not effected.
85 * </pre>
86 *
87 * @param accessMode
88 * @throws IOException
89 * @throws InterruptedException
90 */
91 void reopen(AccessMode accessMode) throws IOException, InterruptedException;
92
93
94 /**
95 * destroys the logger and removes its resources. The logger cannot be reopened
96 *
97 * @throws IOException
98 */
99 void destroy() throws IOException;
100 }