現在の行の新しいキー値を BaseRegionObserver.postBatchMutate に入れたいのですが、MVCC でスタックしてデッドロックが発生しています。これが私のコードです:
@Override
public void postBatchMutate(ObserverContext<RegionCoprocessorEnvironment> c,
MiniBatchOperationInProgress<Mutation> miniBatchOp) throws IOException {
for (int i = 0 ; i < miniBatchOp.size(); i ++) {
Put put = null;
Mutation op = miniBatchOp.getOperation(i);
if (! (op instanceof Put))
continue;
put = (Put) miniBatchOp.getOperation(0);
if (put.has(Bytes.toBytes("m"), Bytes.toBytes("id")))
return;
Put put1 = new Put(put.getRow());
put1.addColumn(Bytes.toBytes("m"), Bytes.toBytes("id"),
Bytes.toBytes(String.valueOf(UUID.randomUUID())));
c.getEnvironment().getRegion().put(put1);
}
}
出力には、次の WARN メッセージが繰り返し表示されます。
警告 regionserver.MultiVersionConcurrencyControl: STUCK: MultiVersionConcurrencyControl{readPoint=3, writePoint=5}