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.fs.Path;
24  import org.apache.hadoop.hbase.HRegionInfo;
25  import org.apache.hadoop.hbase.HTableDescriptor;
26  import org.apache.hadoop.hbase.classification.InterfaceAudience;
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     *
88     * @param htd
89     * @param logKey
90     * @param logEdit
91     * TODO: Retire this in favor of {@link #visitLogEntryBeforeWrite(HRegionInfo, WALKey, WALEdit)}
92     * It only exists to get scope when replicating.  Scope should be in the WALKey and not need
93     * us passing in a <code>htd</code>.
94     */
95    void visitLogEntryBeforeWrite(HTableDescriptor htd, WALKey logKey,
96        WALEdit logEdit) throws IOException;
97  
98    /**
99     * For notification post append to the writer.  Used by metrics system at least.
100    * TODO: Combine this with above.
101    * @param entryLen approx length of cells in this append.
102    * @param elapsedTimeMillis elapsed time in milliseconds.
103    */
104   void postAppend(final long entryLen, final long elapsedTimeMillis);
105 
106   /**
107    * For notification post writer sync.  Used by metrics system at least.
108    * @param timeInNanos How long the filesystem sync took in nanoseconds.
109    * @param handlerSyncs How many sync handler calls were released by this call to filesystem
110    * sync.
111    */
112   void postSync(final long timeInNanos, final int handlerSyncs);
113 
114   static class Base implements WALActionsListener {
115     @Override
116     public void preLogRoll(Path oldPath, Path newPath) throws IOException {}
117 
118     @Override
119     public void postLogRoll(Path oldPath, Path newPath) throws IOException {}
120 
121     @Override
122     public void preLogArchive(Path oldPath, Path newPath) throws IOException {}
123 
124     @Override
125     public void postLogArchive(Path oldPath, Path newPath) throws IOException {}
126 
127     @Override
128     public void logRollRequested(boolean tooFewReplicas) {}
129 
130     @Override
131     public void logCloseRequested() {}
132 
133     @Override
134     public void visitLogEntryBeforeWrite(HRegionInfo info, WALKey logKey, WALEdit logEdit) {}
135 
136     @Override
137     public void visitLogEntryBeforeWrite(HTableDescriptor htd, WALKey logKey,
138         WALEdit logEdit) throws IOException {
139     }
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 }