我想在 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}