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 20 package org.apache.hadoop.hbase.coprocessor; 21 22 import org.apache.hadoop.hbase.classification.InterfaceAudience; 23 import org.apache.hadoop.hbase.classification.InterfaceStability; 24 import org.apache.hadoop.hbase.Coprocessor; 25 import org.apache.hadoop.hbase.HBaseInterfaceAudience; 26 import org.apache.hadoop.hbase.HRegionInfo; 27 import org.apache.hadoop.hbase.regionserver.wal.HLogKey; 28 import org.apache.hadoop.hbase.wal.WALKey; 29 import org.apache.hadoop.hbase.regionserver.wal.WALEdit; 30 31 import java.io.IOException; 32 33 /** 34 * It's provided to have a way for coprocessors to observe, rewrite, 35 * or skip WALEdits as they are being written to the WAL. 36 * 37 * Note that implementers of WALObserver will not see WALEdits that report themselves 38 * as empty via {@link WALEdit#isEmpty()}. 39 * 40 * {@link org.apache.hadoop.hbase.coprocessor.RegionObserver} provides 41 * hooks for adding logic for WALEdits in the region context during reconstruction, 42 * 43 * Defines coprocessor hooks for interacting with operations on the 44 * {@link org.apache.hadoop.hbase.wal.WAL}. 45 */ 46 @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) 47 @InterfaceStability.Evolving 48 public interface WALObserver extends Coprocessor { 49 50 /** 51 * Called before a {@link org.apache.hadoop.hbase.regionserver.wal.WALEdit} 52 * is writen to WAL. 53 * 54 * @return true if default behavior should be bypassed, false otherwise 55 */ 56 // TODO: return value is not used 57 boolean preWALWrite(ObserverContext<? extends WALCoprocessorEnvironment> ctx, 58 HRegionInfo info, WALKey logKey, WALEdit logEdit) throws IOException; 59 60 /** 61 * Called before a {@link org.apache.hadoop.hbase.regionserver.wal.WALEdit} 62 * is writen to WAL. 63 * 64 * This method is left in place to maintain binary compatibility with older 65 * {@link WALObserver}s. If an implementation directly overrides 66 * {@link #preWALWrite(ObserverContext, HRegionInfo, WALKey, WALEdit)} then this version 67 * won't be called at all, barring problems with the Security Manager. To work correctly 68 * in the presence of a strict Security Manager, or in the case of an implementation that 69 * relies on a parent class to implement preWALWrite, you should implement this method 70 * as a call to the non-deprecated version. 71 * 72 * Users of this method will see all edits that can be treated as HLogKey. If there are 73 * edits that can't be treated as HLogKey they won't be offered to coprocessors that rely 74 * on this method. If a coprocessor gets skipped because of this mechanism, a log message 75 * at ERROR will be generated per coprocessor on the logger for {@link CoprocessorHost} once per 76 * classloader. 77 * 78 * @return true if default behavior should be bypassed, false otherwise 79 * @deprecated use {@link #preWALWrite(ObserverContext, HRegionInfo, WALKey, WALEdit)} 80 */ 81 @Deprecated 82 boolean preWALWrite(ObserverContext<WALCoprocessorEnvironment> ctx, 83 HRegionInfo info, HLogKey logKey, WALEdit logEdit) throws IOException; 84 85 /** 86 * Called after a {@link org.apache.hadoop.hbase.regionserver.wal.WALEdit} 87 * is writen to WAL. 88 */ 89 void postWALWrite(ObserverContext<? extends WALCoprocessorEnvironment> ctx, 90 HRegionInfo info, WALKey logKey, WALEdit logEdit) throws IOException; 91 92 /** 93 * Called after a {@link org.apache.hadoop.hbase.regionserver.wal.WALEdit} 94 * is writen to WAL. 95 * 96 * This method is left in place to maintain binary compatibility with older 97 * {@link WALObserver}s. If an implementation directly overrides 98 * {@link #postWALWrite(ObserverContext, HRegionInfo, WALKey, WALEdit)} then this version 99 * won't be called at all, barring problems with the Security Manager. To work correctly 100 * in the presence of a strict Security Manager, or in the case of an implementation that 101 * relies on a parent class to implement preWALWrite, you should implement this method 102 * as a call to the non-deprecated version. 103 * 104 * Users of this method will see all edits that can be treated as HLogKey. If there are 105 * edits that can't be treated as HLogKey they won't be offered to coprocessors that rely 106 * on this method. If a coprocessor gets skipped because of this mechanism, a log message 107 * at ERROR will be generated per coprocessor on the logger for {@link CoprocessorHost} once per 108 * classloader. 109 * 110 * @deprecated use {@link #postWALWrite(ObserverContext, HRegionInfo, WALKey, WALEdit)} 111 */ 112 @Deprecated 113 void postWALWrite(ObserverContext<WALCoprocessorEnvironment> ctx, 114 HRegionInfo info, HLogKey logKey, WALEdit logEdit) throws IOException; 115 }