This is an automated email from the ASF dual-hosted git repository.

jianbin pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git


The following commit(s) were added to refs/heads/2.x by this push:
     new 977196c66e optimize: optimize changeGlobalStatus interface of console 
(#7224)
977196c66e is described below

commit 977196c66e064e62c9a3df67bb82126e4829a3d2
Author: Jingliu <[email protected]>
AuthorDate: Sat Mar 22 21:03:27 2025 +0800

    optimize: optimize changeGlobalStatus interface of console (#7224)
---
 changes/en-us/2.x.md                                     |  1 +
 changes/zh-cn/2.x.md                                     |  1 +
 .../static/console-fe/src/service/transactionInfo.ts     |  2 +-
 .../main/java/org/apache/seata/server/ServerRunner.java  |  2 +-
 .../seata/server/console/impl/AbstractGlobalService.java | 16 +++++++++-------
 .../seata/server/console/impl/AbstractService.java       |  8 ++++++++
 .../seata/server/session/FileSessionManagerTest.java     | 10 +++-------
 7 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index c29109394a..3cbe769c22 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -54,6 +54,7 @@ Add changes here for all PR submitted to the 2.x branch.
 - [[#7179](https://github.com/apache/incubator-seata/pull/7179)] Use shared 
EventLoop for TM and RM clients to reduce thread overhead and improve 
performance
 - [[#7194](https://github.com/apache/incubator-seata/pull/7194)] automatically 
skipping proxy for datasource of type AbstractRoutingDataSource
 - [[#7215](https://github.com/apache/incubator-seata/pull/7215)] intercept 
non-leader write requests of the console trx operation
+- [[#7224](https://github.com/apache/incubator-seata/pull/7224)] optimize 
changeGlobalStatus interface of console
 - [[#7222](https://github.com/apache/incubator-seata/pull/7222)] in raft mode 
add the vgroup field to global lock
 - [[#7229](https://github.com/apache/incubator-seata/pull/7229)] update Notice
 - [[#7234](https://github.com/apache/incubator-seata/pull/7234)] discover the 
raft leader node from the naming server
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index abfc266986..0c0b4d9a42 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -54,6 +54,7 @@
 - [[#7179](https://github.com/apache/incubator-seata/pull/7179)] 使用共享的 
EventLoop 来减少 TM 和 RM 客户端的线程开销并提高性能
 - [[#7194](https://github.com/apache/incubator-seata/pull/7194)] 
自动跳过对AbstractRoutingDataSource类型数据源的代理
 - [[#7215](https://github.com/apache/incubator-seata/pull/7215)] 
拦截控制台写操作的非leader的raft请求
+- [[#7224](https://github.com/apache/incubator-seata/pull/7224)] 
优化控制台的changeGlobalStatus接口·
 - [[#7222](https://github.com/apache/incubator-seata/pull/7222)] 
raft模式下控制台接口响应全局锁信息时增加vgroup字段
 - [[#7229](https://github.com/apache/incubator-seata/pull/7229)] 更新 Notice
 - [[#7234](https://github.com/apache/incubator-seata/pull/7234)] 
优化raft对接namingserve时的服务发现逻辑
diff --git 
a/console/src/main/resources/static/console-fe/src/service/transactionInfo.ts 
b/console/src/main/resources/static/console-fe/src/service/transactionInfo.ts
index dcf6a53bab..eb81045537 100644
--- 
a/console/src/main/resources/static/console-fe/src/service/transactionInfo.ts
+++ 
b/console/src/main/resources/static/console-fe/src/service/transactionInfo.ts
@@ -130,7 +130,7 @@ export async function startGlobalData(params: 
GlobalSessionParam): Promise<any>
   return result;
 }
 
-export async function sendGlobalCommitOrRollback(params: BranchSessionParam): 
Promise<any> {
+export async function sendGlobalCommitOrRollback(params: GlobalSessionParam): 
Promise<any> {
   const xid = params.xid
   const vgroup = params.vgroup
   let result = await request('/console/globalSession/sendCommitOrRollback', {
diff --git a/server/src/main/java/org/apache/seata/server/ServerRunner.java 
b/server/src/main/java/org/apache/seata/server/ServerRunner.java
index a48c7379fd..5c0cb2e092 100644
--- a/server/src/main/java/org/apache/seata/server/ServerRunner.java
+++ b/server/src/main/java/org/apache/seata/server/ServerRunner.java
@@ -65,7 +65,7 @@ public class ServerRunner implements CommandLineRunner, 
DisposableBean,
             started = true;
 
             long cost = System.currentTimeMillis() - start;
-            LOGGER.info("\r\n you can visit seata console UI on 
http://127.0.0.1:{}. \r\n log path: {}.", this.port, this.logPath);
+            LOGGER.info("\r\n you can visit seata console UI on namingserver. 
\r\n log path: {}.", this.logPath);
             LOGGER.info("seata server started in {} millSeconds", cost);
         } catch (Throwable e) {
             started = Boolean.FALSE;
diff --git 
a/server/src/main/java/org/apache/seata/server/console/impl/AbstractGlobalService.java
 
b/server/src/main/java/org/apache/seata/server/console/impl/AbstractGlobalService.java
index 036f7f867c..c45631e0b3 100644
--- 
a/server/src/main/java/org/apache/seata/server/console/impl/AbstractGlobalService.java
+++ 
b/server/src/main/java/org/apache/seata/server/console/impl/AbstractGlobalService.java
@@ -150,16 +150,18 @@ public abstract class AbstractGlobalService extends 
AbstractService implements G
     public SingleResult<Void> changeGlobalStatus(String xid) {
         GlobalSession globalSession = checkGlobalSession(xid);
         GlobalStatus globalStatus = globalSession.getStatus();
-        GlobalStatus newStatus = FAIL_COMMIT_STATUS.contains(globalStatus) ? 
GlobalStatus.CommitRetrying :
-                FAIL_ROLLBACK_STATUS.contains(globalStatus) ? 
GlobalStatus.RollbackRetrying : null;
-        if (newStatus == null) {
-            throw new IllegalArgumentException("current global transaction 
status is not support to change");
-        }
         try {
-            globalSession.changeGlobalStatus(newStatus);
-            return SingleResult.success();
+            if (FAIL_COMMIT_STATUS.contains(globalStatus)) {
+                boolean committed = doCommitGlobal(globalSession);
+                return committed ? SingleResult.success() : 
SingleResult.failure("Commit fail, please try again");
+            }
+            if (FAIL_ROLLBACK_STATUS.contains(globalStatus)) {
+                boolean rollbacked = doRollbackGlobal(globalSession);
+                return rollbacked ? SingleResult.success() : 
SingleResult.failure("Rollback fail, please try again");
+            }
         } catch (Exception e) {
             throw new ConsoleException(e, String.format("change global status 
fail, xid:%s", xid));
         }
+        throw new IllegalArgumentException("current global transaction status 
is not support to change");
     }
 }
diff --git 
a/server/src/main/java/org/apache/seata/server/console/impl/AbstractService.java
 
b/server/src/main/java/org/apache/seata/server/console/impl/AbstractService.java
index 69c96f7ec3..5c893e1d15 100644
--- 
a/server/src/main/java/org/apache/seata/server/console/impl/AbstractService.java
+++ 
b/server/src/main/java/org/apache/seata/server/console/impl/AbstractService.java
@@ -147,6 +147,14 @@ public abstract class AbstractService {
         return true;
     }
 
+    protected boolean doCommitGlobal(GlobalSession globalSession) throws 
TransactionException {
+        return DefaultCoordinator.getInstance().doGlobalCommit(globalSession, 
false);
+    }
+
+    protected boolean doRollbackGlobal(GlobalSession globalSession) throws 
TransactionException {
+        return 
DefaultCoordinator.getInstance().doGlobalRollback(globalSession, false);
+    }
+
     protected static class CheckResult {
         private GlobalSession globalSession;
         private BranchSession branchSession;
diff --git 
a/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java
 
b/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java
index e3056ee32c..d71bc6010e 100644
--- 
a/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java
+++ 
b/server/src/test/java/org/apache/seata/server/session/FileSessionManagerTest.java
@@ -38,6 +38,7 @@ import org.apache.seata.core.model.BranchStatus;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.LockStatus;
+import org.apache.seata.server.console.exception.ConsoleException;
 import org.apache.seata.server.console.entity.param.GlobalSessionParam;
 import org.apache.seata.server.console.service.BranchSessionService;
 import org.apache.seata.server.console.service.GlobalSessionService;
@@ -472,14 +473,9 @@ public class FileSessionManagerTest {
             GlobalSession globalSession = globalSessions.get(1);
             globalSession.changeGlobalStatus(GlobalStatus.CommitFailed);
             String xid = globalSession.getXid();
-            globalSessionService.changeGlobalStatus(xid);
-            
Assertions.assertEquals(SessionHolder.findGlobalSession(xid).getStatus(),
-                    GlobalStatus.CommitRetrying);
-
+            Assertions.assertThrows(ConsoleException.class, () -> 
globalSessionService.changeGlobalStatus(xid));
             globalSession.changeGlobalStatus(GlobalStatus.RollbackFailed);
-            globalSessionService.changeGlobalStatus(xid);
-            
Assertions.assertEquals(SessionHolder.findGlobalSession(xid).getStatus(),
-                    GlobalStatus.RollbackRetrying);
+            Assertions.assertThrows(ConsoleException.class, () -> 
globalSessionService.changeGlobalStatus(xid));
         } finally {
             for (GlobalSession globalSession : globalSessions) {
                 globalSession.setStatus(GlobalStatus.Committed);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to