0

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

4

1 回答 1

0

你介意发布你的代码吗?您始终可以从协处理器中获取该区域并手动执行放置。我不清楚你的失败语义是什么......两者都必须成功还是失败?

于 2016-08-11T19:36:19.510 回答