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 に答える