This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
The following commit(s) were added to refs/heads/rocketmq-studio by this push:
new 5ce2341c8 fix(alert): reject null delivery IDs before bulk retry
(#5137)
5ce2341c8 is described below
commit 5ce2341c806d6b3a52aabda51c083a4bbc8ff90a
Author: coder999o <[email protected]>
AuthorDate: Thu Oct 1 17:30:57 2026 +0800
fix(alert): reject null delivery IDs before bulk retry (#5137)
---
.../studio/ops/alert/NotificationOutboxService.java | 4 ++++
.../studio/ops/alert/NotificationOutboxServiceTest.java | 17 +++++++++++++++++
2 files changed, 21 insertions(+)
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxService.java
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxService.java
index c46fdb112..fd8806f2b 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxService.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxService.java
@@ -257,6 +257,10 @@ public class NotificationOutboxService {
throw new
org.apache.rocketmq.studio.common.exception.BusinessException(400,
"Provide between 1 and 100 notification delivery IDs");
}
+ if (deliveryIds.stream().anyMatch(id -> id == null)) {
+ throw new
org.apache.rocketmq.studio.common.exception.BusinessException(400,
+ "Notification delivery IDs must not contain null");
+ }
List<Long> succeeded = new ArrayList<>();
Map<Long, String> failures = new java.util.LinkedHashMap<>();
for (Long deliveryId : new LinkedHashSet<>(deliveryIds)) {
diff --git
a/server/src/test/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxServiceTest.java
b/server/src/test/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxServiceTest.java
index 80feb2864..d12defcdc 100644
---
a/server/src/test/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxServiceTest.java
+++
b/server/src/test/java/org/apache/rocketmq/studio/ops/alert/NotificationOutboxServiceTest.java
@@ -591,6 +591,23 @@ class NotificationOutboxServiceTest {
assertThat(result.getFailures()).containsKey(9L);
}
+ @Test
+ void bulkRetryRejectsNullIdsBeforeRetryingAnyDeliveryTest() {
+ RmqAlertNotificationOutboxMapper mapper =
mock(RmqAlertNotificationOutboxMapper.class);
+ NotificationOutboxService service = new
NotificationOutboxService(mapper,
+ mock(SettingsRepository.class),
mock(AlertSilenceService.class), mock(AlertRepository.class),
+ mock(OperationAuditService.class));
+
+ org.assertj.core.api.Assertions.assertThatThrownBy(() ->
+ service.retryFailedDeliveries(Arrays.asList(8L, null)))
+
.isInstanceOf(org.apache.rocketmq.studio.common.exception.BusinessException.class)
+ .hasMessage("Notification delivery IDs must not contain null")
+ .satisfies(error -> assertThat(
+
((org.apache.rocketmq.studio.common.exception.BusinessException)
error).getCode())
+ .isEqualTo(400));
+ org.mockito.Mockito.verifyNoInteractions(mapper);
+ }
+
@Test
void renewsClaimWhileEmailDeliveryIsStillInFlightTest() throws Exception {
RmqAlertNotificationOutboxMapper mapper =
mock(RmqAlertNotificationOutboxMapper.class);