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 aa4aee17 fix(cluster): return errors instead of a success envelope for 
failed operations (#1132)
aa4aee17 is described below

commit aa4aee1700706a025a91bf72944f93a94c834539
Author: yyqdbngt <[email protected]>
AuthorDate: Fri Aug 7 15:15:40 2026 +0800

    fix(cluster): return errors instead of a success envelope for failed 
operations (#1132)
    
    Co-authored-by: yyqdbngt <[email protected]>
---
 .../studio/cluster/broker/ClusterController.java   |  4 +++-
 .../cluster/nameserver/NameServerController.java   | 23 ++++++++++++++--------
 .../studio/cluster/proxy/ProxyController.java      | 10 ++++++----
 .../cluster/broker/ClusterControllerTest.java      |  1 -
 .../nameserver/NameServerControllerTest.java       |  6 ++----
 .../studio/cluster/proxy/ProxyControllerTest.java  |  3 +--
 6 files changed, 27 insertions(+), 20 deletions(-)

diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/cluster/broker/ClusterController.java
 
b/server/src/main/java/org/apache/rocketmq/studio/cluster/broker/ClusterController.java
index 7192c6c2..7a72a7bc 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/cluster/broker/ClusterController.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/cluster/broker/ClusterController.java
@@ -66,8 +66,10 @@ public class ClusterController {
     public Result<Map<String, Object>> restartBroker(@PathVariable String 
clusterId,
                                                      @PathVariable String 
name) {
         boolean success = clusterService.restartBroker(clusterId, name);
+        if (!success) {
+            throw new BusinessException(500, "Failed to restart broker: " + 
name);
+        }
         return Result.ok(Map.of(
-                "success", success,
                 "message", "Broker restart initiated for " + name
         ));
     }
diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerController.java
 
b/server/src/main/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerController.java
index 2b6ee2d7..0e2a8129 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerController.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerController.java
@@ -27,8 +27,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Map;
-
 @RestController
 @RequestMapping("/api/nameservers")
 @RequiredArgsConstructor
@@ -50,27 +48,36 @@ public class NameServerController {
     }
 
     @PostMapping("/restart")
-    public Result<Map<String, Boolean>> restartNameServer(
+    public Result<Void> restartNameServer(
             @Valid @RequestBody(required = false) RestartNameServerDTO 
command) {
         requireCommand(command);
         boolean success = clusterService.restartNameServer(command);
-        return Result.ok(Map.of("success", success));
+        requireOperationSuccess(success, "restart");
+        return Result.ok();
     }
 
     @PostMapping("/upgrade")
-    public Result<Map<String, Boolean>> upgradeNameServer(
+    public Result<Void> upgradeNameServer(
             @Valid @RequestBody(required = false) UpgradeNameServerDTO 
command) {
         requireCommand(command);
         boolean success = clusterService.upgradeNameServer(command);
-        return Result.ok(Map.of("success", success));
+        requireOperationSuccess(success, "upgrade");
+        return Result.ok();
     }
 
     @PostMapping("/delete")
-    public Result<Map<String, Boolean>> deleteNameServer(
+    public Result<Void> deleteNameServer(
             @Valid @RequestBody(required = false) DeleteNameServerDTO command) 
{
         requireCommand(command);
         boolean success = clusterService.deleteNameServer(command);
-        return Result.ok(Map.of("success", success));
+        requireOperationSuccess(success, "delete");
+        return Result.ok();
+    }
+
+    private void requireOperationSuccess(boolean success, String operation) {
+        if (!success) {
+            throw new BusinessException(500, "Failed to " + operation + " 
NameServer");
+        }
     }
 
     private void requireCommand(Object command) {
diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyController.java
 
b/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyController.java
index fa90b888..4c4e9646 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyController.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyController.java
@@ -18,6 +18,7 @@ package org.apache.rocketmq.studio.cluster.proxy;
 
 import org.apache.rocketmq.studio.cluster.broker.ClusterService;
 import org.apache.rocketmq.studio.common.domain.Result;
+import org.apache.rocketmq.studio.common.exception.BusinessException;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -25,8 +26,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Map;
-
 @RestController
 @RequestMapping("/api/proxies")
 @RequiredArgsConstructor
@@ -35,8 +34,11 @@ public class ProxyController {
     private final ClusterService clusterService;
 
     @PostMapping("/restart")
-    public Result<Map<String, Boolean>> restartProxy(@Valid @RequestBody 
RestartProxyDTO command) {
+    public Result<Void> restartProxy(@Valid @RequestBody RestartProxyDTO 
command) {
         boolean success = clusterService.restartProxy(command);
-        return Result.ok(Map.of("success", success));
+        if (!success) {
+            throw new BusinessException(500, "Failed to restart proxy");
+        }
+        return Result.ok();
     }
 }
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/broker/ClusterControllerTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/broker/ClusterControllerTest.java
index b71527b5..2bd3b758 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/broker/ClusterControllerTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/broker/ClusterControllerTest.java
@@ -299,7 +299,6 @@ class ClusterControllerTest {
         
mockMvc.perform(post("/api/clusters/cluster-1/brokers/broker-0/restart"))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.code").value(200))
-                .andExpect(jsonPath("$.data.success").value(true))
                 .andExpect(jsonPath("$.data.message").value("Broker restart 
initiated for broker-0"));
     }
 
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerControllerTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerControllerTest.java
index 6f969c93..037dc891 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerControllerTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/nameserver/NameServerControllerTest.java
@@ -122,8 +122,7 @@ class NameServerControllerTest {
                         .contentType(MediaType.APPLICATION_JSON)
                         .content(objectMapper.writeValueAsString(request)))
                 .andExpect(status().isOk())
-                .andExpect(jsonPath("$.code").value(200))
-                .andExpect(jsonPath("$.data.success").value(true));
+                .andExpect(jsonPath("$.code").value(200));
 
         
verify(clusterService).restartNameServer(any(RestartNameServerDTO.class));
     }
@@ -173,8 +172,7 @@ class NameServerControllerTest {
                         .contentType(MediaType.APPLICATION_JSON)
                         .content(objectMapper.writeValueAsString(request)))
                 .andExpect(status().isOk())
-                .andExpect(jsonPath("$.code").value(200))
-                .andExpect(jsonPath("$.data.success").value(true));
+                .andExpect(jsonPath("$.code").value(200));
 
         
verify(clusterService).deleteNameServer(any(DeleteNameServerDTO.class));
     }
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/proxy/ProxyControllerTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/proxy/ProxyControllerTest.java
index 3f5d0d5d..faea87a4 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/proxy/ProxyControllerTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/proxy/ProxyControllerTest.java
@@ -59,8 +59,7 @@ class ProxyControllerTest {
                         .contentType(MediaType.APPLICATION_JSON)
                         .content(objectMapper.writeValueAsString(request)))
                 .andExpect(status().isOk())
-                .andExpect(jsonPath("$.code").value(200))
-                .andExpect(jsonPath("$.data.success").value(true));
+                .andExpect(jsonPath("$.code").value(200));
 
         verify(clusterService).restartProxy(any(RestartProxyDTO.class));
     }

Reply via email to