Hello Everyone

        I am using coprocesser to prevent the normal put and replace it
with another rowkey, The method is HRegion.put(). It works fine, but when
the region splited, There will be an WrongRegionException.

2018-01-28 09:32:51,528 WARN
[B.DefaultRpcServer.handler=21,queue=3,port=60020] regionserver.HRegion:
Failed getting lock in batch put,
row=\xF0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0F\x10\xC5r
org.apache.hadoop.hbase.regionserver.WrongRegionException: Requested row
out of range for row lock on HRegion
GISdoop_GeoKey,,1517085124215.341534e84727245f1c67f345c3e467ac.,
startKey='', getEndKey()='\xE6G8\x00\x00\x00\x00\x00\x00\x00\x00\x00',
row='\xF0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0F\x10\xC5r'
at org.apache.hadoop.hbase.regionserver.HRegion.checkRow(HRegion.java:4677)
at
org.apache.hadoop.hbase.regionserver.HRegion.getRowLock(HRegion.java:4695)
at
org.apache.hadoop.hbase.regionserver.HRegion.doMiniBatchMutation(HRegion.java:2786)
at
org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:2653)
at
org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:2589)
at
org.apache.hadoop.hbase.regionserver.HRegion.doBatchMutate(HRegion.java:3192)
at org.apache.hadoop.hbase.regionserver.HRegion.put(HRegion.java:2459)
at site.luoyu.Core.Index.JavaTreeMap.insertPoint(JavaTreeMap.java:287)
at site.luoyu.Core.Index.JavaTreeMap.insertRecord(JavaTreeMap.java:256)
at site.luoyu.Core.Observer.IndexCopressor.prePut(IndexCopressor.java:130)
at
org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.prePut(RegionCoprocessorHost.java:1122)
at
org.apache.hadoop.hbase.regionserver.HRegion.doPreMutationHook(HRegion.java:2674)
at
org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:2649)
at
org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:2589)
at
org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:2593)
at
org.apache.hadoop.hbase.regionserver.HRegionServer.doBatchOp(HRegionServer.java:4402)
at
org.apache.hadoop.hbase.regionserver.HRegionServer.doNonAtomicRegionMutation(HRegionServer.java:3584)
at
org.apache.hadoop.hbase.regionserver.HRegionServer.multi(HRegionServer.java:3474)
at
org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:30000)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2078)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:108)
at
org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:114)
at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:94)
at java.lang.Thread.run(Thread.java:745)

It is said rowkey is out of region's bound.  This Exception is logged in
regionserver's log as an warning , I can't catch  and handle it.

According the source code,
RowLock rowLock = null;
try {
  rowLock = getRowLock(mutation.getRow(), shouldBlock);
} catch (IOException ioe) {
  LOG.warn("Failed getting lock in batch put, row="
    + Bytes.toStringBinary(mutation.getRow()), ioe);
}

HBase just cache and log this exception , I guess it even didn't remove it
from the batch. So I got so many Exception log  and can't put data anymore.

Why HBase handle this WrongRegionException like this? Anyone can help?
Thanks verymuch.

Reply via email to