View Javadoc

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  
27  import org.apache.hadoop.hbase.wal.WALKey;
28  
29  /**
30   * Get notification of WAL events. The invocations are inline
31   * so make sure your implementation is fast else you'll slow hbase.
32   */
33  @InterfaceAudience.Private
34  public interface WALActionsListener {
35  
36    /**
37     * The WAL is going to be rolled. The oldPath can be null if this is
38     * the first log file from the regionserver.
39     * @param oldPath the path to the old wal
40     * @param newPath the path to the new wal
41     */
42    void preLogRoll(Path oldPath, Path newPath) throws IOException;
43  
44    /**
45     * The WAL has been rolled. The oldPath can be null if this is
46     * the first log file from the regionserver.
47     * @param oldPath the path to the old wal
48     * @param newPath the path to the new wal
49     */
50    void postLogRoll(Path oldPath, Path newPath) throws IOException;
51  
52    /**
53     * The WAL is going to be archived.
54     * @param oldPath the path to the old wal
55     * @param newPath the path to the new wal
56     */
57    void preLogArchive(Path oldPath, Path newPath) throws IOException;
58  
59    /**
60     * The WAL has been archived.
61     * @param oldPath the path to the old wal
62     * @param newPath the path to the new wal
63     */
64    void postLogArchive(Path oldPath, Path newPath) throws IOException;
65  
66    /**
67     * A request was made that the WAL be rolled.
68     */
69    void logRollRequested(boolean tooFewReplicas);
70  
71    /**
72     * The WAL is about to close.
73     */
74    void logCloseRequested();
75  
76    /**
77    * Called before each write.
78    * @param info
79    * @param logKey
80    * @param logEdit
81    */
82    void visitLogEntryBeforeWrite(
83      HRegionInfo info, WALKey logKey, WALEdit logEdit
84    );
85  
86    /**
87     * @param logKey
88     * @param logEdit TODO: Retire this in favor of
89     *          {@link #visitLogEntryBeforeWrite(HRegionInfo, WALKey, WALEdit)} It only exists to get
90     *          scope when replicating. Scope should be in the WALKey and not need us passing in a
91     *          <code>htd</code>.
92     * @throws IOException If failed to parse the WALEdit
93     */
94    void visitLogEntryBeforeWrite(WALKey logKey, WALEdit logEdit) throws IOException;
95  
96    /**
97     * For notification post append to the writer.  Used by metrics system at least.
98     * TODO: Combine this with above.
99     * @param entryLen approx length of cells in this append.
100    * @param elapsedTimeMillis elapsed time in milliseconds.
101    * @param logKey A WAL key
102    * @param logEdit A WAL edit containing list of cells.
103    * @throws IOException if any network or I/O error occurred
104    */
105   void postAppend(final long entryLen, final long elapsedTimeMillis, final WALKey logKey,
106       final WALEdit logEdit) throws IOException;
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(WALKey logKey, WALEdit logEdit) throws IOException {
140     }
141 
142     @Override
143     public void postAppend(final long entryLen, final long elapsedTimeMillis, final WALKey logKey,
144         final WALEdit logEdit) throws IOException {
145     }
146 
147     @Override
148     public void postSync(final long timeInNanos, final int handlerSyncs) {}
149   }
150 }