package coprocessor; import java.io.IOException; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellScanner; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver; import org.apache.hadoop.hbase.coprocessor.ObserverContext; import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.util.Bytes; // cc RegionObserverExample Example region observer checking for special get requests // vv RegionObserverExample public class RegionObserverExample extends BaseRegionObserver { // ^^ RegionObserverExample public static final Log LOG = LogFactory.getLog(HRegion.class); // vv RegionObserverExample public static final byte[] FIXED_ROW = Bytes.toBytes("@@@GETTIME@@@"); @Override public void preGetOp(ObserverContext<RegionCoprocessorEnvironment> e, Get get, List<Cell> results) throws IOException { // ^^ RegionObserverExample LOG.debug("Got preGet for row: " + Bytes.toStringBinary(get.getRow())); // vv RegionObserverExample if (Bytes.equals(get.getRow(), FIXED_ROW)) { // co RegionObserverExample-1-Check Check if the request row key matches a well known one. Put put = new Put(get.getRow()); put.addColumn(FIXED_ROW, FIXED_ROW, // co RegionObserverExample-2-Cell Create cell indirectly using a Put instance. Bytes.toBytes(System.currentTimeMillis())); CellScanner scanner = put.cellScanner(); scanner.advance(); Cell cell = scanner.current(); // co RegionObserverExample-3-Current Get first cell from Put using the CellScanner instance. // ^^ RegionObserverExample LOG.debug("Had a match, adding fake cell: " + cell); // vv RegionObserverExample results.add(cell); // co RegionObserverExample-4-Create Create a special KeyValue instance containing just the current time on the server. } } } // ^^ RegionObserverExample