w.r.t. region split, do you verify that the new rowkey is in the same region as the rowkey from incoming Put ?
If not, there is a chance that the new rowkey is in different region which is going thru split. FYI On Mon, Jan 29, 2018 at 6:40 AM, Yang Zhang <zhang.yang...@gmail.com> wrote: > Both are the same question. > I want to prevent the incoming puts and then copy it as one or more new > puts with different rowkey. > So when there is only one region, my rowkey will belong to it. But when > region splited, some rowkeys may not belong to the new region. > I used to thought HBase will stop new coming puts, finish all of the puts > in the batch, and then try to split. > But this maybe not right according to the exception that I got. > > BTY , It seems that I can't add put > to MiniBatchOperationInProgress<Mutation> miniBatchOp. There are only some > functions for get. > > Thank you very much for your help > > 2018-01-29 18:46 GMT+08:00 Anoop John <anoop.hb...@gmail.com>: > > > Another related Q was also there.. Can you tell the actual > > requirement? So the incoming puts you want to change the RKs of that? > > Or you want to insert those as well as some new cells with a changed > > RK? > > > > -Anoop- > > > > On Mon, Jan 29, 2018 at 3:49 PM, Yang Zhang <zhang.yang...@gmail.com> > > wrote: > > > 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. > > >