LI123456mo opened a new pull request, #16470: URL: https://github.com/apache/dubbo/pull/16470
Fixes #16469 ## What is the purpose of the change When handling one item of a batch threw inside BatchExecutorQueue, the rest of the batch had already been taken off the queue and was silently dropped. TripleWriteQueue only handled CompletionException, so any other failure left the failing command's promise pending, and a failing last command skipped the channel flush for the earlier writes in the same batch. ## Brief changelog - BatchExecutorQueue: failures in prepare and flush are caught and logged per item, so the remaining items of the batch are still handled. If the executor rejects the task that drains the queue, the scheduled flag is reset so a later enqueue schedules processing again. - TripleWriteQueue: any failure completes only that command's promise as failed, and the channel is flushed even when the last command of the batch fails. ## Verifying this change Added BatchExecutorQueueTest and TripleWriteQueueTest covering failures in the middle, at the end, at a chunk boundary and multiple failures in one batch, executor rejection, promise completion, and flushing after a failing last command. -- 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
