virajjasani commented on code in PR #1884:
URL: https://github.com/apache/phoenix/pull/1884#discussion_r1618005888
##########
phoenix-core-server/src/main/java/org/apache/phoenix/hbase/index/IndexRegionObserver.java:
##########
@@ -1308,6 +1345,19 @@ public void
postBatchMutateIndispensably(ObserverContext<RegionCoprocessorEnviro
try {
if (success) {
context.currentPhase = BatchMutatePhase.POST;
+ for (int i = 0; i < miniBatchOp.size(); i++) {
+ BatchMutateContext.UpdateStatus updateStatus =
context.getUpdateStatus(i);
+ if
(BatchMutateContext.UpdateStatus.UPDATE.equals(updateStatus)) {
+ byte[] retVal = PInteger.INSTANCE.toBytes(1);
+ Cell cell = PhoenixKeyValueUtil.newKeyValue(
+ miniBatchOp.getOperation(i).getRow(),
+ EMPTY_BYTE_ARRAY, EMPTY_BYTE_ARRAY, 0, retVal, 0,
+ retVal.length);
+ Result result = Result.create(new
ArrayList<>(Arrays.asList(cell)));
+ miniBatchOp.setOperationStatus(i,
+ new OperationStatus(OperationStatusCode.SUCCESS,
result));
+ }
+ }
Review Comment:
Since HBase treats Put/Delete mutations as non-atomic mutations (unlike
Increment/Append mutations), if we don't set Result object here in
`postBatchMutateIndispensably()`, no Result object would stay around by the
time mutation is executed till this point.
This is the reason why value `0` is provided with Result object early on (as
part of `addOnDupMutationsToBatch()` as we short-circuit there by ignoring the
mutation) whereas value `1` is provided with Result object here.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]