diff --git a/docker/skywalking/agent/plugins/apm-seata-skywalking-plugin-1.6.0.jar b/docker/skywalking/agent/plugins/apm-seata-skywalking-plugin-1.6.0.jar
new file mode 100644
index 00000000..9b64f6c3
Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-seata-skywalking-plugin-1.6.0.jar differ
diff --git a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml
index ccf74271..459ab49f 100644
--- a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml
+++ b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml
@@ -16,9 +16,8 @@
2021.0.4.0
1.8.6
- 1.5.2
+ 1.6.0
2.1.2
- 2.0.4
3.1.3
1.0.11
@@ -36,11 +35,6 @@
nacos-client
${nacos.client.version}
-
- com.alibaba.nacos
- nacos-config
- ${nacos.config.version}
-
com.alibaba.csp
sentinel-core
diff --git a/ruoyi-common/ruoyi-common-seata/pom.xml b/ruoyi-common/ruoyi-common-seata/pom.xml
index d3419435..1e956ee1 100644
--- a/ruoyi-common/ruoyi-common-seata/pom.xml
+++ b/ruoyi-common/ruoyi-common-seata/pom.xml
@@ -17,16 +17,16 @@
-
- org.apache.dubbo
- dubbo
- true
-
-
com.alibaba.cloud
spring-cloud-starter-alibaba-seata
+
+
+ org.apache.logging.log4j
+ *
+
+
diff --git a/ruoyi-common/ruoyi-common-seata/src/main/java/io/seata/integration/dubbo/ApacheDubboTransactionPropagationFilter.java b/ruoyi-common/ruoyi-common-seata/src/main/java/io/seata/integration/dubbo/ApacheDubboTransactionPropagationFilter.java
deleted file mode 100644
index 5fd05da3..00000000
--- a/ruoyi-common/ruoyi-common-seata/src/main/java/io/seata/integration/dubbo/ApacheDubboTransactionPropagationFilter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 1999-2019 Seata.io Group.
- *
- * Licensed 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 io.seata.integration.dubbo;
-
-import io.seata.common.util.StringUtils;
-import io.seata.core.constants.DubboConstants;
-import io.seata.core.context.RootContext;
-import io.seata.core.model.BranchType;
-import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The type Transaction propagation filter.
- *
- * @author sharajava
- */
-@Activate(group = {DubboConstants.PROVIDER, DubboConstants.CONSUMER}, order = 100)
-public class ApacheDubboTransactionPropagationFilter implements Filter {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(ApacheDubboTransactionPropagationFilter.class);
-
- @Override
- public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
- String xid = RootContext.getXID();
- BranchType branchType = RootContext.getBranchType();
-
- String rpcXid = getRpcXid();
- String rpcBranchType = RpcContext.getServiceContext().getAttachment(RootContext.KEY_BRANCH_TYPE);
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("xid in RootContext[{}] xid in RpcContext[{}]", xid, rpcXid);
- }
- boolean bind = false;
- if (xid != null) {
- RpcContext.getServiceContext().setAttachment(RootContext.KEY_XID, xid);
- RpcContext.getServiceContext().setAttachment(RootContext.KEY_BRANCH_TYPE, branchType.name());
- } else {
- if (rpcXid != null) {
- RootContext.bind(rpcXid);
- if (StringUtils.equals(BranchType.TCC.name(), rpcBranchType)) {
- RootContext.bindBranchType(BranchType.TCC);
- }
- bind = true;
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("bind xid [{}] branchType [{}] to RootContext", rpcXid, rpcBranchType);
- }
- }
- }
- try {
- return invoker.invoke(invocation);
- } finally {
- if (bind) {
- BranchType previousBranchType = RootContext.getBranchType();
- String unbindXid = RootContext.unbind();
- if (BranchType.TCC == previousBranchType) {
- RootContext.unbindBranchType();
- }
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("unbind xid [{}] branchType [{}] from RootContext", unbindXid, previousBranchType);
- }
- if (!rpcXid.equalsIgnoreCase(unbindXid)) {
- LOGGER.warn("xid in change during RPC from {} to {},branchType from {} to {}", rpcXid, unbindXid,
- rpcBranchType != null ? rpcBranchType : "AT", previousBranchType);
- if (unbindXid != null) {
- RootContext.bind(unbindXid);
- LOGGER.warn("bind xid [{}] back to RootContext", unbindXid);
- if (BranchType.TCC == previousBranchType) {
- RootContext.bindBranchType(BranchType.TCC);
- LOGGER.warn("bind branchType [{}] back to RootContext", previousBranchType);
- }
- }
- }
- }
- RpcContext.getServiceContext().removeAttachment(RootContext.KEY_XID);
- RpcContext.getServiceContext().removeAttachment(RootContext.KEY_BRANCH_TYPE);
- RpcContext.getServerContext().removeAttachment(RootContext.KEY_XID);
- RpcContext.getServerContext().removeAttachment(RootContext.KEY_BRANCH_TYPE);
- }
- }
-
- /**
- * get rpc xid
- * @return
- */
- private String getRpcXid() {
- String rpcXid = RpcContext.getServiceContext().getAttachment(RootContext.KEY_XID);
- if (rpcXid == null) {
- rpcXid = RpcContext.getServiceContext().getAttachment(RootContext.KEY_XID.toLowerCase());
- }
- return rpcXid;
- }
-
-}
diff --git a/ruoyi-visual/ruoyi-seata-server/pom.xml b/ruoyi-visual/ruoyi-seata-server/pom.xml
index e25eda45..578f8862 100644
--- a/ruoyi-visual/ruoyi-seata-server/pom.xml
+++ b/ruoyi-visual/ruoyi-seata-server/pom.xml
@@ -27,7 +27,7 @@
jar
- 1.5.2
+ 1.6.0
1.72
1.2.12
@@ -41,6 +41,13 @@
pom
import
+
+ io.seata
+ seata-dependencies
+ ${seata.version}
+ pom
+ import
+
@@ -49,6 +56,12 @@
org.springframework.boot
spring-boot-starter-web
+
+
+ log4j-to-slf4j
+ org.apache.logging.log4j
+
+
io.seata
@@ -63,6 +76,12 @@
io.seata
seata-config-all
+
+
+ log4j
+ log4j
+
+
io.seata
@@ -150,6 +169,10 @@
ch.qos.logback
logback-classic
+
+ ch.qos.logback
+ logback-core
+
net.logstash.logback
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/AbstractTCInboundHandler.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/AbstractTCInboundHandler.java
index 18a26990..fdf0d28c 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/AbstractTCInboundHandler.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/AbstractTCInboundHandler.java
@@ -20,25 +20,7 @@ import io.seata.core.exception.AbstractExceptionHandler;
import io.seata.core.exception.TransactionException;
import io.seata.core.exception.TransactionExceptionCode;
import io.seata.core.model.GlobalStatus;
-import io.seata.core.protocol.transaction.AbstractGlobalEndRequest;
-import io.seata.core.protocol.transaction.AbstractGlobalEndResponse;
-import io.seata.core.protocol.transaction.BranchRegisterRequest;
-import io.seata.core.protocol.transaction.BranchRegisterResponse;
-import io.seata.core.protocol.transaction.BranchReportRequest;
-import io.seata.core.protocol.transaction.BranchReportResponse;
-import io.seata.core.protocol.transaction.GlobalBeginRequest;
-import io.seata.core.protocol.transaction.GlobalBeginResponse;
-import io.seata.core.protocol.transaction.GlobalCommitRequest;
-import io.seata.core.protocol.transaction.GlobalCommitResponse;
-import io.seata.core.protocol.transaction.GlobalLockQueryRequest;
-import io.seata.core.protocol.transaction.GlobalLockQueryResponse;
-import io.seata.core.protocol.transaction.GlobalReportRequest;
-import io.seata.core.protocol.transaction.GlobalReportResponse;
-import io.seata.core.protocol.transaction.GlobalRollbackRequest;
-import io.seata.core.protocol.transaction.GlobalRollbackResponse;
-import io.seata.core.protocol.transaction.GlobalStatusRequest;
-import io.seata.core.protocol.transaction.GlobalStatusResponse;
-import io.seata.core.protocol.transaction.TCInboundHandler;
+import io.seata.core.protocol.transaction.*;
import io.seata.core.rpc.RpcContext;
import io.seata.server.session.GlobalSession;
import io.seata.server.session.SessionHolder;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ParameterParser.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ParameterParser.java
index 1305fa99..55690fca 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ParameterParser.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ParameterParser.java
@@ -21,10 +21,9 @@ import com.beust.jcommander.ParameterException;
import io.seata.common.util.StringUtils;
import io.seata.config.Configuration;
import io.seata.config.ConfigurationFactory;
-import io.seata.core.constants.ConfigurationKeys;
import io.seata.server.env.ContainerHelper;
+import io.seata.server.store.StoreConfig;
-import static io.seata.common.DefaultValues.SERVER_DEFAULT_STORE_MODE;
import static io.seata.config.ConfigurationFactory.ENV_PROPERTY_KEY;
/**
@@ -67,6 +66,10 @@ public class ParameterParser {
this.init(args);
}
+ /**
+ * startup args > docker env
+ * @param args
+ */
private void init(String[] args) {
try {
getCommandParameters(args);
@@ -74,15 +77,7 @@ public class ParameterParser {
if (StringUtils.isNotBlank(seataEnv)) {
System.setProperty(ENV_PROPERTY_KEY, seataEnv);
}
- if (StringUtils.isBlank(storeMode)) {
- storeMode = CONFIG.getConfig(ConfigurationKeys.STORE_MODE, SERVER_DEFAULT_STORE_MODE);
- }
- if (StringUtils.isBlank(sessionStoreMode)) {
- sessionStoreMode = CONFIG.getConfig(ConfigurationKeys.STORE_SESSION_MODE, storeMode);
- }
- if (StringUtils.isBlank(lockStoreMode)) {
- lockStoreMode = CONFIG.getConfig(ConfigurationKeys.STORE_LOCK_MODE, storeMode);
- }
+ StoreConfig.setStartupParameter(storeMode, sessionStoreMode, lockStoreMode);
} catch (ParameterException e) {
printError(e);
}
@@ -112,15 +107,6 @@ public class ParameterParser {
if (serverNode == null) {
serverNode = ContainerHelper.getServerNode();
}
- if (StringUtils.isBlank(storeMode)) {
- storeMode = ContainerHelper.getStoreMode();
- }
- if (StringUtils.isBlank(sessionStoreMode)) {
- sessionStoreMode = ContainerHelper.getSessionStoreMode();
- }
- if (StringUtils.isBlank(lockStoreMode)) {
- lockStoreMode = ContainerHelper.getLockStoreMode();
- }
}
private void printError(ParameterException e) {
@@ -163,7 +149,7 @@ public class ParameterParser {
* @return the store mode
*/
public String getLockStoreMode() {
- return StringUtils.isNotEmpty(lockStoreMode) ? lockStoreMode : storeMode;
+ return lockStoreMode;
}
/**
@@ -172,7 +158,7 @@ public class ParameterParser {
* @return the store mode
*/
public String getSessionStoreMode() {
- return StringUtils.isNotEmpty(sessionStoreMode) ? sessionStoreMode : storeMode;
+ return sessionStoreMode;
}
/**
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/Server.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/Server.java
index 1603e9d9..81eb1119 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/Server.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/Server.java
@@ -15,24 +15,21 @@
*/
package io.seata.server;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
import io.seata.common.XID;
import io.seata.common.thread.NamedThreadFactory;
import io.seata.common.util.NetUtil;
import io.seata.common.util.StringUtils;
import io.seata.config.ConfigurationFactory;
-import io.seata.core.constants.ConfigurationKeys;
import io.seata.core.rpc.netty.NettyRemotingServer;
import io.seata.core.rpc.netty.NettyServerConfig;
import io.seata.server.coordinator.DefaultCoordinator;
import io.seata.server.lock.LockerManagerFactory;
import io.seata.server.metrics.MetricsManager;
import io.seata.server.session.SessionHolder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
import static io.seata.spring.boot.autoconfigure.StarterConstants.REGEX_SPLIT_CHAR;
import static io.seata.spring.boot.autoconfigure.StarterConstants.REGISTRY_PREFERED_NETWORKS;
@@ -49,9 +46,6 @@ public class Server {
* @param args the input arguments
*/
public static void start(String[] args) {
- // create logger
- final Logger logger = LoggerFactory.getLogger(Server.class);
-
//initialize the parameter parser
//Note that the parameter parser should always be the first line to execute.
//Because, here we need to parse the parameters needed for startup.
@@ -60,25 +54,11 @@ public class Server {
//initialize the metrics
MetricsManager.get().init();
- System.setProperty(ConfigurationKeys.STORE_MODE, parameterParser.getStoreMode());
-
ThreadPoolExecutor workingThreads = new ThreadPoolExecutor(NettyServerConfig.getMinServerPoolSize(),
NettyServerConfig.getMaxServerPoolSize(), NettyServerConfig.getKeepAliveTime(), TimeUnit.SECONDS,
new LinkedBlockingQueue<>(NettyServerConfig.getMaxTaskQueueSize()),
new NamedThreadFactory("ServerHandlerThread", NettyServerConfig.getMaxServerPoolSize()), new ThreadPoolExecutor.CallerRunsPolicy());
- NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
- UUIDGenerator.init(parameterParser.getServerNode());
- //log store mode : file, db, redis
- SessionHolder.init(parameterParser.getSessionStoreMode());
- LockerManagerFactory.init(parameterParser.getLockStoreMode());
- DefaultCoordinator coordinator = DefaultCoordinator.getInstance(nettyRemotingServer);
- coordinator.init();
- nettyRemotingServer.setHandler(coordinator);
-
- // let ServerRunner do destroy instead ShutdownHook, see https://github.com/seata/seata/issues/4028
- ServerRunner.addDisposable(coordinator);
-
//127.0.0.1 and 0.0.0.0 are not valid here.
if (NetUtil.isValidIp(parameterParser.getHost(), false)) {
XID.setIpAddress(parameterParser.getHost());
@@ -90,6 +70,20 @@ public class Server {
XID.setIpAddress(NetUtil.getLocalIp());
}
}
+
+ NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
+ XID.setPort(nettyRemotingServer.getListenPort());
+ UUIDGenerator.init(parameterParser.getServerNode());
+ //log store mode : file, db, redis
+ SessionHolder.init();
+ LockerManagerFactory.init();
+ DefaultCoordinator coordinator = DefaultCoordinator.getInstance(nettyRemotingServer);
+ coordinator.init();
+ nettyRemotingServer.setHandler(coordinator);
+
+ // let ServerRunner do destroy instead ShutdownHook, see https://github.com/seata/seata/issues/4028
+ ServerRunner.addDisposable(coordinator);
+
nettyRemotingServer.init();
}
}
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerApplicationListener.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerApplicationListener.java
index 79c54134..e26301d7 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerApplicationListener.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerApplicationListener.java
@@ -15,11 +15,9 @@
*/
package io.seata.server;
-import java.util.Properties;
import io.seata.common.holder.ObjectHolder;
import io.seata.common.util.StringUtils;
-import io.seata.config.Configuration;
-import io.seata.config.ConfigurationFactory;
+import io.seata.server.store.StoreConfig;
import io.seata.spring.boot.autoconfigure.SeataCoreEnvironmentPostProcessor;
import io.seata.spring.boot.autoconfigure.SeataServerEnvironmentPostProcessor;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
@@ -30,14 +28,11 @@ import org.springframework.core.ResolvableType;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
-import static io.seata.common.ConfigurationKeys.STORE_LOCK_MODE;
-import static io.seata.common.ConfigurationKeys.STORE_MODE;
-import static io.seata.common.ConfigurationKeys.STORE_SESSION_MODE;
+import java.util.Properties;
+
import static io.seata.common.Constants.OBJECT_KEY_SPRING_CONFIGURABLE_ENVIRONMENT;
import static io.seata.common.DefaultValues.SERVICE_OFFSET_SPRING_BOOT;
-import static io.seata.core.constants.ConfigurationKeys.ENV_SEATA_PORT_KEY;
-import static io.seata.core.constants.ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL;
-import static io.seata.core.constants.ConfigurationKeys.SERVER_SERVICE_PORT_CONFIG;
+import static io.seata.core.constants.ConfigurationKeys.*;
/**
* @author slievrly
@@ -61,12 +56,9 @@ public class ServerApplicationListener implements GenericApplicationListener {
ObjectHolder.INSTANCE.setObject(OBJECT_KEY_SPRING_CONFIGURABLE_ENVIRONMENT, environment);
SeataCoreEnvironmentPostProcessor.init();
SeataServerEnvironmentPostProcessor.init();
- Configuration config = ConfigurationFactory.getInstance();
// Load by priority
- System.setProperty("sessionMode",
- config.getConfig(STORE_SESSION_MODE, config.getConfig(STORE_MODE, "file")));
- System.setProperty("lockMode",
- config.getConfig(STORE_LOCK_MODE, config.getConfig(STORE_MODE, "file")));
+ System.setProperty("sessionMode", StoreConfig.getSessionMode().getName());
+ System.setProperty("lockMode", StoreConfig.getLockMode().getName());
String[] args = environmentPreparedEvent.getArgs();
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerRunner.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerRunner.java
index 2d567df6..d19233a0 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerRunner.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/ServerRunner.java
@@ -15,17 +15,16 @@
*/
package io.seata.server;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
import io.seata.core.rpc.Disposable;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
/**
* @author spilledyear@outlook.com
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/BranchSessionController.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/BranchSessionController.java
index b6980f42..f5e7a89d 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/BranchSessionController.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/BranchSessionController.java
@@ -15,14 +15,15 @@
*/
package io.seata.server.console.controller;
-import javax.annotation.Resource;
import io.seata.server.console.service.BranchSessionService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+
/**
* Branch Session Controller
- * @author: zhongxiang.wang
+ * @author zhongxiang.wang
*/
@RestController
@RequestMapping("console/branchSession")
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalLockController.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalLockController.java
index 0be8fa41..d8ea221c 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalLockController.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalLockController.java
@@ -15,21 +15,21 @@
*/
package io.seata.server.console.controller;
-import javax.annotation.Resource;
-
-import io.seata.server.console.param.GlobalLockParam;
import io.seata.console.result.PageResult;
-import io.seata.server.console.vo.GlobalLockVO;
+import io.seata.server.console.param.GlobalLockParam;
import io.seata.server.console.service.GlobalLockService;
+import io.seata.server.console.vo.GlobalLockVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+
/**
* Global Lock Controller
- * @author: zhongxiang.wang
+ * @author zhongxiang.wang
*/
@RestController
@RequestMapping("/api/v1/console/globalLock")
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalSessionController.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalSessionController.java
index cc5ceb11..db34ace8 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalSessionController.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/controller/GlobalSessionController.java
@@ -15,20 +15,20 @@
*/
package io.seata.server.console.controller;
-import javax.annotation.Resource;
-
-import io.seata.server.console.param.GlobalSessionParam;
import io.seata.console.result.PageResult;
-import io.seata.server.console.vo.GlobalSessionVO;
+import io.seata.server.console.param.GlobalSessionParam;
import io.seata.server.console.service.GlobalSessionService;
+import io.seata.server.console.vo.GlobalSessionVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+
/**
* Global Session Controller
- * @author: zhongxiang.wang
+ * @author zhongxiang.wang
*/
@RestController
@RequestMapping("/api/v1/console/globalSession")
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/BranchSessionDBServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/BranchSessionDBServiceImpl.java
index 367e71c5..963b273c 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/BranchSessionDBServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/BranchSessionDBServiceImpl.java
@@ -15,15 +15,6 @@
*/
package io.seata.server.console.impl.db;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.sql.DataSource;
-
import io.seata.common.ConfigurationKeys;
import io.seata.common.exception.StoreException;
import io.seata.common.loader.EnhancedServiceLoader;
@@ -39,13 +30,21 @@ import io.seata.server.console.vo.BranchSessionVO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
import static io.seata.common.DefaultValues.DEFAULT_STORE_DB_BRANCH_TABLE;
/**
* Branch Session DataBase ServiceImpl
*
- * @author: zhongxiang.wang
- * @author: lvekee 734843455@qq.com
+ * @author zhongxiang.wang
+ * @author lvekee 734843455@qq.com
*/
@Component
@org.springframework.context.annotation.Configuration
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalLockDBServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
index 4a8a5a23..41d61efe 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalLockDBServiceImpl.java
@@ -15,15 +15,6 @@
*/
package io.seata.server.console.impl.db;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.sql.DataSource;
-
import io.seata.common.ConfigurationKeys;
import io.seata.common.exception.StoreException;
import io.seata.common.loader.EnhancedServiceLoader;
@@ -41,14 +32,22 @@ import io.seata.server.console.vo.GlobalLockVO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
import static io.seata.common.DefaultValues.DEFAULT_LOCK_DB_TABLE;
/**
* Global Lock DB ServiceImpl
*
- * @author: zhongxiang.wang
- * @author: lvekee 734843455@qq.com
+ * @author zhongxiang.wang
+ * @author lvekee 734843455@qq.com
*/
@Component
@org.springframework.context.annotation.Configuration
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
index f5d720e8..31877347 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/db/GlobalSessionDBServiceImpl.java
@@ -15,18 +15,6 @@
*/
package io.seata.server.console.impl.db;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.sql.DataSource;
-
import io.seata.common.ConfigurationKeys;
import io.seata.common.exception.StoreException;
import io.seata.common.loader.EnhancedServiceLoader;
@@ -46,13 +34,24 @@ import io.seata.server.console.vo.GlobalSessionVO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
import static io.seata.common.DefaultValues.DEFAULT_STORE_DB_GLOBAL_TABLE;
/**
* Global Session DataBase ServiceImpl
*
- * @author: zhongxiang.wang
- * @author: lvekee 734843455@qq.com
+ * @author zhongxiang.wang
+ * @author lvekee 734843455@qq.com
*/
@Component
@org.springframework.context.annotation.Configuration
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/BranchSessionFileServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/BranchSessionFileServiceImpl.java
index 8305484c..2f710d0e 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/BranchSessionFileServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/BranchSessionFileServiceImpl.java
@@ -16,16 +16,16 @@
package io.seata.server.console.impl.file;
import io.seata.common.exception.NotSupportYetException;
-import io.seata.server.console.vo.BranchSessionVO;
import io.seata.console.result.PageResult;
import io.seata.server.console.service.BranchSessionService;
+import io.seata.server.console.vo.BranchSessionVO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
/**
* Branch Session File ServiceImpl
*
- * @author: zhongxiang.wang
+ * @author zhongxiang.wang
*/
@Component
@org.springframework.context.annotation.Configuration
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalLockFileServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
index edfdc633..59d91540 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalLockFileServiceImpl.java
@@ -15,6 +15,20 @@
*/
package io.seata.server.console.impl.file;
+import io.seata.common.util.CollectionUtils;
+import io.seata.common.util.StringUtils;
+import io.seata.console.result.PageResult;
+import io.seata.core.lock.RowLock;
+import io.seata.server.console.param.GlobalLockParam;
+import io.seata.server.console.service.GlobalLockService;
+import io.seata.server.console.vo.GlobalLockVO;
+import io.seata.server.lock.LockerManagerFactory;
+import io.seata.server.session.BranchSession;
+import io.seata.server.session.GlobalSession;
+import io.seata.server.session.SessionHolder;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.stereotype.Component;
+
import java.util.Collection;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -22,21 +36,6 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import io.seata.common.util.CollectionUtils;
-import io.seata.common.util.StringUtils;
-import io.seata.server.console.param.GlobalLockParam;
-import io.seata.console.result.PageResult;
-import io.seata.server.console.vo.GlobalLockVO;
-import io.seata.core.lock.RowLock;
-import io.seata.server.console.service.GlobalLockService;
-import io.seata.server.lock.LockerManagerFactory;
-import io.seata.server.session.BranchSession;
-import io.seata.server.session.GlobalSession;
-import io.seata.server.session.SessionHolder;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-
import static io.seata.common.util.StringUtils.isBlank;
import static io.seata.server.console.vo.GlobalLockVO.convert;
import static java.util.Objects.isNull;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
index 0487aacc..51ece1d5 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/file/GlobalSessionFileServiceImpl.java
@@ -15,22 +15,22 @@
*/
package io.seata.server.console.impl.file;
-import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-import io.seata.server.console.param.GlobalSessionParam;
import io.seata.console.result.PageResult;
-import io.seata.server.console.vo.GlobalSessionVO;
+import io.seata.server.console.param.GlobalSessionParam;
import io.seata.server.console.service.GlobalSessionService;
+import io.seata.server.console.vo.GlobalSessionVO;
import io.seata.server.session.GlobalSession;
import io.seata.server.session.SessionHolder;
import io.seata.server.storage.SessionConverter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
import static io.seata.common.util.StringUtils.isBlank;
import static java.util.Objects.isNull;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java
index 0173f594..c8e9e91a 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/BranchSessionRedisServiceImpl.java
@@ -15,24 +15,25 @@
*/
package io.seata.server.console.impl.redis;
-import java.util.ArrayList;
-import java.util.List;
import io.seata.common.util.CollectionUtils;
import io.seata.common.util.StringUtils;
import io.seata.console.result.PageResult;
-import io.seata.server.console.vo.BranchSessionVO;
import io.seata.core.store.BranchTransactionDO;
import io.seata.server.console.service.BranchSessionService;
+import io.seata.server.console.vo.BranchSessionVO;
import io.seata.server.storage.redis.store.RedisTransactionStoreManager;
import org.springframework.beans.BeanUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Branch Session Redis ServiceImpl
*
- * @author: zhongxiang.wang
- * @author: doubleDimple
+ * @author zhongxiang.wang
+ * @author doubleDimple
*/
@Component
@org.springframework.context.annotation.Configuration
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java
index 91a53c9d..17f30b89 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalLockRedisServiceImpl.java
@@ -15,32 +15,32 @@
*/
package io.seata.server.console.impl.redis;
+import io.seata.common.util.BeanUtils;
+import io.seata.common.util.CollectionUtils;
+import io.seata.console.result.PageResult;
+import io.seata.server.console.param.GlobalLockParam;
+import io.seata.server.console.service.GlobalLockService;
+import io.seata.server.console.vo.GlobalLockVO;
+import io.seata.server.storage.redis.JedisPooledFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.stereotype.Component;
+import redis.clients.jedis.Jedis;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
-import io.seata.common.util.CollectionUtils;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-import io.seata.common.util.BeanUtils;
-import io.seata.server.console.param.GlobalLockParam;
-import io.seata.console.result.PageResult;
-import io.seata.server.console.vo.GlobalLockVO;
-import io.seata.server.console.service.GlobalLockService;
-import io.seata.server.storage.redis.JedisPooledFactory;
-import redis.clients.jedis.Jedis;
+
import static io.seata.common.Constants.ROW_LOCK_KEY_SPLIT_CHAR;
import static io.seata.common.exception.FrameworkErrorCode.ParameterRequired;
import static io.seata.common.util.StringUtils.isNotBlank;
import static io.seata.console.result.PageResult.checkPage;
-import static io.seata.core.constants.RedisKeyConstants.DEFAULT_REDIS_SEATA_GLOBAL_LOCK_PREFIX;
-import static io.seata.core.constants.RedisKeyConstants.DEFAULT_REDIS_SEATA_ROW_LOCK_PREFIX;
-import static io.seata.core.constants.RedisKeyConstants.SPLIT;
+import static io.seata.core.constants.RedisKeyConstants.*;
/**
* Global Lock Redis Service Impl
- * @author: zhongxiang.wang
- * @author: doubleDimple
+ * @author zhongxiang.wang
+ * @author doubleDimple
*/
@Component
@org.springframework.context.annotation.Configuration
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java
index 779b8843..9ca2fdb7 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/impl/redis/GlobalSessionRedisServiceImpl.java
@@ -15,15 +15,12 @@
*/
package io.seata.server.console.impl.redis;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
import io.seata.common.util.CollectionUtils;
import io.seata.console.result.PageResult;
-import io.seata.server.console.param.GlobalSessionParam;
-import io.seata.server.console.vo.GlobalSessionVO;
import io.seata.core.model.GlobalStatus;
+import io.seata.server.console.param.GlobalSessionParam;
import io.seata.server.console.service.GlobalSessionService;
+import io.seata.server.console.vo.GlobalSessionVO;
import io.seata.server.session.GlobalSession;
import io.seata.server.session.SessionCondition;
import io.seata.server.storage.redis.store.RedisTransactionStoreManager;
@@ -31,6 +28,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
import static io.seata.common.exception.FrameworkErrorCode.ParameterRequired;
import static io.seata.common.util.StringUtils.isBlank;
import static io.seata.common.util.StringUtils.isNotBlank;
@@ -39,8 +41,8 @@ import static io.seata.server.storage.SessionConverter.convertToGlobalSessionVo;
/**
* Global Session Redis ServiceImpl
- * @author: zhongxiang.wang
- * @author: doubleDimple
+ * @author zhongxiang.wang
+ * @author doubleDimple
*/
@Component
@org.springframework.context.annotation.Configuration
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalLockParam.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalLockParam.java
index 4cc16cc9..dcc43012 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalLockParam.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalLockParam.java
@@ -15,13 +15,13 @@
*/
package io.seata.server.console.param;
-import java.io.Serializable;
-
import io.seata.console.param.BaseParam;
+import java.io.Serializable;
+
/**
- * @description: Global lock param
- * @author: zhongxiang.wang
+ * Global lock param
+ * @author zhongxiang.wang
*/
public class GlobalLockParam extends BaseParam implements Serializable {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalSessionParam.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalSessionParam.java
index a02563dc..88673039 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalSessionParam.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/param/GlobalSessionParam.java
@@ -15,13 +15,13 @@
*/
package io.seata.server.console.param;
-import java.io.Serializable;
-
import io.seata.console.param.BaseParam;
+import java.io.Serializable;
+
/**
- * @description: Global session param
- * @author: zhongxiang.wang
+ * Global session param
+ * @author zhongxiang.wang
*/
public class GlobalSessionParam extends BaseParam implements Serializable {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/BranchSessionService.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/BranchSessionService.java
index 0a8b3105..5f1b3fdc 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/BranchSessionService.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/BranchSessionService.java
@@ -15,8 +15,8 @@
*/
package io.seata.server.console.service;
-import io.seata.server.console.vo.BranchSessionVO;
import io.seata.console.result.PageResult;
+import io.seata.server.console.vo.BranchSessionVO;
/**
* Branch session service
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalLockService.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalLockService.java
index 1b774919..87b3a790 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalLockService.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalLockService.java
@@ -15,9 +15,9 @@
*/
package io.seata.server.console.service;
+import io.seata.console.result.PageResult;
import io.seata.server.console.param.GlobalLockParam;
import io.seata.server.console.vo.GlobalLockVO;
-import io.seata.console.result.PageResult;
/**
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalSessionService.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalSessionService.java
index 2f700b67..45260538 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalSessionService.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/service/GlobalSessionService.java
@@ -15,9 +15,9 @@
*/
package io.seata.server.console.service;
+import io.seata.console.result.PageResult;
import io.seata.server.console.param.GlobalSessionParam;
import io.seata.server.console.vo.GlobalSessionVO;
-import io.seata.console.result.PageResult;
/**
* Global session service
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/BranchSessionVO.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/BranchSessionVO.java
index 0980f6f4..fa1e7b87 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/BranchSessionVO.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/BranchSessionVO.java
@@ -15,16 +15,16 @@
*/
package io.seata.server.console.vo;
+import io.seata.core.constants.ServerTableColumnsName;
+
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Objects;
-import io.seata.core.constants.ServerTableColumnsName;
-
/**
* BranchSessionVO
- * @author: zhongxiang.wang
+ * @author zhongxiang.wang
*/
public class BranchSessionVO {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalLockVO.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalLockVO.java
index 4823f676..265cc77c 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalLockVO.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalLockVO.java
@@ -15,6 +15,10 @@
*/
package io.seata.server.console.vo;
+import io.seata.common.util.CollectionUtils;
+import io.seata.core.constants.ServerTableColumnsName;
+import io.seata.core.lock.RowLock;
+
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
@@ -22,13 +26,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import io.seata.common.util.CollectionUtils;
-import io.seata.core.constants.ServerTableColumnsName;
-import io.seata.core.lock.RowLock;
-
/**
* GlobalLockVO
- * @author: zhongxiang.wang
+ * @author zhongxiang.wang
* @author miaoxueyu
*/
public class GlobalLockVO {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalSessionVO.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalSessionVO.java
index 05146a1d..b040cb5f 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalSessionVO.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/console/vo/GlobalSessionVO.java
@@ -15,16 +15,16 @@
*/
package io.seata.server.console.vo;
+import io.seata.core.constants.ServerTableColumnsName;
+
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Set;
-import io.seata.core.constants.ServerTableColumnsName;
-
/**
* GlobalSessionVO
- * @author: zhongxiang.wang
+ * @author zhongxiang.wang
*/
public class GlobalSessionVO {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/AbstractCore.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/AbstractCore.java
index 84ab8036..e5d0b3b8 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/AbstractCore.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/AbstractCore.java
@@ -15,9 +15,6 @@
*/
package io.seata.server.coordinator;
-import java.io.IOException;
-import java.util.concurrent.TimeoutException;
-
import io.seata.core.context.RootContext;
import io.seata.core.exception.BranchTransactionException;
import io.seata.core.exception.GlobalTransactionException;
@@ -41,12 +38,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
-import static io.seata.core.exception.TransactionExceptionCode.BranchTransactionNotExist;
-import static io.seata.core.exception.TransactionExceptionCode.FailedToAddBranch;
-import static io.seata.core.exception.TransactionExceptionCode.GlobalTransactionNotActive;
-import static io.seata.core.exception.TransactionExceptionCode.GlobalTransactionStatusInvalid;
-import static io.seata.core.exception.TransactionExceptionCode.FailedToSendBranchCommitRequest;
-import static io.seata.core.exception.TransactionExceptionCode.FailedToSendBranchRollbackRequest;
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+import static io.seata.core.exception.TransactionExceptionCode.*;
/**
* The type abstract core.
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java
index 22d42f0e..01223e82 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCoordinator.java
@@ -15,14 +15,6 @@
*/
package io.seata.server.coordinator;
-import java.time.Duration;
-import java.util.Collection;
-import java.util.Map;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
import io.netty.channel.Channel;
import io.seata.common.thread.NamedThreadFactory;
import io.seata.common.util.CollectionUtils;
@@ -34,25 +26,7 @@ import io.seata.core.exception.TransactionException;
import io.seata.core.model.GlobalStatus;
import io.seata.core.protocol.AbstractMessage;
import io.seata.core.protocol.AbstractResultMessage;
-import io.seata.core.protocol.transaction.AbstractTransactionRequestToTC;
-import io.seata.core.protocol.transaction.AbstractTransactionResponse;
-import io.seata.core.protocol.transaction.BranchRegisterRequest;
-import io.seata.core.protocol.transaction.BranchRegisterResponse;
-import io.seata.core.protocol.transaction.BranchReportRequest;
-import io.seata.core.protocol.transaction.BranchReportResponse;
-import io.seata.core.protocol.transaction.GlobalBeginRequest;
-import io.seata.core.protocol.transaction.GlobalBeginResponse;
-import io.seata.core.protocol.transaction.GlobalCommitRequest;
-import io.seata.core.protocol.transaction.GlobalCommitResponse;
-import io.seata.core.protocol.transaction.GlobalLockQueryRequest;
-import io.seata.core.protocol.transaction.GlobalLockQueryResponse;
-import io.seata.core.protocol.transaction.GlobalReportRequest;
-import io.seata.core.protocol.transaction.GlobalReportResponse;
-import io.seata.core.protocol.transaction.GlobalRollbackRequest;
-import io.seata.core.protocol.transaction.GlobalRollbackResponse;
-import io.seata.core.protocol.transaction.GlobalStatusRequest;
-import io.seata.core.protocol.transaction.GlobalStatusResponse;
-import io.seata.core.protocol.transaction.UndoLogDeleteRequest;
+import io.seata.core.protocol.transaction.*;
import io.seata.core.rpc.Disposable;
import io.seata.core.rpc.RemotingServer;
import io.seata.core.rpc.RpcContext;
@@ -61,20 +35,21 @@ import io.seata.core.rpc.netty.ChannelManager;
import io.seata.core.rpc.netty.NettyRemotingServer;
import io.seata.server.AbstractTCInboundHandler;
import io.seata.server.metrics.MetricsPublisher;
-import io.seata.server.session.BranchSession;
-import io.seata.server.session.GlobalSession;
-import io.seata.server.session.SessionCondition;
-import io.seata.server.session.SessionHelper;
-import io.seata.server.session.SessionHolder;
+import io.seata.server.session.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
-import static io.seata.common.Constants.ASYNC_COMMITTING;
-import static io.seata.common.Constants.RETRY_COMMITTING;
-import static io.seata.common.Constants.RETRY_ROLLBACKING;
-import static io.seata.common.Constants.TX_TIMEOUT_CHECK;
-import static io.seata.common.Constants.UNDOLOG_DELETE;
+import java.time.Duration;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import static io.seata.common.Constants.*;
+import static io.seata.common.DefaultValues.*;
/**
* The type Default coordinator.
@@ -89,30 +64,31 @@ public class DefaultCoordinator extends AbstractTCInboundHandler implements Tran
* The constant COMMITTING_RETRY_PERIOD.
*/
protected static final long COMMITTING_RETRY_PERIOD = CONFIG.getLong(ConfigurationKeys.COMMITING_RETRY_PERIOD,
- 1000L);
+ DEFAULT_COMMITING_RETRY_PERIOD);
/**
* The constant ASYNC_COMMITTING_RETRY_PERIOD.
*/
protected static final long ASYNC_COMMITTING_RETRY_PERIOD = CONFIG.getLong(
- ConfigurationKeys.ASYN_COMMITING_RETRY_PERIOD, 1000L);
+ ConfigurationKeys.ASYNC_COMMITING_RETRY_PERIOD, DEFAULT_ASYNC_COMMITTING_RETRY_PERIOD);
/**
* The constant ROLLBACKING_RETRY_PERIOD.
*/
protected static final long ROLLBACKING_RETRY_PERIOD = CONFIG.getLong(ConfigurationKeys.ROLLBACKING_RETRY_PERIOD,
- 1000L);
+ DEFAULT_ROLLBACKING_RETRY_PERIOD);
/**
* The constant TIMEOUT_RETRY_PERIOD.
*/
- protected static final long TIMEOUT_RETRY_PERIOD = CONFIG.getLong(ConfigurationKeys.TIMEOUT_RETRY_PERIOD, 1000L);
+ protected static final long TIMEOUT_RETRY_PERIOD = CONFIG.getLong(ConfigurationKeys.TIMEOUT_RETRY_PERIOD,
+ DEFAULT_TIMEOUT_RETRY_PERIOD);
/**
* The Transaction undo log delete period.
*/
protected static final long UNDO_LOG_DELETE_PERIOD = CONFIG.getLong(
- ConfigurationKeys.TRANSACTION_UNDO_LOG_DELETE_PERIOD, 24 * 60 * 60 * 1000);
+ ConfigurationKeys.TRANSACTION_UNDO_LOG_DELETE_PERIOD, DEFAULT_UNDO_LOG_DELETE_PERIOD);
/**
* The Transaction undo log delay delete period
@@ -132,13 +108,13 @@ public class DefaultCoordinator extends AbstractTCInboundHandler implements Tran
private static final int BRANCH_ASYNC_POOL_SIZE = Runtime.getRuntime().availableProcessors();
private static final Duration MAX_COMMIT_RETRY_TIMEOUT = ConfigurationFactory.getInstance().getDuration(
- ConfigurationKeys.MAX_COMMIT_RETRY_TIMEOUT, DurationUtil.DEFAULT_DURATION, 100);
+ ConfigurationKeys.MAX_COMMIT_RETRY_TIMEOUT, DurationUtil.DEFAULT_DURATION, DEFAULT_MAX_COMMIT_RETRY_TIMEOUT);
private static final Duration MAX_ROLLBACK_RETRY_TIMEOUT = ConfigurationFactory.getInstance().getDuration(
- ConfigurationKeys.MAX_ROLLBACK_RETRY_TIMEOUT, DurationUtil.DEFAULT_DURATION, 100);
+ ConfigurationKeys.MAX_ROLLBACK_RETRY_TIMEOUT, DurationUtil.DEFAULT_DURATION, DEFAULT_MAX_ROLLBACK_RETRY_TIMEOUT);
private static final boolean ROLLBACK_RETRY_TIMEOUT_UNLOCK_ENABLE = ConfigurationFactory.getInstance().getBoolean(
- ConfigurationKeys.ROLLBACK_RETRY_TIMEOUT_UNLOCK_ENABLE, false);
+ ConfigurationKeys.ROLLBACK_RETRY_TIMEOUT_UNLOCK_ENABLE, DEFAULT_ROLLBACK_RETRY_TIMEOUT_UNLOCK_ENABLE);
private final ScheduledThreadPoolExecutor retryRollbacking =
new ScheduledThreadPoolExecutor(1, new NamedThreadFactory(RETRY_ROLLBACKING, 1));
@@ -357,7 +333,7 @@ public class DefaultCoordinator extends AbstractTCInboundHandler implements Tran
SessionHelper.forEach(rollbackingSessions, rollbackingSession -> {
try {
// prevent repeated rollback
- if (rollbackingSession.getStatus().equals(GlobalStatus.Rollbacking)
+ if (rollbackingSession.getStatus() == GlobalStatus.Rollbacking
&& !rollbackingSession.isDeadSession()) {
// The function of this 'return' is 'continue'.
return;
@@ -370,10 +346,7 @@ public class DefaultCoordinator extends AbstractTCInboundHandler implements Tran
SessionHolder.getRetryRollbackingSessionManager().removeGlobalSession(rollbackingSession);
LOGGER.error("Global transaction rollback retry timeout and has removed [{}]", rollbackingSession.getXid());
- SessionHelper.endRollbackFailed(rollbackingSession, true);
-
- // rollback retry timeout event
- MetricsPublisher.postSessionDoneEvent(rollbackingSession, GlobalStatus.RollbackRetryTimeout, true, false);
+ SessionHelper.endRollbackFailed(rollbackingSession, true, true);
//The function of this 'return' is 'continue'.
return;
@@ -401,7 +374,7 @@ public class DefaultCoordinator extends AbstractTCInboundHandler implements Tran
SessionHelper.forEach(committingSessions, committingSession -> {
try {
// prevent repeated commit
- if (committingSession.getStatus().equals(GlobalStatus.Committing)
+ if (committingSession.getStatus() == GlobalStatus.Committing
&& !committingSession.isDeadSession()) {
// The function of this 'return' is 'continue'.
return;
@@ -412,7 +385,7 @@ public class DefaultCoordinator extends AbstractTCInboundHandler implements Tran
LOGGER.error("Global transaction commit retry timeout and has removed [{}]", committingSession.getXid());
// commit retry timeout event
- MetricsPublisher.postSessionDoneEvent(committingSession, GlobalStatus.CommitRetryTimeout, true, false);
+ SessionHelper.endCommitFailed(committingSession, true, true);
//The function of this 'return' is 'continue'.
return;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCore.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCore.java
index 42b88722..62fb0873 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCore.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/coordinator/DefaultCore.java
@@ -15,10 +15,6 @@
*/
package io.seata.server.coordinator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
import io.seata.common.DefaultValues;
import io.seata.common.exception.NotSupportYetException;
import io.seata.common.loader.EnhancedServiceLoader;
@@ -40,6 +36,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
import static io.seata.core.constants.ConfigurationKeys.XAER_NOTA_RETRY_TIMEOUT;
import static io.seata.server.session.BranchSessionHandler.CONTINUE;
@@ -128,8 +128,7 @@ public class DefaultCore implements Core {
@Override
public String begin(String applicationId, String transactionServiceGroup, String name, int timeout)
throws TransactionException {
- GlobalSession session = GlobalSession.createGlobalSession(applicationId, transactionServiceGroup, name,
- timeout);
+ GlobalSession session = GlobalSession.createGlobalSession(applicationId, transactionServiceGroup, name, timeout);
MDC.put(RootContext.MDC_KEY_XID, session.getXid());
session.addSessionLifecycleListener(SessionHolder.getRootSessionManager());
@@ -141,12 +140,20 @@ public class DefaultCore implements Core {
return session.getXid();
}
+
+
@Override
public GlobalStatus commit(String xid) throws TransactionException {
GlobalSession globalSession = SessionHolder.findGlobalSession(xid);
if (globalSession == null) {
return GlobalStatus.Finished;
}
+
+ if (globalSession.isTimeout()) {
+ LOGGER.info("TC detected timeout, xid = {}", globalSession.getXid());
+ return GlobalStatus.TimeoutRollbacking;
+ }
+
globalSession.addSessionLifecycleListener(SessionHolder.getRootSessionManager());
// just lock changeStatus
@@ -251,14 +258,14 @@ public class DefaultCore implements Core {
LOGGER.info("Committing global transaction is NOT done, xid = {}.", globalSession.getXid());
return false;
}
- if (!retrying) {
- //contains not AT branch
- globalSession.setStatus(GlobalStatus.Committed);
- }
}
// if it succeeds and there is no branch, retrying=true is the asynchronous state when retrying. EndCommitted is
// executed to improve concurrency performance, and the global transaction ends..
if (success && globalSession.getBranchSessions().isEmpty()) {
+ if (!retrying) {
+ //contains not AT branch
+ globalSession.setStatus(GlobalStatus.Committed);
+ }
SessionHelper.endCommitted(globalSession, retrying);
LOGGER.info("Committing global transaction is successfully done, xid = {}.", globalSession.getXid());
}
@@ -284,7 +291,7 @@ public class DefaultCore implements Core {
if (!shouldRollBack) {
return globalSession.getStatus();
}
-
+
boolean rollbackSuccess = doGlobalRollback(globalSession, false);
return rollbackSuccess ? GlobalStatus.Rollbacked : globalSession.getStatus();
}
@@ -388,5 +395,4 @@ public class DefaultCore implements Core {
return false;
}
}
-
}
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/env/PortHelper.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/env/PortHelper.java
index cb5968dc..e3c24733 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/env/PortHelper.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/env/PortHelper.java
@@ -15,14 +15,6 @@
*/
package io.seata.server.env;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-
import io.seata.common.util.CollectionUtils;
import io.seata.common.util.MapUtil;
import io.seata.common.util.NumberUtils;
@@ -30,6 +22,10 @@ import io.seata.common.util.StringUtils;
import org.springframework.util.ResourceUtils;
import org.yaml.snakeyaml.Yaml;
+import java.io.*;
+import java.util.Map;
+import java.util.Properties;
+
/**
* @author wang.liang
*/
@@ -54,8 +50,8 @@ public class PortHelper {
* get config from configFile
* -Dspring.config.location > classpath:application.properties > classpath:application.yml
*
- * @return
- * @throws IOException
+ * @return the port
+ * @throws IOException the io exception
*/
public static int getPortFromConfigFile() throws IOException {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/AbstractLockManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/AbstractLockManager.java
index 1334d39b..91bb7b6e 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/AbstractLockManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/AbstractLockManager.java
@@ -15,9 +15,6 @@
*/
package io.seata.server.lock;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
import io.seata.common.XID;
import io.seata.common.util.CollectionUtils;
import io.seata.common.util.StringUtils;
@@ -29,6 +26,10 @@ import io.seata.server.session.BranchSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
/**
* The type Abstract lock manager.
*
@@ -188,7 +189,7 @@ public abstract class AbstractLockManager implements LockManager {
}
return locks;
}
-
+
@Override
public void updateLockStatus(String xid, LockStatus lockStatus) {
this.getLocker().updateLockStatus(xid, lockStatus);
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockManager.java
index c35338e9..a655d93f 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockManager.java
@@ -15,14 +15,14 @@
*/
package io.seata.server.lock;
-import java.util.List;
-
import io.seata.core.exception.TransactionException;
import io.seata.core.lock.RowLock;
import io.seata.core.model.LockStatus;
import io.seata.server.session.BranchSession;
import io.seata.server.session.GlobalSession;
+import java.util.List;
+
/**
* The interface Lock manager.
*
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockerManagerFactory.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockerManagerFactory.java
index 65303260..cec4f0da 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockerManagerFactory.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/LockerManagerFactory.java
@@ -16,13 +16,10 @@
package io.seata.server.lock;
import io.seata.common.loader.EnhancedServiceLoader;
-import io.seata.common.util.StringUtils;
import io.seata.config.Configuration;
import io.seata.config.ConfigurationFactory;
-import io.seata.core.constants.ConfigurationKeys;
-import io.seata.core.store.StoreMode;
-
-import static io.seata.common.DefaultValues.SERVER_DEFAULT_STORE_MODE;
+import io.seata.server.store.StoreConfig;
+import io.seata.server.store.StoreConfig.LockMode;
/**
* The type Lock manager factory.
@@ -54,16 +51,16 @@ public class LockerManagerFactory {
init(null);
}
- public static void init(String lockMode) {
+ public static void init(LockMode lockMode) {
if (LOCK_MANAGER == null) {
synchronized (LockerManagerFactory.class) {
if (LOCK_MANAGER == null) {
- if (StringUtils.isBlank(lockMode)) {
- lockMode = CONFIG.getConfig(ConfigurationKeys.STORE_LOCK_MODE,
- CONFIG.getConfig(ConfigurationKeys.STORE_MODE, SERVER_DEFAULT_STORE_MODE));
+ if (null == lockMode) {
+ lockMode = StoreConfig.getLockMode();
}
- if (StoreMode.contains(lockMode)) {
- LOCK_MANAGER = EnhancedServiceLoader.load(LockManager.class, lockMode);
+ //if not exist the lock mode, throw exception
+ if (null != StoreConfig.StoreMode.get(lockMode.name())) {
+ LOCK_MANAGER = EnhancedServiceLoader.load(LockManager.class, lockMode.getName());
}
}
}
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/distributed/DistributedLockerFactory.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/distributed/DistributedLockerFactory.java
index 1999b997..362d2132 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/distributed/DistributedLockerFactory.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/lock/distributed/DistributedLockerFactory.java
@@ -23,8 +23,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
+ * Distributed locker factory
* @author zhongxiang.wang
- * @description Distributed locker factory
*/
public class DistributedLockerFactory {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/ExtendedWhitespaceThrowableProxyConverter.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/ExtendedWhitespaceThrowableProxyConverter.java
index 6995f6f3..c6bb4a10 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/ExtendedWhitespaceThrowableProxyConverter.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/ExtendedWhitespaceThrowableProxyConverter.java
@@ -22,9 +22,8 @@ import ch.qos.logback.core.CoreConstants;
/**
* {@link ExtendedThrowableProxyConverter} that adds some additional whitespace around the
* stack trace.
- *
+ * Copied from spring-boot-xxx.jar by wang.liang
* @author Phillip Webb
- * @origin Copied from spring-boot-xxx.jar by wang.liang
*/
public class ExtendedWhitespaceThrowableProxyConverter extends ExtendedThrowableProxyConverter {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java
index 665affe7..0b7689c1 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/logging/logback/appender/EnhancedLogstashEncoder.java
@@ -15,12 +15,12 @@
*/
package io.seata.server.logging.logback.appender;
-import java.util.ArrayList;
-
import net.logstash.logback.composite.JsonProvider;
import net.logstash.logback.composite.JsonProviders;
import net.logstash.logback.encoder.LogstashEncoder;
+import java.util.ArrayList;
+
/**
* The type Enhanced logstash encoder
*
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MeterIdConstants.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MeterIdConstants.java
index 29d55af2..96f6ac5f 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MeterIdConstants.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MeterIdConstants.java
@@ -15,8 +15,8 @@
*/
package io.seata.server.metrics;
-import io.seata.metrics.IdConstants;
import io.seata.metrics.Id;
+import io.seata.metrics.IdConstants;
/**
* Constants for meter id in tc
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsManager.java
index 20e27276..bad1c27c 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsManager.java
@@ -25,6 +25,8 @@ import io.seata.server.event.EventBusManager;
import java.util.List;
+import static io.seata.common.DefaultValues.DEFAULT_METRICS_ENABLED;
+
/**
* Metrics manager for init
*
@@ -47,7 +49,7 @@ public class MetricsManager {
public void init() {
boolean enabled = ConfigurationFactory.getInstance().getBoolean(
- ConfigurationKeys.METRICS_PREFIX + ConfigurationKeys.METRICS_ENABLED, false);
+ ConfigurationKeys.METRICS_PREFIX + ConfigurationKeys.METRICS_ENABLED, DEFAULT_METRICS_ENABLED);
if (enabled) {
registry = RegistryFactory.getInstance();
if (registry != null) {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsPublisher.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsPublisher.java
index 393583c2..f0db1e52 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsPublisher.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsPublisher.java
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package io.seata.server.metrics;
import io.seata.core.event.EventBus;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java
index 727b1993..277cee08 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java
@@ -15,11 +15,6 @@
*/
package io.seata.server.metrics;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
-
import com.google.common.eventbus.Subscribe;
import io.seata.core.event.GlobalTransactionEvent;
import io.seata.core.model.GlobalStatus;
@@ -28,10 +23,12 @@ import io.seata.server.event.EventBusManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static io.seata.metrics.IdConstants.APP_ID_KEY;
-import static io.seata.metrics.IdConstants.GROUP_KEY;
-import static io.seata.metrics.IdConstants.STATUS_VALUE_AFTER_COMMITTED_KEY;
-import static io.seata.metrics.IdConstants.STATUS_VALUE_AFTER_ROLLBACKED_KEY;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
+
+import static io.seata.metrics.IdConstants.*;
/**
* Event subscriber for metrics
@@ -208,7 +205,7 @@ public class MetricsSubscriber {
/**
* PMD check
* SuppressWarnings("checkstyle:EqualsHashCode")
- * @return
+ * @return the hash code
*/
@Override
public int hashCode() {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/BranchSession.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/BranchSession.java
index 402701f4..4df48e0f 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/BranchSession.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/BranchSession.java
@@ -15,11 +15,6 @@
*/
package io.seata.server.session;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import io.seata.common.util.CompressUtil;
import io.seata.core.exception.TransactionException;
import io.seata.core.model.BranchStatus;
@@ -32,6 +27,11 @@ import io.seata.server.store.StoreConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import static io.seata.core.model.LockStatus.Locked;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/GlobalSession.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/GlobalSession.java
index 03445bd4..6019477b 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/GlobalSession.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/GlobalSession.java
@@ -15,17 +15,6 @@
*/
package io.seata.server.session;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
import io.seata.common.Constants;
import io.seata.common.DefaultValues;
import io.seata.common.XID;
@@ -46,9 +35,13 @@ import io.seata.server.store.StoreConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static io.seata.core.model.GlobalStatus.AsyncCommitting;
-import static io.seata.core.model.GlobalStatus.CommitRetrying;
-import static io.seata.core.model.GlobalStatus.Committing;
+import java.nio.ByteBuffer;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import static io.seata.core.model.GlobalStatus.*;
/**
* The type Global session.
@@ -756,7 +749,7 @@ public class GlobalSession implements SessionLifecycle, SessionStorable {
public void queueToRetryRollback() throws TransactionException {
this.addSessionLifecycleListener(SessionHolder.getRetryRollbackingSessionManager());
GlobalStatus currentStatus = this.getStatus();
- if (SessionHelper.isTimeoutGlobalStatus(currentStatus)) {
+ if (SessionStatusValidator.isTimeoutGlobalStatus(currentStatus)) {
this.setStatus(GlobalStatus.TimeoutRollbackRetrying);
} else {
this.setStatus(GlobalStatus.RollbackRetrying);
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionCondition.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionCondition.java
index 3b946ea7..6542a72c 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionCondition.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionCondition.java
@@ -89,6 +89,7 @@ public class SessionCondition {
*/
public void setStatus(GlobalStatus status) {
this.status = status;
+ this.statuses = new GlobalStatus[] {status};
}
/**
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHelper.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHelper.java
index 4b2196e7..c8370f1f 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHelper.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHelper.java
@@ -15,12 +15,7 @@
*/
package io.seata.server.session;
-import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
-
import io.seata.common.util.CollectionUtils;
-import io.seata.common.util.StringUtils;
import io.seata.config.Configuration;
import io.seata.config.ConfigurationFactory;
import io.seata.core.constants.ConfigurationKeys;
@@ -28,15 +23,22 @@ import io.seata.core.context.RootContext;
import io.seata.core.exception.TransactionException;
import io.seata.core.model.BranchType;
import io.seata.core.model.GlobalStatus;
-import io.seata.core.store.StoreMode;
import io.seata.metrics.IdConstants;
import io.seata.server.UUIDGenerator;
import io.seata.server.coordinator.DefaultCoordinator;
import io.seata.server.metrics.MetricsPublisher;
+import io.seata.server.store.StoreConfig;
+import io.seata.server.store.StoreConfig.SessionMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+import static io.seata.common.DefaultValues.DEFAULT_ENABLE_BRANCH_ASYNC_REMOVE;
+
/**
* The type Session helper.
*
@@ -51,16 +53,14 @@ public class SessionHelper {
private static final Configuration CONFIG = ConfigurationFactory.getInstance();
private static final Boolean ENABLE_BRANCH_ASYNC_REMOVE = CONFIG.getBoolean(
- ConfigurationKeys.ENABLE_BRANCH_ASYNC_REMOVE, false);
+ ConfigurationKeys.ENABLE_BRANCH_ASYNC_REMOVE, DEFAULT_ENABLE_BRANCH_ASYNC_REMOVE);
/**
* The instance of DefaultCoordinator
*/
private static final DefaultCoordinator COORDINATOR = DefaultCoordinator.getInstance();
- private static final boolean DELAY_HANDLE_SESSION =
- !StringUtils.equalsIgnoreCase(ConfigurationFactory.getInstance().getConfig(ConfigurationKeys.STORE_SESSION_MODE,
- ConfigurationFactory.getInstance().getConfig(ConfigurationKeys.STORE_MODE)), StoreMode.FILE.getName());
+ private static final boolean DELAY_HANDLE_SESSION = StoreConfig.getSessionMode() != SessionMode.FILE;
private SessionHelper() {
}
@@ -146,7 +146,24 @@ public class SessionHelper {
* @throws TransactionException the transaction exception
*/
public static void endCommitFailed(GlobalSession globalSession, boolean retryGlobal) throws TransactionException {
- globalSession.changeGlobalStatus(GlobalStatus.CommitFailed);
+ endCommitFailed(globalSession, retryGlobal, false);
+ }
+
+ /**
+ * End commit failed.
+ *
+ * @param globalSession the global session
+ * @param retryGlobal the retry global
+ * @param isRetryTimeout is retry timeout
+ * @throws TransactionException the transaction exception
+ */
+ public static void endCommitFailed(GlobalSession globalSession, boolean retryGlobal, boolean isRetryTimeout)
+ throws TransactionException {
+ if (isRetryTimeout) {
+ globalSession.changeGlobalStatus(GlobalStatus.CommitRetryTimeout);
+ } else {
+ globalSession.changeGlobalStatus(GlobalStatus.CommitFailed);
+ }
LOGGER.error("The Global session {} has changed the status to {}, need to be handled it manually.",
globalSession.getXid(), globalSession.getStatus());
@@ -164,22 +181,27 @@ public class SessionHelper {
public static void endRollbacked(GlobalSession globalSession, boolean retryGlobal) throws TransactionException {
if (retryGlobal || !DELAY_HANDLE_SESSION) {
long beginTime = System.currentTimeMillis();
+ boolean timeoutDone = false;
GlobalStatus currentStatus = globalSession.getStatus();
+ if (currentStatus == GlobalStatus.TimeoutRollbacking) {
+ MetricsPublisher.postSessionDoneEvent(globalSession, GlobalStatus.TimeoutRollbacked, false, false);
+ timeoutDone = true;
+ }
boolean retryBranch =
- currentStatus == GlobalStatus.TimeoutRollbackRetrying || currentStatus == GlobalStatus.RollbackRetrying;
- if (isTimeoutGlobalStatus(currentStatus)) {
+ currentStatus == GlobalStatus.TimeoutRollbackRetrying || currentStatus == GlobalStatus.RollbackRetrying;
+ if (SessionStatusValidator.isTimeoutGlobalStatus(currentStatus)) {
globalSession.changeGlobalStatus(GlobalStatus.TimeoutRollbacked);
} else {
globalSession.changeGlobalStatus(GlobalStatus.Rollbacked);
}
globalSession.end();
- if (!DELAY_HANDLE_SESSION) {
+ if (!DELAY_HANDLE_SESSION && !timeoutDone) {
MetricsPublisher.postSessionDoneEvent(globalSession, false, false);
}
MetricsPublisher.postSessionDoneEvent(globalSession, IdConstants.STATUS_VALUE_AFTER_ROLLBACKED_KEY, true,
- beginTime, retryBranch);
+ beginTime, retryBranch);
} else {
- MetricsPublisher.postSessionDoneEvent(globalSession, false, false);
+ MetricsPublisher.postSessionDoneEvent(globalSession, GlobalStatus.Rollbacked, false, false);
}
}
@@ -191,8 +213,22 @@ public class SessionHelper {
* @throws TransactionException the transaction exception
*/
public static void endRollbackFailed(GlobalSession globalSession, boolean retryGlobal) throws TransactionException {
+ endRollbackFailed(globalSession, retryGlobal, false);
+ }
+
+ /**
+ * End rollback failed.
+ *
+ * @param globalSession the global session
+ * @param retryGlobal the retry global
+ * @param isRetryTimeout is retry timeout
+ * @throws TransactionException the transaction exception
+ */
+ public static void endRollbackFailed(GlobalSession globalSession, boolean retryGlobal, boolean isRetryTimeout) throws TransactionException {
GlobalStatus currentStatus = globalSession.getStatus();
- if (isTimeoutGlobalStatus(currentStatus)) {
+ if (isRetryTimeout) {
+ globalSession.changeGlobalStatus(GlobalStatus.RollbackRetryTimeout);
+ } else if (SessionStatusValidator.isTimeoutGlobalStatus(currentStatus)) {
globalSession.changeGlobalStatus(GlobalStatus.TimeoutRollbackFailed);
} else {
globalSession.changeGlobalStatus(GlobalStatus.RollbackFailed);
@@ -202,13 +238,6 @@ public class SessionHelper {
MetricsPublisher.postSessionDoneEvent(globalSession, retryGlobal, false);
}
- public static boolean isTimeoutGlobalStatus(GlobalStatus status) {
- return status == GlobalStatus.TimeoutRollbacked
- || status == GlobalStatus.TimeoutRollbackFailed
- || status == GlobalStatus.TimeoutRollbacking
- || status == GlobalStatus.TimeoutRollbackRetrying;
- }
-
/**
* Foreach global sessions.
*
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHolder.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHolder.java
index f22153cd..849a7896 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHolder.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionHolder.java
@@ -15,16 +15,7 @@
*/
package io.seata.server.session;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
import io.seata.common.ConfigurationKeys;
-import io.seata.core.model.LockStatus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import io.seata.common.XID;
import io.seata.common.exception.ShouldNeverHappenException;
import io.seata.common.exception.StoreException;
@@ -35,12 +26,21 @@ import io.seata.config.Configuration;
import io.seata.config.ConfigurationFactory;
import io.seata.core.exception.TransactionException;
import io.seata.core.model.GlobalStatus;
+import io.seata.core.model.LockStatus;
import io.seata.core.store.DistributedLockDO;
import io.seata.core.store.DistributedLocker;
import io.seata.server.lock.distributed.DistributedLockerFactory;
-import io.seata.core.store.StoreMode;
+import io.seata.server.store.StoreConfig;
+import io.seata.server.store.StoreConfig.SessionMode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import static io.seata.common.DefaultValues.SERVER_DEFAULT_STORE_MODE;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+import static io.seata.common.DefaultValues.DEFAULT_DISTRIBUTED_LOCK_EXPIRE_TIME;
/**
* The type Session holder.
@@ -80,7 +80,7 @@ public class SessionHolder {
/**
* The redis distributed lock expire time
*/
- private static long DISTRIBUTED_LOCK_EXPIRE_TIME = CONFIG.getLong(ConfigurationKeys.DISTRIBUTED_LOCK_EXPIRE_TIME, 10000);
+ private static long DISTRIBUTED_LOCK_EXPIRE_TIME = CONFIG.getLong(ConfigurationKeys.DISTRIBUTED_LOCK_EXPIRE_TIME, DEFAULT_DISTRIBUTED_LOCK_EXPIRE_TIME);
private static SessionManager ROOT_SESSION_MANAGER;
private static SessionManager ASYNC_COMMITTING_SESSION_MANAGER;
@@ -89,56 +89,57 @@ public class SessionHolder {
private static DistributedLocker DISTRIBUTED_LOCKER;
+ public static void init() {
+ init(null);
+ }
/**
* Init.
*
- * @param mode the store mode: file, db, redis
+ * @param sessionMode the store mode: file, db, redis
* @throws IOException the io exception
*/
- public static void init(String mode) {
- if (StringUtils.isBlank(mode)) {
- mode = CONFIG.getConfig(ConfigurationKeys.STORE_SESSION_MODE,
- CONFIG.getConfig(ConfigurationKeys.STORE_MODE, SERVER_DEFAULT_STORE_MODE));
+ public static void init(SessionMode sessionMode) {
+ if (null == sessionMode) {
+ sessionMode = StoreConfig.getSessionMode();
}
- StoreMode storeMode = StoreMode.get(mode);
- if (StoreMode.DB.equals(storeMode)) {
- ROOT_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, StoreMode.DB.getName());
- ASYNC_COMMITTING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, StoreMode.DB.getName(),
+ if (SessionMode.DB.equals(sessionMode)) {
+ ROOT_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, SessionMode.DB.getName());
+ ASYNC_COMMITTING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, SessionMode.DB.getName(),
new Object[]{ASYNC_COMMITTING_SESSION_MANAGER_NAME});
- RETRY_COMMITTING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, StoreMode.DB.getName(),
+ RETRY_COMMITTING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, SessionMode.DB.getName(),
new Object[]{RETRY_COMMITTING_SESSION_MANAGER_NAME});
- RETRY_ROLLBACKING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, StoreMode.DB.getName(),
+ RETRY_ROLLBACKING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, SessionMode.DB.getName(),
new Object[]{RETRY_ROLLBACKING_SESSION_MANAGER_NAME});
- DISTRIBUTED_LOCKER = DistributedLockerFactory.getDistributedLocker(StoreMode.DB.getName());
- } else if (StoreMode.FILE.equals(storeMode)) {
+ DISTRIBUTED_LOCKER = DistributedLockerFactory.getDistributedLocker(SessionMode.DB.getName());
+ } else if (SessionMode.FILE.equals(sessionMode)) {
String sessionStorePath = CONFIG.getConfig(ConfigurationKeys.STORE_FILE_DIR,
DEFAULT_SESSION_STORE_FILE_DIR);
if (StringUtils.isBlank(sessionStorePath)) {
throw new StoreException("the {store.file.dir} is empty.");
}
- ROOT_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, StoreMode.FILE.getName(),
+ ROOT_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, SessionMode.FILE.getName(),
new Object[]{ROOT_SESSION_MANAGER_NAME, sessionStorePath});
ASYNC_COMMITTING_SESSION_MANAGER = ROOT_SESSION_MANAGER;
RETRY_COMMITTING_SESSION_MANAGER = ROOT_SESSION_MANAGER;
RETRY_ROLLBACKING_SESSION_MANAGER = ROOT_SESSION_MANAGER;
- DISTRIBUTED_LOCKER = DistributedLockerFactory.getDistributedLocker(StoreMode.FILE.getName());
- } else if (StoreMode.REDIS.equals(storeMode)) {
- ROOT_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, StoreMode.REDIS.getName());
+ DISTRIBUTED_LOCKER = DistributedLockerFactory.getDistributedLocker(SessionMode.FILE.getName());
+ } else if (SessionMode.REDIS.equals(sessionMode)) {
+ ROOT_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class, SessionMode.REDIS.getName());
ASYNC_COMMITTING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class,
- StoreMode.REDIS.getName(), new Object[]{ASYNC_COMMITTING_SESSION_MANAGER_NAME});
+ SessionMode.REDIS.getName(), new Object[]{ASYNC_COMMITTING_SESSION_MANAGER_NAME});
RETRY_COMMITTING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class,
- StoreMode.REDIS.getName(), new Object[]{RETRY_COMMITTING_SESSION_MANAGER_NAME});
+ SessionMode.REDIS.getName(), new Object[]{RETRY_COMMITTING_SESSION_MANAGER_NAME});
RETRY_ROLLBACKING_SESSION_MANAGER = EnhancedServiceLoader.load(SessionManager.class,
- StoreMode.REDIS.getName(), new Object[]{RETRY_ROLLBACKING_SESSION_MANAGER_NAME});
+ SessionMode.REDIS.getName(), new Object[]{RETRY_ROLLBACKING_SESSION_MANAGER_NAME});
- DISTRIBUTED_LOCKER = DistributedLockerFactory.getDistributedLocker(StoreMode.REDIS.getName());
+ DISTRIBUTED_LOCKER = DistributedLockerFactory.getDistributedLocker(SessionMode.REDIS.getName());
} else {
// unknown store
- throw new IllegalArgumentException("unknown store mode:" + mode);
+ throw new IllegalArgumentException("unknown store mode:" + sessionMode.getName());
}
- reload(storeMode);
+ reload(sessionMode);
}
//region reload
@@ -146,15 +147,15 @@ public class SessionHolder {
/**
* Reload.
*
- * @param storeMode the mode of store
+ * @param sessionMode the mode of store
*/
- protected static void reload(StoreMode storeMode) {
+ protected static void reload(SessionMode sessionMode) {
if (ROOT_SESSION_MANAGER instanceof Reloadable) {
((Reloadable) ROOT_SESSION_MANAGER).reload();
}
- if (storeMode == StoreMode.FILE) {
+ if (SessionMode.FILE.equals(sessionMode)) {
Collection allSessions = ROOT_SESSION_MANAGER.allSessions();
if (CollectionUtils.isNotEmpty(allSessions)) {
for (GlobalSession globalSession : allSessions) {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionManager.java
index 6aaba67a..ac357eb9 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionManager.java
@@ -15,13 +15,14 @@
*/
package io.seata.server.session;
-import java.util.Collection;
-import java.util.List;
import io.seata.core.exception.TransactionException;
import io.seata.core.model.BranchStatus;
import io.seata.core.model.GlobalStatus;
import io.seata.core.rpc.Disposable;
+import java.util.Collection;
+import java.util.List;
+
/**
* The interface Session manager.
*
@@ -119,6 +120,7 @@ public interface SessionManager extends SessionLifecycleListener, Disposable {
* @param globalSession the global session
* @param lockCallable the lock Callable
* @return the value
+ * @throws TransactionException the transaction exception
*/
T lockAndExecute(GlobalSession globalSession, GlobalSession.LockCallable lockCallable)
throws TransactionException;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionStatusValidator.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionStatusValidator.java
new file mode 100644
index 00000000..20323a7e
--- /dev/null
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/session/SessionStatusValidator.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 1999-2019 Seata.io Group.
+ *
+ * Licensed 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 io.seata.server.session;
+
+import io.seata.core.model.GlobalStatus;
+
+/**
+ * The type change status validator.
+ *
+ * @author Bughue
+ */
+public class SessionStatusValidator {
+
+ /**
+ * is timeout global status
+ *
+ * @param status the global session
+ */
+ public static boolean isTimeoutGlobalStatus(GlobalStatus status) {
+ return status == GlobalStatus.TimeoutRollbacked
+ || status == GlobalStatus.TimeoutRollbackFailed
+ || status == GlobalStatus.TimeoutRollbacking
+ || status == GlobalStatus.TimeoutRollbackRetrying;
+ }
+
+ /**
+ * is rollback global status
+ *
+ * @param status the global session
+ */
+ public static boolean isRollbackGlobalStatus(GlobalStatus status) {
+ return status == GlobalStatus.Rollbacking
+ || status == GlobalStatus.RollbackRetrying
+ || status == GlobalStatus.Rollbacked
+ || status == GlobalStatus.RollbackFailed
+ || status == GlobalStatus.RollbackRetryTimeout;
+ }
+
+ /**
+ * is commit global status
+ *
+ * @param status the global session
+ */
+ public static boolean isCommitGlobalStatus(GlobalStatus status) {
+ return status == GlobalStatus.Committing
+ || status == GlobalStatus.AsyncCommitting
+ || status == GlobalStatus.CommitRetrying
+ || status == GlobalStatus.Committed
+ || status == GlobalStatus.CommitFailed
+ || status == GlobalStatus.CommitRetryTimeout;
+ }
+
+ /**
+ * check the relation of before status and after status
+ *
+ * @param before the global session
+ * @param after the global session
+ */
+ public static boolean validateUpdateStatus(GlobalStatus before, GlobalStatus after) {
+ if (isTimeoutGlobalStatus(before) && isCommitGlobalStatus(after)) {
+ return false;
+ }
+ if (isCommitGlobalStatus(before) && isTimeoutGlobalStatus(after)) {
+ return false;
+ }
+ if (isRollbackGlobalStatus(before) && isCommitGlobalStatus(after)) {
+ return false;
+ }
+ if (isCommitGlobalStatus(before) && isRollbackGlobalStatus(after)) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/SessionConverter.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/SessionConverter.java
index 61170d03..b6b2f957 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/SessionConverter.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/SessionConverter.java
@@ -15,25 +15,22 @@
*/
package io.seata.server.storage;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.Collections;
import io.seata.common.util.CollectionUtils;
import io.seata.common.util.StringUtils;
-import io.seata.server.console.vo.BranchSessionVO;
-import io.seata.server.console.vo.GlobalSessionVO;
import io.seata.core.model.BranchStatus;
import io.seata.core.model.BranchType;
import io.seata.core.model.GlobalStatus;
import io.seata.core.store.BranchTransactionDO;
import io.seata.core.store.GlobalTransactionDO;
+import io.seata.server.console.vo.BranchSessionVO;
+import io.seata.server.console.vo.GlobalSessionVO;
import io.seata.server.session.BranchSession;
import io.seata.server.session.GlobalSession;
import io.seata.server.store.SessionStorable;
import org.springframework.beans.BeanUtils;
+import java.util.*;
+
/**
* The session converter
*
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseDistributedLocker.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseDistributedLocker.java
index 0b39a012..1b68600d 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseDistributedLocker.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseDistributedLocker.java
@@ -16,23 +16,13 @@
package io.seata.server.storage.db.lock;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Objects;
-import javax.sql.DataSource;
import io.seata.common.exception.ShouldNeverHappenException;
import io.seata.common.loader.EnhancedServiceLoader;
import io.seata.common.loader.LoadLevel;
import io.seata.common.loader.Scope;
import io.seata.common.util.IOUtil;
import io.seata.common.util.StringUtils;
-import io.seata.config.Configuration;
-import io.seata.config.ConfigurationCache;
-import io.seata.config.ConfigurationChangeEvent;
-import io.seata.config.ConfigurationChangeListener;
-import io.seata.config.ConfigurationFactory;
+import io.seata.config.*;
import io.seata.core.constants.ConfigurationKeys;
import io.seata.core.constants.ServerTableColumnsName;
import io.seata.core.store.DistributedLockDO;
@@ -42,6 +32,13 @@ import io.seata.core.store.db.sql.distributed.lock.DistributedLockSqlFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Objects;
+
import static io.seata.core.constants.ConfigurationKeys.DISTRIBUTED_LOCK_DB_TABLE;
/**
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLockManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLockManager.java
index 1e4736fb..f73df2f9 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLockManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLockManager.java
@@ -15,7 +15,6 @@
*/
package io.seata.server.storage.db.lock;
-import javax.sql.DataSource;
import io.seata.common.executor.Initialize;
import io.seata.common.loader.EnhancedServiceLoader;
import io.seata.common.loader.LoadLevel;
@@ -28,6 +27,8 @@ import io.seata.server.lock.AbstractLockManager;
import io.seata.server.session.BranchSession;
import io.seata.server.session.GlobalSession;
+import javax.sql.DataSource;
+
/**
* The type db lock manager.
*
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLocker.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLocker.java
index 92d46cec..8355bc03 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLocker.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/DataBaseLocker.java
@@ -15,8 +15,6 @@
*/
package io.seata.server.storage.db.lock;
-import java.util.List;
-import javax.sql.DataSource;
import io.seata.common.exception.DataAccessException;
import io.seata.common.exception.StoreException;
import io.seata.common.util.CollectionUtils;
@@ -25,6 +23,9 @@ import io.seata.core.lock.RowLock;
import io.seata.core.model.LockStatus;
import io.seata.core.store.LockStore;
+import javax.sql.DataSource;
+import java.util.List;
+
/**
* The type Data base locker.
*
@@ -89,7 +90,7 @@ public class DataBaseLocker extends AbstractLocker {
@Override
public boolean releaseLock(String xid, Long branchId) {
try {
- return lockStore.unLock(xid, branchId);
+ return lockStore.unLock(branchId);
} catch (StoreException e) {
throw e;
} catch (Exception t) {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/LockStoreDataBaseDAO.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/LockStoreDataBaseDAO.java
index f732fef4..21f5fa25 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/LockStoreDataBaseDAO.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/lock/LockStoreDataBaseDAO.java
@@ -15,16 +15,6 @@
*/
package io.seata.server.storage.db.lock;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.sql.DataSource;
import io.seata.common.exception.DataAccessException;
import io.seata.common.exception.StoreException;
import io.seata.common.util.CollectionUtils;
@@ -43,6 +33,13 @@ import io.seata.core.store.db.sql.lock.LockStoreSqlFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.sql.DataSource;
+import java.sql.*;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
import static io.seata.common.DefaultValues.DEFAULT_LOCK_DB_TABLE;
import static io.seata.core.exception.TransactionExceptionCode.LockKeyConflictFailFast;
@@ -239,27 +236,6 @@ public class LockStoreDataBaseDAO implements LockStore {
return true;
}
- @Override
- public boolean unLock(String xid, Long branchId) {
- Connection conn = null;
- PreparedStatement ps = null;
- try {
- conn = lockStoreDataSource.getConnection();
- conn.setAutoCommit(true);
- //batch release lock by branch
- String batchDeleteSQL = LockStoreSqlFactory.getLogStoreSql(dbType).getBatchDeleteLockSqlByBranch(lockTable);
- ps = conn.prepareStatement(batchDeleteSQL);
- ps.setString(1, xid);
- ps.setLong(2, branchId);
- ps.executeUpdate();
- } catch (SQLException e) {
- throw new StoreException(e);
- } finally {
- IOUtil.close(ps, conn);
- }
- return true;
- }
-
@Override
public boolean unLock(String xid) {
Connection conn = null;
@@ -280,6 +256,26 @@ public class LockStoreDataBaseDAO implements LockStore {
return true;
}
+ @Override
+ public boolean unLock(Long branchId) {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ try {
+ conn = lockStoreDataSource.getConnection();
+ conn.setAutoCommit(true);
+ //batch release lock by branchId
+ String batchDeleteSQL = LockStoreSqlFactory.getLogStoreSql(dbType).getBatchDeleteLockSqlByBranchId(lockTable);
+ ps = conn.prepareStatement(batchDeleteSQL);
+ ps.setLong(1, branchId);
+ ps.executeUpdate();
+ } catch (SQLException e) {
+ throw new StoreException(e);
+ } finally {
+ IOUtil.close(ps, conn);
+ }
+ return true;
+ }
+
@Override
public boolean isLockable(List lockDOs) {
Connection conn = null;
@@ -335,6 +331,9 @@ public class LockStoreDataBaseDAO implements LockStore {
ps.setInt(8, LockStatus.Locked.getCode());
return ps.executeUpdate() > 0;
} catch (SQLException e) {
+ if (e instanceof SQLIntegrityConstraintViolationException) {
+ return false;
+ }
throw new StoreException(e);
} finally {
IOUtil.close(ps);
@@ -348,7 +347,7 @@ public class LockStoreDataBaseDAO implements LockStore {
* @param lockDOs the lock do list
* @return the boolean
*/
- protected boolean doAcquireLocks(Connection conn, List lockDOs) {
+ protected boolean doAcquireLocks(Connection conn, List lockDOs) throws SQLException {
PreparedStatement ps = null;
try {
//insert
@@ -366,10 +365,12 @@ public class LockStoreDataBaseDAO implements LockStore {
ps.addBatch();
}
return ps.executeBatch().length == lockDOs.size();
- } catch (SQLException e) {
+ } catch (SQLIntegrityConstraintViolationException e) {
LOGGER.error("Global lock batch acquire error: {}", e.getMessage(), e);
//return false,let the caller go to conn.rollabck()
return false;
+ } catch (SQLException e) {
+ throw e;
} finally {
IOUtil.close(ps);
}
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java
index 8bc10ad8..f93e3a9e 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/session/DataBaseSessionManager.java
@@ -15,8 +15,6 @@
*/
package io.seata.server.storage.db.session;
-import java.util.Collection;
-import java.util.List;
import io.seata.common.exception.StoreException;
import io.seata.common.executor.Initialize;
import io.seata.common.loader.LoadLevel;
@@ -25,16 +23,15 @@ import io.seata.common.util.StringUtils;
import io.seata.core.exception.TransactionException;
import io.seata.core.model.BranchStatus;
import io.seata.core.model.GlobalStatus;
-import io.seata.server.session.AbstractSessionManager;
-import io.seata.server.session.BranchSession;
-import io.seata.server.session.GlobalSession;
-import io.seata.server.session.SessionCondition;
-import io.seata.server.session.SessionHolder;
+import io.seata.server.session.*;
import io.seata.server.storage.db.store.DataBaseTransactionStoreManager;
import io.seata.server.store.TransactionStoreManager.LogOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.Collection;
+import java.util.List;
+
/**
* The Data base session manager.
*
@@ -108,7 +105,7 @@ public class DataBaseSessionManager extends AbstractSessionManager
* 1. rootSessionManager remove normal globalSession
* 2. retryCommitSessionManager and retryRollbackSessionManager remove retry expired globalSession
* @param session the session
- * @throws TransactionException
+ * @throws TransactionException the transaction exception
*/
@Override
public void removeGlobalSession(GlobalSession session) throws TransactionException {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/DataBaseTransactionStoreManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/DataBaseTransactionStoreManager.java
index 16fac553..421a21f6 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/DataBaseTransactionStoreManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/DataBaseTransactionStoreManager.java
@@ -15,14 +15,6 @@
*/
package io.seata.server.storage.db.store;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import javax.sql.DataSource;
-
import io.seata.common.exception.StoreException;
import io.seata.common.loader.EnhancedServiceLoader;
import io.seata.common.util.CollectionUtils;
@@ -37,10 +29,14 @@ import io.seata.core.store.LogStore;
import io.seata.core.store.db.DataSourceProvider;
import io.seata.server.session.GlobalSession;
import io.seata.server.session.SessionCondition;
+import io.seata.server.storage.SessionConverter;
import io.seata.server.store.AbstractTransactionStoreManager;
import io.seata.server.store.SessionStorable;
import io.seata.server.store.TransactionStoreManager;
-import io.seata.server.storage.SessionConverter;
+
+import javax.sql.DataSource;
+import java.util.*;
+import java.util.stream.Collectors;
import static io.seata.core.constants.RedisKeyConstants.DEFAULT_LOG_QUERY_LIMIT;
@@ -165,6 +161,11 @@ public class DataBaseTransactionStoreManager extends AbstractTransactionStoreMan
return getGlobalSession(globalTransactionDO, branchTransactionDOs);
}
+ @Override
+ public List readSortByTimeoutBeginSessions(boolean withBranchSessions) {
+ return readSession(new GlobalStatus[] {GlobalStatus.Begin}, withBranchSessions);
+ }
+
/**
* Read session list.
*
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java
index 3aa86db0..94baf8e3 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/db/store/LogStoreDataBaseDAO.java
@@ -15,15 +15,6 @@
*/
package io.seata.server.storage.db.store;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-import javax.sql.DataSource;
-
import io.seata.common.exception.DataAccessException;
import io.seata.common.exception.StoreException;
import io.seata.common.util.IOUtil;
@@ -39,6 +30,11 @@ import io.seata.core.store.db.sql.log.LogStoreSqlsFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.sql.DataSource;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
import static io.seata.common.DefaultValues.DEFAULT_STORE_DB_BRANCH_TABLE;
import static io.seata.common.DefaultValues.DEFAULT_STORE_DB_GLOBAL_TABLE;
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/TransactionWriteStore.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/TransactionWriteStore.java
index 177d0e52..d5e4d3e2 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/TransactionWriteStore.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/TransactionWriteStore.java
@@ -15,14 +15,14 @@
*/
package io.seata.server.storage.file;
-import java.nio.ByteBuffer;
-
import io.seata.common.exception.ShouldNeverHappenException;
import io.seata.server.session.BranchSession;
import io.seata.server.session.GlobalSession;
import io.seata.server.store.SessionStorable;
import io.seata.server.store.TransactionStoreManager.LogOperation;
+import java.nio.ByteBuffer;
+
/**
* The type Transaction write store.
*
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java
index 37f8e2df..72e897e7 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLockManager.java
@@ -15,8 +15,6 @@
*/
package io.seata.server.storage.file.lock;
-import java.util.List;
-
import io.seata.common.loader.LoadLevel;
import io.seata.core.exception.TransactionException;
import io.seata.core.lock.Locker;
@@ -25,6 +23,8 @@ import io.seata.server.session.BranchSession;
import io.seata.server.session.GlobalSession;
import org.slf4j.MDC;
+import java.util.List;
+
import static io.seata.core.context.RootContext.MDC_KEY_BRANCH_ID;
/**
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLocker.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLocker.java
index f3f40333..fe111022 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLocker.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/lock/FileLocker.java
@@ -15,12 +15,6 @@
*/
package io.seata.server.storage.file.lock;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
import io.seata.common.exception.FrameworkException;
import io.seata.common.exception.StoreException;
import io.seata.common.util.CollectionUtils;
@@ -31,6 +25,11 @@ import io.seata.core.lock.RowLock;
import io.seata.core.model.LockStatus;
import io.seata.server.session.BranchSession;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import static io.seata.core.exception.TransactionExceptionCode.LockKeyConflictFailFast;
@@ -196,7 +195,7 @@ public class FileLocker extends AbstractLocker {
/**
* Because bucket lock map will be key of HashMap(lockHolder), however {@link ConcurrentHashMap} overwrites
- * {@link Object##hashCode()} and {@link Object##equals(Object)}, that leads to hash key conflict in lockHolder.
+ * {@link Object#hashCode()} and {@link Object#equals(Object)}, that leads to hash key conflict in lockHolder.
* We define a {@link BucketLockMap} to hold the ConcurrentHashMap(bucketLockMap) and replace it as key of
* HashMap(lockHolder).
*/
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java
index b5e1a0f9..504ec495 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/session/FileSessionManager.java
@@ -15,19 +15,6 @@
*/
package io.seata.server.storage.file.session;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Arrays;
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-
import io.seata.common.exception.ShouldNeverHappenException;
import io.seata.common.loader.LoadLevel;
import io.seata.common.loader.Scope;
@@ -37,11 +24,7 @@ import io.seata.config.ConfigurationFactory;
import io.seata.core.constants.ConfigurationKeys;
import io.seata.core.exception.TransactionException;
import io.seata.core.model.GlobalStatus;
-import io.seata.server.session.AbstractSessionManager;
-import io.seata.server.session.BranchSession;
-import io.seata.server.session.GlobalSession;
-import io.seata.server.session.Reloadable;
-import io.seata.server.session.SessionCondition;
+import io.seata.server.session.*;
import io.seata.server.storage.file.ReloadableStore;
import io.seata.server.storage.file.TransactionWriteStore;
import io.seata.server.storage.file.store.FileTransactionStoreManager;
@@ -49,6 +32,13 @@ import io.seata.server.store.AbstractTransactionStoreManager;
import io.seata.server.store.SessionStorable;
import io.seata.server.store.TransactionStoreManager;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static io.seata.common.DefaultValues.DEFAULT_SERVICE_SESSION_RELOAD_READ_SIZE;
+
/**
* The type File based session manager.
@@ -59,7 +49,7 @@ import io.seata.server.store.TransactionStoreManager;
public class FileSessionManager extends AbstractSessionManager implements Reloadable {
private static final int READ_SIZE = ConfigurationFactory.getInstance().getInt(
- ConfigurationKeys.SERVICE_SESSION_RELOAD_READ_SIZE, 100);
+ ConfigurationKeys.SERVICE_SESSION_RELOAD_READ_SIZE, DEFAULT_SERVICE_SESSION_RELOAD_READ_SIZE);
/**
* The Session map.
*/
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java
index 69b6f4d1..6b3c1c77 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/file/store/FileTransactionStoreManager.java
@@ -15,6 +15,24 @@
*/
package io.seata.server.storage.file.store;
+import io.seata.common.exception.StoreException;
+import io.seata.common.thread.NamedThreadFactory;
+import io.seata.common.util.CollectionUtils;
+import io.seata.server.session.BranchSession;
+import io.seata.server.session.GlobalSession;
+import io.seata.server.session.SessionCondition;
+import io.seata.server.session.SessionManager;
+import io.seata.server.storage.file.FlushDiskMode;
+import io.seata.server.storage.file.ReloadableStore;
+import io.seata.server.storage.file.TransactionWriteStore;
+import io.seata.server.store.AbstractTransactionStoreManager;
+import io.seata.server.store.SessionStorable;
+import io.seata.server.store.StoreConfig;
+import io.seata.server.store.TransactionStoreManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
@@ -24,32 +42,10 @@ import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;
-import io.seata.common.exception.StoreException;
-import io.seata.common.thread.NamedThreadFactory;
-import io.seata.common.util.CollectionUtils;
-import io.seata.server.session.BranchSession;
-import io.seata.server.session.GlobalSession;
-import io.seata.server.session.SessionCondition;
-import io.seata.server.session.SessionManager;
-import io.seata.server.store.AbstractTransactionStoreManager;
-import io.seata.server.storage.file.FlushDiskMode;
-import io.seata.server.storage.file.ReloadableStore;
-import io.seata.server.store.SessionStorable;
-import io.seata.server.store.StoreConfig;
-import io.seata.server.store.TransactionStoreManager;
-import io.seata.server.storage.file.TransactionWriteStore;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
-
import static io.seata.core.context.RootContext.MDC_KEY_BRANCH_ID;
/**
@@ -335,7 +331,9 @@ public class FileTransactionStoreManager extends AbstractTransactionStoreManager
}
}
try {
- currFileChannel.force(true);
+ if (currFileChannel.isOpen()) {
+ currFileChannel.force(true);
+ }
} catch (IOException e) {
LOGGER.error("fileChannel force error: {}", e.getMessage(), e);
}
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java
index 6e580ca6..b0f6c61c 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java
@@ -15,10 +15,6 @@
*/
package io.seata.server.storage.redis;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
import io.seata.common.exception.RedisException;
import io.seata.common.util.ConfigTools;
import io.seata.common.util.StringUtils;
@@ -27,11 +23,11 @@ import io.seata.config.ConfigurationFactory;
import io.seata.core.constants.ConfigurationKeys;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisPool;
-import redis.clients.jedis.JedisPoolAbstract;
-import redis.clients.jedis.JedisPoolConfig;
-import redis.clients.jedis.JedisSentinelPool;
+import redis.clients.jedis.*;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
/**
* @author funkye
@@ -62,7 +58,7 @@ public class JedisPooledFactory {
/**
* get the RedisPool instance (singleton)
- *
+ *
* @return redisPool
*/
public static JedisPoolAbstract getJedisPoolInstance(JedisPoolAbstract... jedisPools) {
@@ -122,7 +118,7 @@ public class JedisPooledFactory {
/**
* get an instance of Jedis (connection) from the connection pool
- *
+ *
* @return jedis
*/
public static Jedis getJedisInstance() {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisDistributedLocker.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisDistributedLocker.java
index 4aa20e2b..ecd60cac 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisDistributedLocker.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisDistributedLocker.java
@@ -27,7 +27,7 @@ import redis.clients.jedis.Transaction;
import redis.clients.jedis.params.SetParams;
/**
- * @description Redis distributed lock
+ * Redis distributed lock
* @author zhongxiang.wang
*/
@LoadLevel(name = "redis", scope = Scope.SINGLETON)
@@ -39,18 +39,15 @@ public class RedisDistributedLocker implements DistributedLocker {
/**
* Acquire the distributed lock
*
- * @param distributedLockDO
- * @return
+ * @param distributedLockDO the distributed lock info
+ * @return the distributed lock info
*/
@Override
public boolean acquireLock(DistributedLockDO distributedLockDO) {
try (Jedis jedis = JedisPooledFactory.getJedisInstance()) {
//Don't need retry,if can't acquire the lock,let the other get the lock
String result = jedis.set(distributedLockDO.getLockKey(), distributedLockDO.getLockValue(), SetParams.setParams().nx().px(distributedLockDO.getExpireTime()));
- if (SUCCESS.equalsIgnoreCase(result)) {
- return true;
- }
- return false;
+ return SUCCESS.equalsIgnoreCase(result);
} catch (Exception ex) {
LOGGER.error("The {} acquired the {} distributed lock failed.", distributedLockDO.getLockValue(), distributedLockDO.getLockKey(), ex);
return false;
@@ -61,8 +58,8 @@ public class RedisDistributedLocker implements DistributedLocker {
/**
* Release the distributed lock
*
- * @param distributedLockDO
- * @return
+ * @param distributedLockDO the distributed lock info
+ * @return the boolean
*/
@Override
public boolean releaseLock(DistributedLockDO distributedLockDO) {
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java
index 81260e6f..361b1624 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/lock/RedisLocker.java
@@ -15,20 +15,6 @@
*/
package io.seata.server.storage.redis.lock;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.StringJoiner;
-import java.util.stream.Collectors;
import com.google.common.collect.Lists;
import io.seata.common.exception.StoreException;
import io.seata.common.io.FileLoader;
@@ -46,6 +32,10 @@ import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
+import java.io.*;
+import java.util.*;
+import java.util.stream.Collectors;
+
import static io.seata.common.Constants.ROW_LOCK_KEY_SPLIT_CHAR;
import static io.seata.core.constants.RedisKeyConstants.DEFAULT_REDIS_SEATA_GLOBAL_LOCK_PREFIX;
import static io.seata.core.constants.RedisKeyConstants.DEFAULT_REDIS_SEATA_ROW_LOCK_PREFIX;
@@ -359,7 +349,7 @@ public class RedisLocker extends AbstractLocker {
Map rowKeyMap = jedis.hgetAll(xidLockKey);
rowKeyMap.forEach((branch, rowKey) -> rowKeys.add(rowKey));
} else {
- rowKeys.addAll(jedis.hmget(xidLockKey, branchId.toString()));
+ rowKeys.add(jedis.hget(xidLockKey, branchId.toString()));
}
if (CollectionUtils.isNotEmpty(rowKeys)) {
Pipeline pipelined = jedis.pipelined();
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java
index 7eecafd4..50120200 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/session/RedisSessionManager.java
@@ -15,9 +15,6 @@
*/
package io.seata.server.storage.redis.session;
-import java.util.Collection;
-import java.util.List;
-
import io.seata.common.exception.StoreException;
import io.seata.common.executor.Initialize;
import io.seata.common.loader.LoadLevel;
@@ -26,16 +23,15 @@ import io.seata.common.util.StringUtils;
import io.seata.core.exception.TransactionException;
import io.seata.core.model.BranchStatus;
import io.seata.core.model.GlobalStatus;
-import io.seata.server.session.AbstractSessionManager;
-import io.seata.server.session.BranchSession;
-import io.seata.server.session.GlobalSession;
-import io.seata.server.session.SessionCondition;
-import io.seata.server.session.SessionHolder;
+import io.seata.server.session.*;
import io.seata.server.storage.redis.store.RedisTransactionStoreManager;
import io.seata.server.store.TransactionStoreManager.LogOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.Collection;
+import java.util.List;
+
/**
* @author funkye
*/
@@ -167,16 +163,15 @@ public class RedisSessionManager extends AbstractSessionManager
if (SessionHolder.ASYNC_COMMITTING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) {
return findGlobalSessions(new SessionCondition(GlobalStatus.AsyncCommitting));
} else if (SessionHolder.RETRY_COMMITTING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) {
- return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.CommitRetrying, GlobalStatus.Committing}));
+ return findGlobalSessions(new SessionCondition(GlobalStatus.CommitRetrying, GlobalStatus.Committing));
} else if (SessionHolder.RETRY_ROLLBACKING_SESSION_MANAGER_NAME.equalsIgnoreCase(taskName)) {
- return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.RollbackRetrying,
- GlobalStatus.Rollbacking, GlobalStatus.TimeoutRollbacking, GlobalStatus.TimeoutRollbackRetrying}));
+ return findGlobalSessions(new SessionCondition(GlobalStatus.RollbackRetrying, GlobalStatus.Rollbacking,
+ GlobalStatus.TimeoutRollbacking, GlobalStatus.TimeoutRollbackRetrying));
} else {
// all data
- return findGlobalSessions(new SessionCondition(new GlobalStatus[] {GlobalStatus.UnKnown, GlobalStatus.Begin,
- GlobalStatus.Committing, GlobalStatus.CommitRetrying, GlobalStatus.Rollbacking,
- GlobalStatus.RollbackRetrying, GlobalStatus.TimeoutRollbacking, GlobalStatus.TimeoutRollbackRetrying,
- GlobalStatus.AsyncCommitting}));
+ return findGlobalSessions(new SessionCondition(GlobalStatus.UnKnown, GlobalStatus.Begin, GlobalStatus.Committing,
+ GlobalStatus.CommitRetrying, GlobalStatus.Rollbacking, GlobalStatus.RollbackRetrying, GlobalStatus.TimeoutRollbacking,
+ GlobalStatus.TimeoutRollbackRetrying, GlobalStatus.AsyncCommitting));
}
}
diff --git a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java
index d1510379..d680c462 100644
--- a/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java
+++ b/ruoyi-visual/ruoyi-seata-server/src/main/java/io/seata/server/storage/redis/store/RedisTransactionStoreManager.java
@@ -15,21 +15,6 @@
*/
package io.seata.server.storage.redis.store;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Date;
-import java.util.Optional;
-import java.util.Collections;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import io.seata.config.Configuration;
-import io.seata.config.ConfigurationFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableMap;
import io.seata.common.XID;
import io.seata.common.exception.RedisException;
@@ -37,29 +22,32 @@ import io.seata.common.exception.StoreException;
import io.seata.common.util.BeanUtils;
import io.seata.common.util.CollectionUtils;
import io.seata.common.util.StringUtils;
-import io.seata.server.console.param.GlobalSessionParam;
+import io.seata.config.Configuration;
+import io.seata.config.ConfigurationFactory;
import io.seata.core.model.GlobalStatus;
import io.seata.core.store.BranchTransactionDO;
import io.seata.core.store.GlobalTransactionDO;
+import io.seata.server.console.param.GlobalSessionParam;
import io.seata.server.session.GlobalSession;
import io.seata.server.session.SessionCondition;
+import io.seata.server.session.SessionStatusValidator;
import io.seata.server.storage.SessionConverter;
import io.seata.server.storage.redis.JedisPooledFactory;
import io.seata.server.store.AbstractTransactionStoreManager;
import io.seata.server.store.SessionStorable;
import io.seata.server.store.TransactionStoreManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Transaction;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
import static io.seata.common.ConfigurationKeys.STORE_REDIS_QUERY_LIMIT;
-import static io.seata.core.constants.RedisKeyConstants.REDIS_KEY_BRANCH_XID;
-import static io.seata.core.constants.RedisKeyConstants.REDIS_KEY_GLOBAL_XID;
-import static io.seata.core.constants.RedisKeyConstants.DEFAULT_LOG_QUERY_LIMIT;
-import static io.seata.core.constants.RedisKeyConstants.REDIS_KEY_BRANCH_STATUS;
-import static io.seata.core.constants.RedisKeyConstants.REDIS_KEY_GLOBAL_STATUS;
-import static io.seata.core.constants.RedisKeyConstants.REDIS_KEY_GLOBAL_GMT_MODIFIED;
-import static io.seata.core.constants.RedisKeyConstants.REDIS_KEY_BRANCH_GMT_MODIFIED;
-import static io.seata.core.constants.RedisKeyConstants.REDIS_KEY_BRANCH_APPLICATION_DATA;
+import static io.seata.core.constants.RedisKeyConstants.*;
/**
* The redis transaction store manager
@@ -84,6 +72,9 @@ public class RedisTransactionStoreManager extends AbstractTransactionStoreManage
/**the prefix of the global transaction status*/
private static final String REDIS_SEATA_STATUS_PREFIX = "SEATA_STATUS_";
+ /**the key of global transaction status for begin*/
+ private static final String REDIS_SEATA_BEGIN_TRANSACTIONS_KEY = "SEATA_BEGIN_TRANSACTIONS";
+
private static volatile RedisTransactionStoreManager instance;
private static final String OK = "OK";
@@ -120,13 +111,6 @@ public class RedisTransactionStoreManager extends AbstractTransactionStoreManage
initGlobalMap();
initBranchMap();
logQueryLimit = CONFIG.getInt(STORE_REDIS_QUERY_LIMIT, DEFAULT_LOG_QUERY_LIMIT);
- /**
- * redis mode: if DEFAULT_LOG_QUERY_LIMIT < STORE_REDIS_QUERY_LIMIT get DEFAULT_LOG_QUERY_LIMIT if
- * DEFAULT_LOG_QUERY_LIMIT >= STORE_REDIS_QUERY_LIMIT get STORE_REDIS_QUERY_LIMIT
- */
- if (logQueryLimit > DEFAULT_LOG_QUERY_LIMIT) {
- logQueryLimit = DEFAULT_LOG_QUERY_LIMIT;
- }
}
/**
@@ -143,7 +127,6 @@ public class RedisTransactionStoreManager extends AbstractTransactionStoreManage
/**
* init globalMap
*
- * @return void
*/
public void initGlobalMap() {
if (CollectionUtils.isEmpty(branchMap)) {
@@ -158,7 +141,6 @@ public class RedisTransactionStoreManager extends AbstractTransactionStoreManage
/**
* init branchMap
*
- * @return void
*/
public void initBranchMap() {
if (CollectionUtils.isEmpty(branchMap)) {
@@ -264,7 +246,10 @@ public class RedisTransactionStoreManager extends AbstractTransactionStoreManage
globalTransactionDO.setGmtCreate(now);
globalTransactionDO.setGmtModified(now);
pipelined.hmset(globalKey, BeanUtils.objectToMap(globalTransactionDO));
- pipelined.rpush(buildGlobalStatus(globalTransactionDO.getStatus()), globalTransactionDO.getXid());
+ String xid = globalTransactionDO.getXid();
+ pipelined.rpush(buildGlobalStatus(globalTransactionDO.getStatus()), xid);
+ pipelined.zadd(REDIS_SEATA_BEGIN_TRANSACTIONS_KEY,
+ globalTransactionDO.getBeginTime() + globalTransactionDO.getTimeout(), globalKey);
pipelined.sync();
return true;
} catch (Exception ex) {
@@ -293,6 +278,10 @@ public class RedisTransactionStoreManager extends AbstractTransactionStoreManage
try (Pipeline pipelined = jedis.pipelined()) {
pipelined.lrem(buildGlobalStatus(globalTransactionDO.getStatus()), 0, globalTransactionDO.getXid());
pipelined.del(globalKey);
+ if (GlobalStatus.Begin.getCode() == globalTransactionDO.getStatus()
+ || GlobalStatus.UnKnown.getCode() == globalTransactionDO.getStatus()) {
+ pipelined.zrem(REDIS_SEATA_BEGIN_TRANSACTIONS_KEY, globalKey);
+ }
pipelined.sync();
}
return true;
@@ -326,15 +315,22 @@ public class RedisTransactionStoreManager extends AbstractTransactionStoreManage
jedis.unwatch();
return true;
}
+ GlobalStatus before = GlobalStatus.get(Integer.parseInt(previousStatus));
+ GlobalStatus after = GlobalStatus.get(globalTransactionDO.getStatus());
+ if (!SessionStatusValidator.validateUpdateStatus(before, after)) {
+ throw new StoreException("Illegal changing of global status, update global transaction failed."
+ + " beforeStatus[" + before.name() + "] cannot be changed to afterStatus[" + after.name() + "]");
+ }
String previousGmtModified = statusAndGmtModified.get(1);
Transaction multi = jedis.multi();
Map map = new HashMap<>(2);
map.put(REDIS_KEY_GLOBAL_STATUS,String.valueOf(globalTransactionDO.getStatus()));
map.put(REDIS_KEY_GLOBAL_GMT_MODIFIED,String.valueOf((new Date()).getTime()));
- multi.hmset(globalKey,map);
- multi.lrem(buildGlobalStatus(Integer.valueOf(previousStatus)),0, xid);
+ multi.hmset(globalKey, map);
+ multi.lrem(buildGlobalStatus(Integer.valueOf(previousStatus)), 0, xid);
multi.rpush(buildGlobalStatus(globalTransactionDO.getStatus()), xid);
+ multi.zrem(REDIS_SEATA_BEGIN_TRANSACTIONS_KEY, globalKey);
List