You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by ji...@apache.org on 2025/03/16 12:25:16 UTC
(incubator-seata) branch 2.x updated: optimize: in raft mode add the vgroup field to global lock (#7222)
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 e0dc0c379f optimize: in raft mode add the vgroup field to global lock (#7222)
e0dc0c379f is described below
commit e0dc0c379fab845d0685565ca543427f193578d0
Author: funkye <ji...@apache.org>
AuthorDate: Sun Mar 16 20:25:12 2025 +0800
optimize: in raft mode add the vgroup field to global lock (#7222)
---
changes/en-us/2.x.md | 6 +--
changes/zh-cn/2.x.md | 5 +-
.../console-fe/src/components/Header/Header.tsx | 2 +-
.../src/pages/GlobalLockInfo/GlobalLockInfo.tsx | 2 +
.../console-fe/src/service/globalLockInfo.ts | 4 +-
.../namingserver/filter/ConsoleRemotingFilter.java | 5 +-
.../seata/namingserver/manager/NamingManager.java | 2 +-
.../server/cluster/raft/RaftStateMachine.java | 2 +
.../raft/serializer/CustomDeserializer.java | 22 +++++---
.../raft/snapshot/vgroup/VGroupSnapshotFile.java | 2 +-
.../server/config/SeataNamingserverWebConfig.java | 22 +++-----
.../controller/BranchSessionController.java | 1 -
.../console/controller/GlobalLockController.java | 5 +-
.../controller/GlobalSessionController.java | 4 +-
.../console/entity/bo/GlobalLockQueryBO.java | 48 ++++++++++++++++++
.../{ => entity}/param/GlobalLockParam.java | 2 +-
.../{ => entity}/param/GlobalSessionParam.java | 2 +-
.../console/{ => entity}/vo/BranchSessionVO.java | 2 +-
.../console/{ => entity}/vo/GlobalLockVO.java | 52 ++++++++++++-------
.../console/{ => entity}/vo/GlobalSessionVO.java | 2 +-
.../server/console/impl/AbstractLockService.java | 2 +-
.../impl/db/BranchSessionDBServiceImpl.java | 2 +-
.../console/impl/db/GlobalLockDBServiceImpl.java | 4 +-
.../impl/db/GlobalSessionDBServiceImpl.java | 6 +--
.../impl/file/BranchSessionFileServiceImpl.java | 2 +-
.../impl/file/GlobalLockFileServiceImpl.java | 50 +++++++++---------
.../impl/file/GlobalSessionFileServiceImpl.java | 4 +-
.../impl/redis/BranchSessionRedisServiceImpl.java | 2 +-
.../impl/redis/GlobalLockRedisServiceImpl.java | 4 +-
.../impl/redis/GlobalSessionRedisServiceImpl.java | 4 +-
.../console/service/BranchSessionService.java | 2 +-
.../server/console/service/GlobalLockService.java | 4 +-
.../console/service/GlobalSessionService.java | 4 +-
.../seata/server/filter/RaftGroupFilter.java | 59 ----------------------
...aderWriteFilter.java => RaftRequestFilter.java} | 37 +++++++++-----
.../seata/server/storage/SessionConverter.java | 4 +-
.../redis/store/RedisTransactionStoreManager.java | 2 +-
.../apache/seata/server/lock/LockManagerTest.java | 4 +-
.../server/session/FileSessionManagerTest.java | 5 +-
.../server/session/redis/RedisQueryConsolTest.java | 8 +--
.../redis/RedisTransactionStoreManagerTest.java | 6 +--
41 files changed, 217 insertions(+), 190 deletions(-)
diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 5af0d464d8..ab12f46ba5 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -54,7 +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
-- [[#7214](https://github.com/apache/incubator-seata/pull/7214)] upgrade jackson to 2.18.3
+- [[#7222](https://github.com/apache/incubator-seata/pull/7222)] in raft mode add the vgroup field to global lock
### security:
@@ -63,8 +63,8 @@ Add changes here for all PR submitted to the 2.x branch.
- [[#6144](https://github.com/apache/incubator-seata/pull/6144)] upgrade nacos client to 1.4.6
- [[#6147](https://github.com/apache/incubator-seata/pull/6147)] upgrade kafka-clients to 3.6.1
- [[#6338](https://github.com/apache/incubator-seata/pull/6338)] upgrade jackson version
-- [[#7201](https://github.com/apache/incubator-seata/issues/7201)] upgrade protobuf.version to 3.25.5
-
+- [[#7201](https://github.com/apache/incubator-seata/pull/7202)] upgrade protobuf.version to 3.25.5
+- [[#7214](https://github.com/apache/incubator-seata/pull/7214)] upgrade jackson to 2.18.3
### test:
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 32e0f4aca0..a794a5c153 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -54,7 +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请求
-- [[#7214](https://github.com/apache/incubator-seata/pull/7214)] 升级 jackson 至 2.18.3 版本
+- [[#7222](https://github.com/apache/incubator-seata/pull/7222)] raft模式下控制台接口响应全局锁信息时增加vgroup字段
### security:
@@ -63,7 +63,8 @@
- [[#6145](https://github.com/apache/incubator-seata/pull/6145)] 升级 jettison依赖版本至1.5.4
- [[#6147](https://github.com/apache/incubator-seata/pull/6147)] 升级 kafka-clients依赖至3.6.1
- [[#6338](https://github.com/apache/incubator-seata/pull/6338)] 升级 jackson 依赖版本
-- [[#7201](https://github.com/apache/incubator-seata/issues/7201)] 升级 protobuf 版本到 3.25.5
+- [[#7201](https://github.com/apache/incubator-seata/pull/7202)] 升级 protobuf 版本到 3.25.5
+- [[#7214](https://github.com/apache/incubator-seata/pull/7214)] 升级 jackson 至 2.18.3 版本
### test:
diff --git a/console/src/main/resources/static/console-fe/src/components/Header/Header.tsx b/console/src/main/resources/static/console-fe/src/components/Header/Header.tsx
index 4703a58944..175c225b01 100644
--- a/console/src/main/resources/static/console-fe/src/components/Header/Header.tsx
+++ b/console/src/main/resources/static/console-fe/src/components/Header/Header.tsx
@@ -74,7 +74,7 @@ class Header extends React.Component<PropsType, StateType> {
getUsername = () => {
const token = window.localStorage.getItem(AUTHORIZATION_HEADER);
- if (token) {
+ if (token && token !== "null") {
const base64Url = token.split('.')[1];
const base64 = base64Url.replace('-', '+').replace('_', '/');
const parsedToken = JSON.parse(window.atob(base64));
diff --git a/console/src/main/resources/static/console-fe/src/pages/GlobalLockInfo/GlobalLockInfo.tsx b/console/src/main/resources/static/console-fe/src/pages/GlobalLockInfo/GlobalLockInfo.tsx
index 46a3ff2507..1e45540023 100644
--- a/console/src/main/resources/static/console-fe/src/pages/GlobalLockInfo/GlobalLockInfo.tsx
+++ b/console/src/main/resources/static/console-fe/src/pages/GlobalLockInfo/GlobalLockInfo.tsx
@@ -158,6 +158,8 @@ class GlobalLockInfo extends React.Component<GlobalProps, GlobalLockInfoState> {
}
// format time
data.data.forEach((element: any) => {
+ element.cluster = this.state.globalLockParam.cluster;
+ element.namespace = this.state.globalLockParam.namespace;
element.gmtCreate = (element.gmtCreate == null || element.gmtCreate === '') ? null : moment(Number(element.gmtCreate)).format('YYYY-MM-DD HH:mm:ss');
element.gmtModified = (element.gmtModified == null || element.gmtModified === '') ? null : moment(Number(element.gmtModified)).format('YYYY-MM-DD HH:mm:ss');
});
diff --git a/console/src/main/resources/static/console-fe/src/service/globalLockInfo.ts b/console/src/main/resources/static/console-fe/src/service/globalLockInfo.ts
index 2f98304b16..fa59b8e776 100644
--- a/console/src/main/resources/static/console-fe/src/service/globalLockInfo.ts
+++ b/console/src/main/resources/static/console-fe/src/service/globalLockInfo.ts
@@ -67,12 +67,14 @@ export async function deleteData(params: GlobalLockParam): Promise<any> {
export async function checkData(params: GlobalLockParam): Promise<any> {
const xid = params.xid
const branchId = params.branchId
+ const vgroup = params.vgroup
let result = await request('/console/globalLock/check', {
method: 'get',
params: {
xid,
- branchId
+ branchId,
+ vgroup: vgroup
},
headers: {
'x-seata-namespace': params.namespace,
diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/filter/ConsoleRemotingFilter.java b/namingserver/src/main/java/org/apache/seata/namingserver/filter/ConsoleRemotingFilter.java
index d47d9bdcd5..0de0aff0f5 100644
--- a/namingserver/src/main/java/org/apache/seata/namingserver/filter/ConsoleRemotingFilter.java
+++ b/namingserver/src/main/java/org/apache/seata/namingserver/filter/ConsoleRemotingFilter.java
@@ -35,6 +35,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.seata.common.metadata.ClusterRole;
import org.apache.seata.common.metadata.Node;
+import org.apache.seata.common.metadata.namingserver.NamingServerNode;
import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.common.util.StringUtils;
import org.apache.seata.namingserver.manager.NamingManager;
@@ -88,7 +89,7 @@ public class ConsoleRemotingFilter implements Filter {
}
if (CollectionUtils.isNotEmpty(list)) {
// Randomly select a node from the list
- Node node = list.get(ThreadLocalRandom.current().nextInt(list.size()));
+ NamingServerNode node = (NamingServerNode) list.get(ThreadLocalRandom.current().nextInt(list.size()));
Node.Endpoint controlEndpoint = node.getControl();
if (controlEndpoint != null) {
// Construct the target URL
@@ -99,7 +100,7 @@ public class ConsoleRemotingFilter implements Filter {
// Copy headers from the original request
HttpHeaders headers = new HttpHeaders();
if (node.getRole() == ClusterRole.LEADER) {
- headers.add(RAFT_GROUP_HEADER, node.getGroup());
+ headers.add(RAFT_GROUP_HEADER, node.getUnit());
}
Collections.list(request.getHeaderNames())
.forEach(headerName -> headers.add(headerName, request.getHeader(headerName)));
diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java
index 3656710b37..0474b9bcc4 100644
--- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java
+++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java
@@ -215,7 +215,7 @@ public class NamingManager {
try {
ClusterBO clusterBO = vGroupMap.get(vGroup, k -> new ConcurrentHashMap<>())
.computeIfAbsent(namespace, k -> new NamespaceBO()).getCluster(clusterName);
- if (clusterBO != null /**&& !clusterBO.getUnitNames().contains(unitName)**/) {
+ if (clusterBO != null) {
boolean needNotify = !clusterBO.getUnitNames().contains(unitName);
NamespaceBO namespaceBO = vGroupMap.getIfPresent(vGroup).get(namespace);
namespaceBO.removeOldCluster(clusterName);
diff --git a/server/src/main/java/org/apache/seata/server/cluster/raft/RaftStateMachine.java b/server/src/main/java/org/apache/seata/server/cluster/raft/RaftStateMachine.java
index 10d18e9f31..f7198713ae 100644
--- a/server/src/main/java/org/apache/seata/server/cluster/raft/RaftStateMachine.java
+++ b/server/src/main/java/org/apache/seata/server/cluster/raft/RaftStateMachine.java
@@ -73,6 +73,7 @@ import org.apache.seata.server.cluster.raft.execute.global.UpdateGlobalSessionEx
import org.apache.seata.server.cluster.raft.execute.lock.BranchReleaseLockExecute;
import org.apache.seata.server.cluster.raft.execute.lock.GlobalReleaseLockExecute;
import org.apache.seata.server.cluster.listener.ClusterChangeEvent;
+import org.apache.seata.server.cluster.raft.snapshot.vgroup.VGroupSnapshotFile;
import org.apache.seata.server.cluster.raft.sync.RaftSyncMessageSerializer;
import org.apache.seata.server.cluster.raft.sync.msg.RaftBaseMsg;
import org.apache.seata.server.cluster.raft.sync.msg.RaftClusterMetadataMsg;
@@ -148,6 +149,7 @@ public class RaftStateMachine extends StateMachineAdapter {
registryStoreSnapshotFile(new LeaderMetadataSnapshotFile(group));
if (StoreMode.RAFT.getName().equalsIgnoreCase(mode)) {
registryStoreSnapshotFile(new SessionSnapshotFile(group));
+ registryStoreSnapshotFile(new VGroupSnapshotFile(group));
EXECUTES.put(ADD_GLOBAL_SESSION, new AddGlobalSessionExecute());
EXECUTES.put(ADD_BRANCH_SESSION, new AddBranchSessionExecute());
EXECUTES.put(REMOVE_BRANCH_SESSION, new RemoveBranchSessionExecute());
diff --git a/server/src/main/java/org/apache/seata/server/cluster/raft/serializer/CustomDeserializer.java b/server/src/main/java/org/apache/seata/server/cluster/raft/serializer/CustomDeserializer.java
index 533f5c3d67..389a192798 100644
--- a/server/src/main/java/org/apache/seata/server/cluster/raft/serializer/CustomDeserializer.java
+++ b/server/src/main/java/org/apache/seata/server/cluster/raft/serializer/CustomDeserializer.java
@@ -17,6 +17,8 @@
package org.apache.seata.server.cluster.raft.serializer;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
@@ -29,7 +31,13 @@ public class CustomDeserializer extends JsonDeserializer<Class<?>> {
String currentPackage = "org.apache.seata.server";
- String permitPackage = "org.apache.seata";
+ private static final List<String> PERMIT_PACKAGES = new ArrayList<>();
+
+ static {
+ PERMIT_PACKAGES.add("org.apache.seata");
+ // The storage structure of vgroup is a map.
+ PERMIT_PACKAGES.add("java.util.HashMap");
+ }
@Override
public Class<?> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
@@ -38,11 +46,13 @@ public class CustomDeserializer extends JsonDeserializer<Class<?>> {
if (className.startsWith(oldPackage)) {
className = className.replaceFirst(oldPackage, currentPackage);
}
- if (className.startsWith(permitPackage)) {
- try {
- return Class.forName(className);
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e.getMessage(), e);
+ for (String permitPackage : PERMIT_PACKAGES) {
+ if (className.startsWith(permitPackage)) {
+ try {
+ return Class.forName(className);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
}
}
throw new SeataRuntimeException(ErrorCode.ERR_DESERIALIZATION_SECURITY,
diff --git a/server/src/main/java/org/apache/seata/server/cluster/raft/snapshot/vgroup/VGroupSnapshotFile.java b/server/src/main/java/org/apache/seata/server/cluster/raft/snapshot/vgroup/VGroupSnapshotFile.java
index 229eeada58..3cd27053ae 100644
--- a/server/src/main/java/org/apache/seata/server/cluster/raft/snapshot/vgroup/VGroupSnapshotFile.java
+++ b/server/src/main/java/org/apache/seata/server/cluster/raft/snapshot/vgroup/VGroupSnapshotFile.java
@@ -36,7 +36,7 @@ public class VGroupSnapshotFile implements Serializable, StoreSnapshotFile {
private final static Logger LOGGER = LoggerFactory.getLogger(VGroupSnapshotFile.class);
- public static final String ROOT_MAPPING_MANAGER_NAME = "vgroup_mapping.json";
+ public static final String ROOT_MAPPING_MANAGER_NAME = "vgroup_mapping";
String group;
diff --git a/server/src/main/java/org/apache/seata/server/config/SeataNamingserverWebConfig.java b/server/src/main/java/org/apache/seata/server/config/SeataNamingserverWebConfig.java
index 8a173fd10a..62062d742d 100644
--- a/server/src/main/java/org/apache/seata/server/config/SeataNamingserverWebConfig.java
+++ b/server/src/main/java/org/apache/seata/server/config/SeataNamingserverWebConfig.java
@@ -17,8 +17,7 @@
package org.apache.seata.server.config;
import org.apache.seata.server.filter.RaftCondition;
-import org.apache.seata.server.filter.RaftGroupFilter;
-import org.apache.seata.server.filter.RaftLeaderWriteFilter;
+import org.apache.seata.server.filter.RaftRequestFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
@@ -28,21 +27,14 @@ import org.springframework.context.annotation.DependsOn;
@Configuration
public class SeataNamingserverWebConfig {
- @Bean
- public FilterRegistrationBean<RaftGroupFilter> raftGroupFilter() {
- FilterRegistrationBean<RaftGroupFilter> registrationBean = new FilterRegistrationBean<>();
- registrationBean.setFilter(new RaftGroupFilter());
- registrationBean.addUrlPatterns("/vgroup/v1/*");
- return registrationBean;
- }
-
@Bean
@Conditional(RaftCondition.class)
- @DependsOn("raftLeaderWriteFilter")
- public FilterRegistrationBean<RaftLeaderWriteFilter> raftLeaderWriteServletFilter(RaftLeaderWriteFilter raftLeaderWriteFilter) {
- FilterRegistrationBean<RaftLeaderWriteFilter> registrationBean = new FilterRegistrationBean<>();
- registrationBean.setFilter(raftLeaderWriteFilter);
- registrationBean.addUrlPatterns("/api/v1/console/*");
+ @DependsOn("raftRequestFilter")
+ public FilterRegistrationBean<RaftRequestFilter> raftRequestServletFilter(RaftRequestFilter raftRequestFilter) {
+ FilterRegistrationBean<RaftRequestFilter> registrationBean = new FilterRegistrationBean<>();
+ registrationBean.setFilter(raftRequestFilter);
+ registrationBean.addUrlPatterns("/api/v1/console/*", "/vgroup/v1/*");
return registrationBean;
}
+
}
diff --git a/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java b/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java
index 1dce5caf16..fd649a0898 100644
--- a/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java
+++ b/server/src/main/java/org/apache/seata/server/console/controller/BranchSessionController.java
@@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/v1/console/branchSession")
public class BranchSessionController {
private static final Logger LOGGER = LoggerFactory.getLogger(BranchSessionController.class);
-
@Resource(type = BranchSessionService.class)
private BranchSessionService branchSessionService;
diff --git a/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java b/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java
index 9eaeaa2499..1e9e2c61b9 100644
--- a/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java
+++ b/server/src/main/java/org/apache/seata/server/console/controller/GlobalLockController.java
@@ -20,8 +20,8 @@ import javax.annotation.Resource;
import org.apache.seata.common.result.PageResult;
import org.apache.seata.common.result.SingleResult;
-import org.apache.seata.server.console.param.GlobalLockParam;
-import org.apache.seata.server.console.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
import org.apache.seata.server.console.service.GlobalLockService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,4 +78,5 @@ public class GlobalLockController {
public SingleResult<Boolean> check(String xid, String branchId) {
return globalLockService.check(xid, branchId);
}
+
}
diff --git a/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java b/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java
index 9ee3af9a4c..228745cd1f 100644
--- a/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java
+++ b/server/src/main/java/org/apache/seata/server/console/controller/GlobalSessionController.java
@@ -19,9 +19,9 @@ package org.apache.seata.server.console.controller;
import javax.annotation.Resource;
import org.apache.seata.common.result.SingleResult;
-import org.apache.seata.server.console.param.GlobalSessionParam;
+import org.apache.seata.server.console.entity.param.GlobalSessionParam;
import org.apache.seata.common.result.PageResult;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.apache.seata.server.console.service.GlobalSessionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/server/src/main/java/org/apache/seata/server/console/entity/bo/GlobalLockQueryBO.java b/server/src/main/java/org/apache/seata/server/console/entity/bo/GlobalLockQueryBO.java
new file mode 100644
index 0000000000..12b4a7b821
--- /dev/null
+++ b/server/src/main/java/org/apache/seata/server/console/entity/bo/GlobalLockQueryBO.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.seata.server.console.entity.bo;
+
+import org.apache.seata.core.lock.RowLock;
+import org.apache.seata.server.session.GlobalSession;
+
+public class GlobalLockQueryBO {
+
+ private RowLock rowLock;
+
+ private GlobalSession globalSession;
+
+ public GlobalLockQueryBO(RowLock rowLock, GlobalSession globalSession) {
+ this.rowLock = rowLock;
+ this.globalSession = globalSession;
+ }
+
+ public RowLock getRowLock() {
+ return rowLock;
+ }
+
+ public void setRowLock(RowLock rowLock) {
+ this.rowLock = rowLock;
+ }
+
+ public GlobalSession getGlobalSession() {
+ return globalSession;
+ }
+
+ public void setGlobalSession(GlobalSession globalSession) {
+ this.globalSession = globalSession;
+ }
+}
diff --git a/server/src/main/java/org/apache/seata/server/console/param/GlobalLockParam.java b/server/src/main/java/org/apache/seata/server/console/entity/param/GlobalLockParam.java
similarity index 98%
rename from server/src/main/java/org/apache/seata/server/console/param/GlobalLockParam.java
rename to server/src/main/java/org/apache/seata/server/console/entity/param/GlobalLockParam.java
index ecf289558b..41f8be5075 100644
--- a/server/src/main/java/org/apache/seata/server/console/param/GlobalLockParam.java
+++ b/server/src/main/java/org/apache/seata/server/console/entity/param/GlobalLockParam.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.server.console.param;
+package org.apache.seata.server.console.entity.param;
import org.apache.seata.common.result.BaseParam;
diff --git a/server/src/main/java/org/apache/seata/server/console/param/GlobalSessionParam.java b/server/src/main/java/org/apache/seata/server/console/entity/param/GlobalSessionParam.java
similarity index 98%
rename from server/src/main/java/org/apache/seata/server/console/param/GlobalSessionParam.java
rename to server/src/main/java/org/apache/seata/server/console/entity/param/GlobalSessionParam.java
index 88e61aef8b..19d1551b5f 100644
--- a/server/src/main/java/org/apache/seata/server/console/param/GlobalSessionParam.java
+++ b/server/src/main/java/org/apache/seata/server/console/entity/param/GlobalSessionParam.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.server.console.param;
+package org.apache.seata.server.console.entity.param;
import org.apache.seata.common.result.BaseParam;
diff --git a/server/src/main/java/org/apache/seata/server/console/vo/BranchSessionVO.java b/server/src/main/java/org/apache/seata/server/console/entity/vo/BranchSessionVO.java
similarity index 99%
rename from server/src/main/java/org/apache/seata/server/console/vo/BranchSessionVO.java
rename to server/src/main/java/org/apache/seata/server/console/entity/vo/BranchSessionVO.java
index 17db0aef52..9e3f71ecda 100644
--- a/server/src/main/java/org/apache/seata/server/console/vo/BranchSessionVO.java
+++ b/server/src/main/java/org/apache/seata/server/console/entity/vo/BranchSessionVO.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.server.console.vo;
+package org.apache.seata.server.console.entity.vo;
import java.sql.Date;
import java.sql.ResultSet;
diff --git a/server/src/main/java/org/apache/seata/server/console/vo/GlobalLockVO.java b/server/src/main/java/org/apache/seata/server/console/entity/vo/GlobalLockVO.java
similarity index 77%
rename from server/src/main/java/org/apache/seata/server/console/vo/GlobalLockVO.java
rename to server/src/main/java/org/apache/seata/server/console/entity/vo/GlobalLockVO.java
index b46bc20f34..dd0a79e9e0 100644
--- a/server/src/main/java/org/apache/seata/server/console/vo/GlobalLockVO.java
+++ b/server/src/main/java/org/apache/seata/server/console/entity/vo/GlobalLockVO.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.server.console.vo;
+package org.apache.seata.server.console.entity.vo;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -26,6 +26,7 @@ import java.util.List;
import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.core.constants.ServerTableColumnsName;
import org.apache.seata.core.lock.RowLock;
+import org.apache.seata.server.console.entity.bo.GlobalLockQueryBO;
/**
* GlobalLockVO
@@ -46,6 +47,11 @@ public class GlobalLockVO {
private String rowKey;
+ /**
+ * the vgroup
+ */
+ private String vgroup;
+
private Long gmtCreate;
private Long gmtModified;
@@ -55,13 +61,13 @@ public class GlobalLockVO {
* @param rowLocks the RowLock list
* @return the GlobalLockVO list
*/
- public static List<GlobalLockVO> convert(List<RowLock> rowLocks) {
- if (CollectionUtils.isEmpty(rowLocks)) {
+ public static List<GlobalLockVO> convert(List<GlobalLockQueryBO> globalLockQueryBOS) {
+ if (CollectionUtils.isEmpty(globalLockQueryBOS)) {
return Collections.emptyList();
}
- final List<GlobalLockVO> result = new ArrayList<>(rowLocks.size());
- for (RowLock rowLock : rowLocks) {
- result.add(convert(rowLock));
+ final List<GlobalLockVO> result = new ArrayList<>(globalLockQueryBOS.size());
+ for (GlobalLockQueryBO globalLockQueryBO : globalLockQueryBOS) {
+ result.add(convert(globalLockQueryBO.getRowLock(), globalLockQueryBO.getGlobalSession().getTransactionServiceGroup()));
}
return result;
@@ -73,7 +79,7 @@ public class GlobalLockVO {
* @param rowLock the RowLock
* @return the GlobalLockVO
*/
- public static GlobalLockVO convert(RowLock rowLock) {
+ public static GlobalLockVO convert(RowLock rowLock, String vgroup) {
final GlobalLockVO globalLockVO = new GlobalLockVO();
globalLockVO.setXid(rowLock.getXid());
globalLockVO.setTransactionId(rowLock.getTransactionId());
@@ -82,6 +88,7 @@ public class GlobalLockVO {
globalLockVO.setTableName(rowLock.getTableName());
globalLockVO.setPk(rowLock.getPk());
globalLockVO.setRowKey(rowLock.getRowKey());
+ globalLockVO.setVgroup(vgroup);
return globalLockVO;
}
@@ -180,16 +187,25 @@ public class GlobalLockVO {
@Override
public String toString() {
- return "GlobalLockVO{" +
- "xid='" + xid + '\'' +
- ", transactionId=" + transactionId +
- ", branchId=" + branchId +
- ", resourceId='" + resourceId + '\'' +
- ", tableName='" + tableName + '\'' +
- ", pk='" + pk + '\'' +
- ", rowKey='" + rowKey + '\'' +
- ", gmtCreate=" + gmtCreate +
- ", gmtModified=" + gmtModified +
- '}';
+ return "GlobalLockVO{" + "xid='" + xid + '\'' + ", transactionId='" + transactionId + '\'' + ", branchId='"
+ + branchId + '\'' + ", resourceId='" + resourceId + '\'' + ", tableName='" + tableName + '\'' + ", pk='"
+ + pk + '\'' + ", rowKey='" + rowKey + '\'' + ", vgroup='" + vgroup + '\'' + ", gmtCreate=" + gmtCreate
+ + ", gmtModified=" + gmtModified + '}';
+ }
+
+ public void setTransactionId(String transactionId) {
+ this.transactionId = transactionId;
+ }
+
+ public void setBranchId(String branchId) {
+ this.branchId = branchId;
+ }
+
+ public String getVgroup() {
+ return vgroup;
+ }
+
+ public void setVgroup(String vgroup) {
+ this.vgroup = vgroup;
}
}
diff --git a/server/src/main/java/org/apache/seata/server/console/vo/GlobalSessionVO.java b/server/src/main/java/org/apache/seata/server/console/entity/vo/GlobalSessionVO.java
similarity index 99%
rename from server/src/main/java/org/apache/seata/server/console/vo/GlobalSessionVO.java
rename to server/src/main/java/org/apache/seata/server/console/entity/vo/GlobalSessionVO.java
index ddb4a43fb1..2770c11709 100644
--- a/server/src/main/java/org/apache/seata/server/console/vo/GlobalSessionVO.java
+++ b/server/src/main/java/org/apache/seata/server/console/entity/vo/GlobalSessionVO.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.server.console.vo;
+package org.apache.seata.server.console.entity.vo;
import java.sql.ResultSet;
import java.sql.SQLException;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java b/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java
index 3b3f7634ae..f87e4304f2 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java
@@ -18,7 +18,7 @@ package org.apache.seata.server.console.impl;
import org.apache.seata.common.util.StringUtils;
import org.apache.seata.common.result.SingleResult;
-import org.apache.seata.server.console.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
import org.apache.seata.server.console.service.GlobalLockService;
public abstract class AbstractLockService extends AbstractService implements GlobalLockService {
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImpl.java
index 375503445d..1d8cb91f00 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/db/BranchSessionDBServiceImpl.java
@@ -37,7 +37,7 @@ import org.apache.seata.core.store.db.DataSourceProvider;
import org.apache.seata.core.store.db.sql.log.LogStoreSqlsFactory;
import org.apache.seata.server.console.impl.AbstractBranchService;
import org.apache.seata.server.console.service.BranchSessionService;
-import org.apache.seata.server.console.vo.BranchSessionVO;
+import org.apache.seata.server.console.entity.vo.BranchSessionVO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
index b1ec8d40d9..e19d9c5aad 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
@@ -39,9 +39,9 @@ import org.apache.seata.core.store.db.DataSourceProvider;
import org.apache.seata.core.store.db.sql.lock.LockStoreSqlFactory;
import org.apache.seata.server.console.exception.ConsoleException;
import org.apache.seata.server.console.impl.AbstractLockService;
-import org.apache.seata.server.console.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
import org.apache.seata.server.console.service.GlobalLockService;
-import org.apache.seata.server.console.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
index 4bc5b16969..fcc38870db 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
@@ -39,11 +39,11 @@ import org.apache.seata.common.result.PageResult;
import org.apache.seata.core.store.db.DataSourceProvider;
import org.apache.seata.core.store.db.sql.log.LogStoreSqlsFactory;
import org.apache.seata.server.console.impl.AbstractGlobalService;
-import org.apache.seata.server.console.param.GlobalSessionParam;
+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;
-import org.apache.seata.server.console.vo.BranchSessionVO;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.vo.BranchSessionVO;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/file/BranchSessionFileServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/file/BranchSessionFileServiceImpl.java
index efd2337d15..cb96b8ecb8 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/file/BranchSessionFileServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/file/BranchSessionFileServiceImpl.java
@@ -18,7 +18,7 @@ package org.apache.seata.server.console.impl.file;
import org.apache.seata.common.util.StringUtils;
import org.apache.seata.server.console.impl.AbstractBranchService;
-import org.apache.seata.server.console.vo.BranchSessionVO;
+import org.apache.seata.server.console.entity.vo.BranchSessionVO;
import org.apache.seata.common.result.PageResult;
import org.apache.seata.server.console.service.BranchSessionService;
import org.apache.seata.server.session.GlobalSession;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
index 2c745ee78a..b9cd5b3f34 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
@@ -18,7 +18,6 @@ package org.apache.seata.server.console.impl.file;
import java.util.Collection;
import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -27,12 +26,13 @@ import org.apache.seata.common.result.SingleResult;
import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.common.util.StringUtils;
import org.apache.seata.core.exception.TransactionException;
+import org.apache.seata.server.console.entity.bo.GlobalLockQueryBO;
import org.apache.seata.server.console.exception.ConsoleException;
import org.apache.seata.server.console.impl.AbstractLockService;
import org.apache.seata.server.console.impl.redis.GlobalLockRedisServiceImpl;
-import org.apache.seata.server.console.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
import org.apache.seata.common.result.PageResult;
-import org.apache.seata.server.console.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
import org.apache.seata.core.lock.RowLock;
import org.apache.seata.server.console.service.GlobalLockService;
import org.apache.seata.server.lock.LockerManagerFactory;
@@ -46,7 +46,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
import static org.apache.seata.common.util.StringUtils.isBlank;
-import static org.apache.seata.server.console.vo.GlobalLockVO.convert;
+import static org.apache.seata.server.console.entity.vo.GlobalLockVO.convert;
import static java.util.Objects.isNull;
/**
@@ -65,14 +65,13 @@ public class GlobalLockFileServiceImpl extends AbstractLockService implements Gl
final Collection<GlobalSession> allSessions = SessionHolder.getRootSessionManager().allSessions();
- final AtomicInteger total = new AtomicInteger();
- List<RowLock> result = allSessions
- .parallelStream()
+
+ List<GlobalLockQueryBO> result = allSessions.parallelStream()
.filter(obtainGlobalSessionPredicate(param))
- .flatMap(globalSession -> globalSession.getBranchSessions().stream())
- .filter(obtainBranchSessionPredicate(param))
- .flatMap(branchSession -> filterAndMap(param, branchSession))
- .peek(globalSession -> total.incrementAndGet())
+ .flatMap(globalSession -> globalSession.getBranchSessions().stream()
+ .filter(obtainBranchSessionPredicate(param))
+ .flatMap(branchSession -> filterAndMap(param, branchSession)
+ .map(lock -> new GlobalLockQueryBO(lock, globalSession))))
.collect(Collectors.toList());
return PageResult.build(convert(result), param.getPageNum(), param.getPageSize());
@@ -86,21 +85,22 @@ public class GlobalLockFileServiceImpl extends AbstractLockService implements Gl
LOGGER.debug("start to delete global lock,xid:{} branchId:{}",
param.getXid(), param.getBranchId());
}
+ GlobalSession globalSession = SessionHolder.getRootSessionManager().findGlobalSession(param.getXid(), true);
+ if (globalSession != null) {
+ List<BranchSession> branchSessions = globalSession.getBranchSessions().stream()
+ .filter(branchSession -> branchSession.getBranchId() == Long.parseLong(param.getBranchId()))
+ .collect(Collectors.toList());
- List<BranchSession> branchSessions = SessionHolder.getRootSessionManager().findGlobalSession(param.getXid(),
- true).getBranchSessions().stream().filter(branchSession ->
- branchSession.getBranchId() == Long.parseLong(param.getBranchId())).collect(Collectors.toList());
-
- if (branchSessions.size() != 1) {
- throw new ConsoleException(new UnsupportedOperationException("branch session size is not one"),
- String.format("delete global lock," +
- "xid:%s ,branchId:%s", param.getXid(), param.getBranchId()));
- }
- try {
- lockManager.releaseLock(branchSessions.get(0));
- } catch (TransactionException e) {
- throw new ConsoleException(e, String.format("delete global lock," +
- "xid:%s ,branchId:%s", param.getXid(), param.getBranchId()));
+ if (branchSessions.size() != 1) {
+ throw new ConsoleException(new UnsupportedOperationException("branch session size is not one"),
+ String.format("delete global lock," + "xid:%s ,branchId:%s", param.getXid(), param.getBranchId()));
+ }
+ try {
+ lockManager.releaseLock(branchSessions.get(0));
+ } catch (TransactionException e) {
+ throw new ConsoleException(e,
+ String.format("delete global lock," + "xid:%s ,branchId:%s", param.getXid(), param.getBranchId()));
+ }
}
return SingleResult.success();
}
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
index c3c9308201..ff02849af7 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
@@ -23,9 +23,9 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.apache.seata.server.console.impl.AbstractGlobalService;
-import org.apache.seata.server.console.param.GlobalSessionParam;
+import org.apache.seata.server.console.entity.param.GlobalSessionParam;
import org.apache.seata.common.result.PageResult;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.apache.seata.server.console.service.GlobalSessionService;
import org.apache.seata.server.session.GlobalSession;
import org.apache.seata.server.session.SessionHolder;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java
index ca52abc0c7..df67d0fe30 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java
@@ -22,7 +22,7 @@ import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.common.util.StringUtils;
import org.apache.seata.common.result.PageResult;
import org.apache.seata.server.console.impl.AbstractBranchService;
-import org.apache.seata.server.console.vo.BranchSessionVO;
+import org.apache.seata.server.console.entity.vo.BranchSessionVO;
import org.apache.seata.core.store.BranchTransactionDO;
import org.apache.seata.server.console.service.BranchSessionService;
import org.apache.seata.server.storage.redis.store.RedisTransactionStoreManager;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java
index e6a46bde47..b5964a9653 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java
@@ -32,9 +32,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
import org.apache.seata.common.util.BeanUtils;
-import org.apache.seata.server.console.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
import org.apache.seata.common.result.PageResult;
-import org.apache.seata.server.console.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
import org.apache.seata.server.console.service.GlobalLockService;
import org.apache.seata.server.storage.redis.JedisPooledFactory;
import redis.clients.jedis.Jedis;
diff --git a/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java b/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java
index 81563f2897..f38dc150c5 100644
--- a/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java
+++ b/server/src/main/java/org/apache/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java
@@ -22,8 +22,8 @@ import java.util.stream.Collectors;
import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.common.result.PageResult;
import org.apache.seata.server.console.impl.AbstractGlobalService;
-import org.apache.seata.server.console.param.GlobalSessionParam;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.param.GlobalSessionParam;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.apache.seata.core.model.GlobalStatus;
import org.apache.seata.server.console.service.GlobalSessionService;
import org.apache.seata.server.session.GlobalSession;
diff --git a/server/src/main/java/org/apache/seata/server/console/service/BranchSessionService.java b/server/src/main/java/org/apache/seata/server/console/service/BranchSessionService.java
index 677a742386..cd73aafbca 100644
--- a/server/src/main/java/org/apache/seata/server/console/service/BranchSessionService.java
+++ b/server/src/main/java/org/apache/seata/server/console/service/BranchSessionService.java
@@ -17,7 +17,7 @@
package org.apache.seata.server.console.service;
import org.apache.seata.common.result.SingleResult;
-import org.apache.seata.server.console.vo.BranchSessionVO;
+import org.apache.seata.server.console.entity.vo.BranchSessionVO;
import org.apache.seata.common.result.PageResult;
/**
diff --git a/server/src/main/java/org/apache/seata/server/console/service/GlobalLockService.java b/server/src/main/java/org/apache/seata/server/console/service/GlobalLockService.java
index 328f41006a..29b2ea0379 100644
--- a/server/src/main/java/org/apache/seata/server/console/service/GlobalLockService.java
+++ b/server/src/main/java/org/apache/seata/server/console/service/GlobalLockService.java
@@ -18,8 +18,8 @@ package org.apache.seata.server.console.service;
import org.apache.seata.common.result.PageResult;
import org.apache.seata.common.result.SingleResult;
-import org.apache.seata.server.console.param.GlobalLockParam;
-import org.apache.seata.server.console.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
/**
diff --git a/server/src/main/java/org/apache/seata/server/console/service/GlobalSessionService.java b/server/src/main/java/org/apache/seata/server/console/service/GlobalSessionService.java
index 5093d57158..2efcf80d0a 100644
--- a/server/src/main/java/org/apache/seata/server/console/service/GlobalSessionService.java
+++ b/server/src/main/java/org/apache/seata/server/console/service/GlobalSessionService.java
@@ -17,8 +17,8 @@
package org.apache.seata.server.console.service;
import org.apache.seata.common.result.SingleResult;
-import org.apache.seata.server.console.param.GlobalSessionParam;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.param.GlobalSessionParam;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.apache.seata.common.result.PageResult;
/**
diff --git a/server/src/main/java/org/apache/seata/server/filter/RaftGroupFilter.java b/server/src/main/java/org/apache/seata/server/filter/RaftGroupFilter.java
deleted file mode 100644
index 02a730c29b..0000000000
--- a/server/src/main/java/org/apache/seata/server/filter/RaftGroupFilter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.seata.server.filter;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import org.apache.seata.common.util.StringUtils;
-import org.apache.seata.server.cluster.raft.context.SeataClusterContext;
-
-
-import static org.apache.seata.common.Constants.RAFT_GROUP_HEADER;
-
-public class RaftGroupFilter implements Filter {
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {}
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- HttpServletRequest httpRequest = (HttpServletRequest)request;
- String unit = httpRequest.getParameter("unit");
- if (StringUtils.isBlank(unit)) {
- unit = httpRequest.getHeader(RAFT_GROUP_HEADER);
- }
- if (unit != null) {
- SeataClusterContext.bindGroup(unit);
- }
- try {
- chain.doFilter(request, response);
- } finally {
- SeataClusterContext.unbindGroup();
- }
- }
-
- @Override
- public void destroy() {}
-
-}
diff --git a/server/src/main/java/org/apache/seata/server/filter/RaftLeaderWriteFilter.java b/server/src/main/java/org/apache/seata/server/filter/RaftRequestFilter.java
similarity index 70%
rename from server/src/main/java/org/apache/seata/server/filter/RaftLeaderWriteFilter.java
rename to server/src/main/java/org/apache/seata/server/filter/RaftRequestFilter.java
index 6365468208..925f9061de 100644
--- a/server/src/main/java/org/apache/seata/server/filter/RaftLeaderWriteFilter.java
+++ b/server/src/main/java/org/apache/seata/server/filter/RaftRequestFilter.java
@@ -17,6 +17,7 @@
package org.apache.seata.server.filter;
import org.apache.seata.common.store.SessionMode;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.core.exception.TransactionException;
import org.apache.seata.core.exception.TransactionExceptionCode;
import org.apache.seata.server.cluster.listener.ClusterChangeEvent;
@@ -40,12 +41,14 @@ import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
+import static org.apache.seata.common.Constants.RAFT_GROUP_HEADER;
+
/**
* Raft Leader Write Filter
*/
@Component
@Conditional(RaftCondition.class)
-public class RaftLeaderWriteFilter implements Filter, ApplicationListener<ClusterChangeEvent> {
+public class RaftRequestFilter implements Filter, ApplicationListener<ClusterChangeEvent> {
private static final Map<String, Boolean> GROUP_PREVENT = new ConcurrentHashMap<>();
@@ -53,20 +56,30 @@ public class RaftLeaderWriteFilter implements Filter, ApplicationListener<Cluste
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
- FilterChain filterChain) throws IOException, ServletException {
- HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
- String method = httpRequest.getMethod();
- if (!HttpMethod.GET.name().equalsIgnoreCase(method)) {
- String group = SeataClusterContext.getGroup();
- if (!isPass(group)) {
- throw new ConsoleException(new TransactionException(TransactionExceptionCode.NotRaftLeader,
- " The current TC is not a leader node, interrupt processing of transactions!"),
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
+ throws IOException, ServletException {
+ HttpServletRequest httpRequest = (HttpServletRequest)servletRequest;
+ String group = httpRequest.getParameter("unit");
+ if (StringUtils.isBlank(group)) {
+ group = httpRequest.getHeader(RAFT_GROUP_HEADER);
+ }
+ if (group != null) {
+ SeataClusterContext.bindGroup(group);
+ }
+ try {
+ String method = httpRequest.getMethod();
+ if (!HttpMethod.GET.name().equalsIgnoreCase(method)) {
+ if (!isPass(group)) {
+ throw new ConsoleException(
+ new TransactionException(TransactionExceptionCode.NotRaftLeader,
+ " The current TC is not a leader node, interrupt processing of transactions!"),
" The current TC is not a leader node, interrupt processing of transactions!");
+ }
}
+ filterChain.doFilter(servletRequest, servletResponse);
+ } finally {
+ SeataClusterContext.unbindGroup();
}
-
- filterChain.doFilter(servletRequest, servletResponse);
}
@Override
diff --git a/server/src/main/java/org/apache/seata/server/storage/SessionConverter.java b/server/src/main/java/org/apache/seata/server/storage/SessionConverter.java
index 4b90905a85..92245d70ba 100644
--- a/server/src/main/java/org/apache/seata/server/storage/SessionConverter.java
+++ b/server/src/main/java/org/apache/seata/server/storage/SessionConverter.java
@@ -24,8 +24,8 @@ import java.util.Collections;
import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.common.util.StringUtils;
import org.apache.seata.server.cluster.raft.sync.msg.dto.BranchTransactionDTO;
-import org.apache.seata.server.console.vo.BranchSessionVO;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.vo.BranchSessionVO;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.apache.seata.core.model.BranchStatus;
import org.apache.seata.core.model.BranchType;
import org.apache.seata.core.model.GlobalStatus;
diff --git a/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java b/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java
index de41a2b5d9..b8c9d33e2a 100644
--- a/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java
+++ b/server/src/main/java/org/apache/seata/server/storage/redis/store/RedisTransactionStoreManager.java
@@ -43,7 +43,7 @@ import org.apache.seata.config.ConfigurationFactory;
import org.apache.seata.core.model.GlobalStatus;
import org.apache.seata.core.store.BranchTransactionDO;
import org.apache.seata.core.store.GlobalTransactionDO;
-import org.apache.seata.server.console.param.GlobalSessionParam;
+import org.apache.seata.server.console.entity.param.GlobalSessionParam;
import org.apache.seata.server.session.GlobalSession;
import org.apache.seata.server.session.SessionCondition;
import org.apache.seata.server.session.SessionStatusValidator;
diff --git a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
index 6dc3f04016..133a516199 100644
--- a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
+++ b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
@@ -32,9 +32,9 @@ import org.apache.seata.common.result.PageResult;
import org.apache.seata.core.exception.TransactionException;
import org.apache.seata.core.model.BranchType;
import org.apache.seata.common.util.UUIDGenerator;
-import org.apache.seata.server.console.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
import org.apache.seata.server.console.service.GlobalLockService;
-import org.apache.seata.server.console.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
import org.apache.seata.server.lock.file.FileLockManagerForTest;
import org.apache.seata.server.session.BranchSession;
import org.apache.seata.server.session.GlobalSession;
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 dc0d742a3e..e3056ee32c 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,12 +38,11 @@ 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.param.GlobalSessionParam;
+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;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.apache.seata.server.storage.file.session.FileSessionManager;
-import org.apache.seata.server.store.StoreConfig;
import org.apache.seata.server.util.StoreUtil;
import org.apache.commons.lang.time.DateUtils;
import org.junit.jupiter.api.Assertions;
diff --git a/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java b/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java
index 0e4a8e90f5..63f3491acd 100644
--- a/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java
+++ b/server/src/test/java/org/apache/seata/server/session/redis/RedisQueryConsolTest.java
@@ -20,12 +20,12 @@ import javax.annotation.Resource;
import com.alibaba.fastjson.JSON;
import org.apache.seata.common.result.PageResult;
-import org.apache.seata.server.console.param.GlobalLockParam;
-import org.apache.seata.server.console.param.GlobalSessionParam;
+import org.apache.seata.server.console.entity.param.GlobalLockParam;
+import org.apache.seata.server.console.entity.param.GlobalSessionParam;
import org.apache.seata.server.console.service.GlobalLockService;
import org.apache.seata.server.console.service.GlobalSessionService;
-import org.apache.seata.server.console.vo.GlobalLockVO;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
import org.springframework.boot.test.context.SpringBootTest;
diff --git a/server/src/test/java/org/apache/seata/server/session/redis/RedisTransactionStoreManagerTest.java b/server/src/test/java/org/apache/seata/server/session/redis/RedisTransactionStoreManagerTest.java
index 25755fe1cf..d2deccae9b 100644
--- a/server/src/test/java/org/apache/seata/server/session/redis/RedisTransactionStoreManagerTest.java
+++ b/server/src/test/java/org/apache/seata/server/session/redis/RedisTransactionStoreManagerTest.java
@@ -27,10 +27,10 @@ import org.apache.seata.common.loader.EnhancedServiceLoader;
import org.apache.seata.common.util.BeanUtils;
import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.core.exception.TransactionException;
-import org.apache.seata.server.console.param.GlobalSessionParam;
-import org.apache.seata.server.console.vo.GlobalLockVO;
+import org.apache.seata.server.console.entity.param.GlobalSessionParam;
+import org.apache.seata.server.console.entity.vo.GlobalLockVO;
import org.apache.seata.core.model.GlobalStatus;
-import org.apache.seata.server.console.vo.GlobalSessionVO;
+import org.apache.seata.server.console.entity.vo.GlobalSessionVO;
import org.apache.seata.server.session.GlobalSession;
import org.apache.seata.server.session.SessionCondition;
import org.apache.seata.server.session.SessionManager;
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org