package net.hbase.secondaryindex.coprocessor;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.apache.hadoop.hbase.HBaseConfiguration;
//import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTable;
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.coprocessor.RegionCoprocessorEnvironment;
import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
import org.apache.hadoop.hbase.util.Bytes;
public class IndexerDemo extends BaseRegionObserver {
public static final String INDEX_TABLE_SUFFIX = "_index";
public String tableName = "demo_table";
public String inputColumn = "cf1:c1";
public String indexColumn = "cf1:c1";
public HTable table;
@Override
public void preOpen(ObserverContext<RegionCoprocessorEnvironment> e) {
try {
table = new HTable(HBaseConfiguration.create(), tableName
+ INDEX_TABLE_SUFFIX);
} catch (IOException e1) {
e1.printStackTrace();
}
}
@Override
@SuppressWarnings("rawtypes")
public void postPut(final ObserverContext e, final Put put,
final WALEdit edit, final boolean writeToWAL) throws IOException {
byte[][] colkey = KeyValue.parseColumn(Bytes.toBytes(inputColumn));
if (colkey.length > 1) {
List kvList = put.get(colkey[0], colkey[1]);
Iterator kvl = kvList.iterator();
while (kvl.hasNext()) {
KeyValue kv = (KeyValue) kvl.next();
Put indexPut = new Put(kv.getValue());
colkey = KeyValue.parseColumn(Bytes.toBytes(indexColumn));
indexPut.add(colkey[0], colkey[1], kv.getRow());
table.put(indexPut);
}
}
}
@Override
public void postClose(ObserverContext<RegionCoprocessorEnvironment> e,
boolean abortRequested) {
try {
table.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}