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.regionserver.wal;
20
21 import java.io.IOException;
22
23 import org.apache.hadoop.hbase.classification.InterfaceAudience;
24 import org.apache.hadoop.fs.Path;
25 import org.apache.hadoop.hbase.HRegionInfo;
26 import org.apache.hadoop.hbase.HTableDescriptor;
27
28 import org.apache.hadoop.hbase.wal.WALKey;
29
30 /**
31 * Get notification of WAL events. The invocations are inline
32 * so make sure your implementation is fast else you'll slow hbase.
33 */
34 @InterfaceAudience.Private
35 public interface WALActionsListener {
36
37 /**
38 * The WAL is going to be rolled. The oldPath can be null if this is
39 * the first log file from the regionserver.
40 * @param oldPath the path to the old wal
41 * @param newPath the path to the new wal
42 */
43 void preLogRoll(Path oldPath, Path newPath) throws IOException;
44
45 /**
46 * The WAL has been rolled. The oldPath can be null if this is
47 * the first log file from the regionserver.
48 * @param oldPath the path to the old wal
49 * @param newPath the path to the new wal
50 */
51 void postLogRoll(Path oldPath, Path newPath) throws IOException;
52
53 /**
54 * The WAL is going to be archived.
55 * @param oldPath the path to the old wal
56 * @param newPath the path to the new wal
57 */
58 void preLogArchive(Path oldPath, Path newPath) throws IOException;
59
60 /**
61 * The WAL has been archived.
62 * @param oldPath the path to the old wal
63 * @param newPath the path to the new wal
64 */
65 void postLogArchive(Path oldPath, Path newPath) throws IOException;
66
67 /**
68 * A request was made that the WAL be rolled.
69 */
70 void logRollRequested(boolean tooFewReplicas);
71
72 /**
73 * The WAL is about to close.
74 */
75 void logCloseRequested();
76
77 /**
78 * Called before each write.
79 * @param info
80 * @param logKey
81 * @param logEdit
82 */
83 void visitLogEntryBeforeWrite(
84 HRegionInfo info, WALKey logKey, WALEdit logEdit
85 );
86
87 /**
88 *
89 * @param htd
90 * @param logKey
91 * @param logEdit
92 * TODO: Retire this in favor of {@link #visitLogEntryBeforeWrite(HRegionInfo, WALKey, WALEdit)}
93 * It only exists to get scope when replicating. Scope should be in the WALKey and not need
94 * us passing in a <code>htd</code>.
95 */
96 void visitLogEntryBeforeWrite(
97 HTableDescriptor htd, WALKey logKey, WALEdit logEdit
98 );
99
100 /**
101 * For notification post append to the writer. Used by metrics system at least.
102 * TODO: Combine this with above.
103 * @param entryLen approx length of cells in this append.
104 * @param elapsedTimeMillis elapsed time in milliseconds.
105 */
106 void postAppend(final long entryLen, final long elapsedTimeMillis);
107
108 /**
109 * For notification post writer sync. Used by metrics system at least.
110 * @param timeInNanos How long the filesystem sync took in nanoseconds.
111 * @param handlerSyncs How many sync handler calls were released by this call to filesystem
112 * sync.
113 */
114 void postSync(final long timeInNanos, final int handlerSyncs);
115
116 static class Base implements WALActionsListener {
117 @Override
118 public void preLogRoll(Path oldPath, Path newPath) throws IOException {}
119
120 @Override
121 public void postLogRoll(Path oldPath, Path newPath) throws IOException {}
122
123 @Override
124 public void preLogArchive(Path oldPath, Path newPath) throws IOException {}
125
126 @Override
127 public void postLogArchive(Path oldPath, Path newPath) throws IOException {}
128
129 @Override
130 public void logRollRequested(boolean tooFewReplicas) {}
131
132 @Override
133 public void logCloseRequested() {}
134
135 @Override
136 public void visitLogEntryBeforeWrite(HRegionInfo info, WALKey logKey, WALEdit logEdit) {}
137
138 @Override
139 public void visitLogEntryBeforeWrite(HTableDescriptor htd, WALKey logKey, WALEdit logEdit) {}
140
141 @Override
142 public void postAppend(final long entryLen, final long elapsedTimeMillis) {}
143
144 @Override
145 public void postSync(final long timeInNanos, final int handlerSyncs) {}
146 }
147 }