Я хочу поместить новое значение ключа для текущей строки в BaseRegionObserver.postBatchMutate, но я застрял в MVCC, и возникает тупик. Вот мой код:положить в сопроцессор postBatchMutate
@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 сообщение на выходе:
WARN regionserver.MultiVersionConcurrencyControl: STUCK: MultiVersionConcurrencyControl {readPoint = 3, writePoint = 5}
Моя проблема была на postBatchMutate. Кажется, что у меня нет проблем с postPut. – Malemi