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]