Do you see this log message from the start() method in your regionserver logs?

        LOG.info("(start)");

If you don't see this, then there has been some problem loading your
coprocessor.  You can search for your coprocessor's classname to try
to track it down.

>From your configuration and your code, of course, you should never see
this log line:

        if (!Bytes.equals(table, Bytes.toBytes(SOURCE_TABLE))) {
         LOG.info("SOURCE_TABLE");

You've only configured the coprocessor to load on SOURCE_TABLE, so the
if condition should never return true.

If you are using HBase 0.98, then as Ted says, the postPut() method
signature is different.  You should uncomment the @Override annotation
on your method to enable compile time checking and fix the method
signature.  Without overriding the correct method, your method will
never be called.

On Mon, Oct 6, 2014 at 10:56 AM, Jasmin Guliani <[email protected]> wrote:
> No, above logs are not showing up in region server. Also, I am using
> hbase-0.98
>
> On Mon, Oct 6, 2014 at 10:48 AM, Ted Yu <[email protected]> wrote:
>
>> Signature for postPut() in 0.98 is:
>>   public void postPut(final Put put, final WALEdit edit, final Durability
>> durability)
>>
>> Which release are you using ?
>>
>> bq.         LOG.info("SOURCE_TABLE");
>>
>> Did the above log show up in region server log ?
>>
>> On Mon, Oct 6, 2014 at 10:41 AM, Jasmin Guliani <[email protected]> wrote:
>>
>>> I have written coprocessor code with below code. After compiling this
>>> code,
>>> I have created the jar file. And then added this jar as a coprocessor to
>>> the table.
>>>
>>> alter 'SOURCE_TBL' , METHOD => 'table_att' , 'COPROCESSOR'=>
>>>
>>> 'hdfs:///apps/stsuid/HBASESamples-0.0.1-SNAPSHOT.jar|com.hbase.coprocessor.PutRegionObserverExample|1001'
>>>
>>> After this, when I am doing put operation on source table 'SOURCE_TBL'
>>> mentioned as below, I am expecting a record in index table 'INDEX_TBL' but
>>> there are no records in INDEX_TBL.
>>>
>>> put 'SOURCE_TBL' , '123' , 'data:CUST_ID' , 'RFRT'
>>>
>>>
>>> Please help me and let me know if my code of coprocessor is wrong or am I
>>> executing it in a wrong way.
>>>
>>>
>>>
>>> package com.hbase.coprocessor;
>>>
>>> import java.io.IOException;
>>> import java.util.Arrays;
>>> import java.util.List;
>>> import java.util.logging.Logger;
>>>
>>> import org.apache.hadoop.conf.Configuration;
>>> import org.apache.hadoop.hbase.Cell;
>>> import org.apache.hadoop.hbase.CoprocessorEnvironment;
>>> import org.apache.hadoop.hbase.HBaseConfiguration;
>>> import org.apache.hadoop.hbase.KeyValue;
>>> import org.apache.hadoop.hbase.client.Get;
>>> import org.apache.hadoop.hbase.client.HTable;
>>> import org.apache.hadoop.hbase.client.HTableInterface;
>>> import org.apache.hadoop.hbase.client.HTablePool;
>>> 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.wal.WALEdit;
>>> import org.apache.hadoop.hbase.util.Bytes;
>>>
>>> public class PutRegionObserverExample extends BaseRegionObserver {
>>>
>>>  public static final byte[] FIXED_ROW = Bytes.toBytes("@@@GETTIME@@@");
>>>  private final static Logger LOG =
>>> Logger.getLogger(PutRegionObserverExample.class.getName());
>>>
>>>
>>>  private HTablePool pool = null;
>>>
>>>     private final static String  INDEX_TABLE  = "INDEX_TBL";
>>>     private final static String  SOURCE_TABLE = "SOURCE_TBL";
>>>
>>>     public void start(CoprocessorEnvironment env) throws IOException {
>>>
>>>         LOG.info("(start)");
>>>         pool = new HTablePool(env.getConfiguration(), 10);
>>>      }
>>>
>>>     //@Override
>>>     public void postPut(
>>>         final ObserverContext<RegionCoprocessorEnvironment>
>>> observerContext,
>>>         final Put put,
>>>         final WALEdit edit,
>>>         final boolean writeToWAL)
>>>         throws IOException {
>>>
>>>         byte[] table =
>>>
>>> observerContext.getEnvironment().getRegion().getRegionInfo().getTableName();
>>>
>>>         if (!Bytes.equals(table, Bytes.toBytes(SOURCE_TABLE))) {
>>>          LOG.info("SOURCE_TABLE");
>>>          return;
>>>         }
>>>
>>>         try {
>>>
>>>          final List<Cell> filteredList = put.get(Bytes.toBytes
>>> ("data"),Bytes.toBytes("CUST_ID"));
>>>             byte [] id = put.getRow(); //Get the Entry ID
>>>
>>>             Cell kv=filteredList.get( 0 ); //get Entry PARENT_ID
>>>             byte[] parentId = kv.getValue();
>>>
>>>
>>>            HTableInterface htbl =
>>> pool.getTable(Bytes.toBytes(INDEX_TABLE));
>>>
>>>            //create row key for the index table
>>>            byte[] p1 = concatTwoByteArrays(parentId, ":".getBytes());
>>> //Insert a semicolon between two UUIDs
>>>            byte[] rowkey = concatTwoByteArrays(p1, id);
>>>
>>>            Put indexput  = new Put(rowkey);
>>>
>>>            indexput.add(Bytes.toBytes("data"), Bytes.toBytes("CUST_ID"),
>>> Bytes.toBytes("tgt9"));
>>>            htbl.put(indexput);
>>>
>>>            htbl.close();
>>>
>>>         } catch ( IllegalArgumentException ex) {
>>>             // handle excepion.
>>>          LOG.info(ex.getMessage());
>>>         }
>>>
>>>     }
>>>
>>>
>>>     @Override
>>>     public void stop(CoprocessorEnvironment env) throws IOException {
>>>         pool.close();
>>>     }
>>>
>>>
>>>     public static final byte[] concatTwoByteArrays(byte[] first, byte[]
>>> second) {
>>>         byte[] result = Arrays.copyOf(first, first.length +
>>> second.length);
>>>         System.arraycopy(second, 0, result, first.length, second.length);
>>>         return result;
>>>     }
>>>
>>> }
>>>
>>
>>

Reply via email to