1 /**
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19 package org.apache.hadoop.hbase.wal;
20
21 import java.io.Closeable;
22 import java.io.IOException;
23 import java.util.List;
24
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.classification.InterfaceStability;
27 import org.apache.hadoop.conf.Configuration;
28
29 // imports for things that haven't moved from regionserver.wal yet.
30 import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;
31
32 /**
33 * The Write Ahead Log (WAL) stores all durable edits to the HRegion.
34 * This interface provides the entry point for all WAL implementors.
35 * <p>
36 * See {@link DefaultWALProvider} for an example implementation.
37 *
38 * A single WALProvider will be used for retrieving multiple WALs in a particular region server
39 * and must be threadsafe.
40 */
41 @InterfaceAudience.Private
42 public interface WALProvider {
43
44 /**
45 * Set up the provider to create wals.
46 * will only be called once per instance.
47 * @param factory factory that made us may not be null
48 * @param conf may not be null
49 * @param listeners may be null
50 * @param providerId differentiate between providers from one factory. may be null
51 */
52 void init(final WALFactory factory, final Configuration conf,
53 final List<WALActionsListener> listeners, final String providerId) throws IOException;
54
55 /**
56 * @param identifier may not be null. contents will not be altered.
57 * @return a WAL for writing entries for the given region.
58 */
59 WAL getWAL(final byte[] identifier) throws IOException;
60
61 /**
62 * persist outstanding WALs to storage and stop accepting new appends.
63 * This method serves as shorthand for sending a sync to every WAL provided by a given
64 * implementation. Those WALs will also stop accepting new writes.
65 */
66 void shutdown() throws IOException;
67
68 /**
69 * shutdown utstanding WALs and clean up any persisted state.
70 * Call this method only when you will not need to replay any of the edits to the WALs from
71 * this provider. After this call completes, the underlying resources should have been reclaimed.
72 */
73 void close() throws IOException;
74
75 // Writers are used internally. Users outside of the WAL should be relying on the
76 // interface provided by WAL.
77 interface Writer extends Closeable {
78 void sync() throws IOException;
79 void append(WAL.Entry entry) throws IOException;
80 long getLength() throws IOException;
81 }
82
83 }