The GitHub Actions job "CI" on 
rocketmq-dashboard.git/fix/delivery-bulk-retry-isolation has failed.
Run started by GitHub user unbridled-41 (triggered by unbridled-41).

Head commit for run:
d2daf2fae9c40df9eaf49004d6a401b2574640e2 / unbridled-41 
<[email protected]>
fix(alert): keep the bulk delivery retry going when one id fails unexpectedly

retryFailedDeliveries isolates each id from the others on purpose ("retries 
failed
deliveries independently in bulk"), but the loop only catches BusinessException:

    for (Long deliveryId : new LinkedHashSet<>(deliveryIds)) {
        try { retryFailedDelivery(deliveryId); succeeded.add(deliveryId); }
        catch (BusinessException error) { failures.put(deliveryId, 
error.getMessage()); }
    }

Every id is committed by its own mapper.update before the next one starts, so a
RuntimeException on a later row (a DataAccessException, an unexpected mapping
failure) escapes the loop and answers the whole request with a 500 - discarding
the per-id outcome of the rows that were already flipped to PENDING. The page 
then
shows the bulk-retry error and does not reload, so those rows keep displaying
FAILED although the dispatcher will deliver them.

Catch RuntimeException per item as well, record it like the business failures, 
and
keep the loop's guarantee. This is the same per-item isolation
InstanceService.deleteInstances and AlertService.bulkDeleteRules already use.

Tests (server/): mvn -o -B -ntp test 
-Dtest='org.apache.rocketmq.studio.ops.alert.**'
-> Tests run: 327, Failures: 0, Errors: 0.
- new 
bulkRetryKeepsTheOutcomeOfEarlierDeliveriesWhenALaterOneFailsUnexpectedlyTest
  fails before this change (the DataAccessResourceFailureException escapes as an
  error) and passes after it, asserting succeededIds=[8] and failures contains 
9.
- mvn -o -B -ntp checkstyle:check passes.

Report URL: 
https://github.com/apache/rocketmq-dashboard/actions/runs/37979629719

With regards,
GitHub Actions via GitBox

Reply via email to