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

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


The following commit(s) were added to refs/heads/2.x by this push:
     new 864348ae74 bugfix: undolog rollback info more than 64MB (#6483)
864348ae74 is described below

commit 864348ae747ea2a4ada6826a382c731ce0e72557
Author: jsbxyyx <jsbx...@apache.org>
AuthorDate: Wed Jul 31 16:32:58 2024 +0800

    bugfix: undolog rollback info more than 64MB (#6483)
---
 changes/en-us/2.x.md                               |   3 +
 changes/zh-cn/2.x.md                               |   3 +-
 .../apache/seata/common/util/CollectionUtils.java  |   4 +-
 .../apache/seata/common/util}/UUIDGenerator.java   |   7 +-
 .../main/resources/error/ErrorCode_en.properties   |   1 +
 .../seata/rm/datasource/DataSourceProxy.java       |  43 +++---
 .../rm/datasource/undo/AbstractUndoExecutor.java   |  11 +-
 .../rm/datasource/undo/AbstractUndoLogManager.java | 145 +++++++++++++++++----
 .../seata/rm/datasource/undo/UndoLogConstants.java |   8 ++
 .../datasource/undo/mysql/MySQLUndoLogManager.java |  96 +++++++++++++-
 .../rm/datasource/undo/UndoLogManagerTest.java     |  18 +--
 .../main/java/org/apache/seata/server/Server.java  |   1 +
 .../apache/seata/server/session/GlobalSession.java |   2 +-
 .../apache/seata/server/session/SessionHelper.java |   2 +-
 server/src/test/java/ServerTest.java               |   2 +-
 .../seata/server/UUIDGeneratorOverflowTest.java    |   1 +
 .../apache/seata/server/lock/LockManagerTest.java  |   2 +-
 .../server/lock/file/FileLockManagerImplTest.java  |   2 +-
 .../seata/server/session/BranchSessionTest.java    |   2 +-
 .../session/db/DataBaseSessionManagerTest.java     |   2 +-
 .../session/redis/RedisSessionManagerTest.java     |   2 +-
 .../file/FileTransactionStoreManagerTest.java      |   2 +-
 .../apache/seata/mockserver/MockCoordinator.java   |   2 +-
 .../org/apache/seata/mockserver/MockServer.java    |   2 +-
 .../apache/seata/at/mysql/MysqlUpdateJoinTest.java |   2 +-
 .../seata/core/rpc/netty/TmNettyClientTest.java    |   2 +-
 .../seata/saga/engine/db/AbstractServerTest.java   |   2 +-
 .../engine/mock/MockSagaTransactionTemplate.java   |   2 +-
 28 files changed, 295 insertions(+), 76 deletions(-)

diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 838c1568e3..17be2ff15e 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -13,11 +13,13 @@ Add changes here for all PR submitted to the 2.x branch.
 - [[#6626](https://github.com/apache/incubator-seata/pull/6626)] fix hsf 
ConsumerModel convert error
 - [[#6642](https://github.com/apache/incubator-seata/pull/6642)] codecov token 
not found
 - [[#6661](https://github.com/apache/incubator-seata/pull/6661)] fix 
`tableMeta` cache scheduled refresh issue
+- [[#6486](https://github.com/apache/incubator-seata/pull/6486)] fix mysql 
undo log update sql data more than max allowed packet
 - [[#6668](https://github.com/apache/incubator-seata/pull/6668)] thread safety 
issue when adding and removing instances
 - [[#6678](https://github.com/apache/incubator-seata/pull/6678)] fix the same 
record has different lowkeys due to mixed case of table names yesterday
 - [[#6697](https://github.com/apache/incubator-seata/pull/6697)] v0 ByteBuf 
should not decode by super class
 - [[#6707](https://github.com/apache/incubator-seata/pull/6707)] fix readonly 
branch commit errors in Oracle XA transactions
 
+
 ### optimize:
 - [[#6499](https://github.com/apache/incubator-seata/pull/6499)] split the 
task thread pool for committing and rollbacking statuses
 - [[#6208](https://github.com/apache/incubator-seata/pull/6208)] optimize : 
load SeataSerializer by version
@@ -63,6 +65,7 @@ Thanks to these contributors for their code commits. Please 
report an unintended
 - [xjlgod](https://github.com/xjlgod)
 - [xingfudeshi](https://github.com/xingfudeshi)
 - [wuwen5](https://github.com/wuwen5)
+- [jsbxyyx](https://github.com/jsbxyyx)
 - [iAmClever](https://github.com/iAmClever)
 - [GoodBoyCoder](https://github.com/GoodBoyCoder)
 - [liuqiufeng](https://github.com/liuqiufeng)
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 63f9a01fd9..ac21a3cd7f 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -15,12 +15,12 @@
 - [[#6640](https://github.com/apache/incubator-seata/pull/6640)] 优化codecov相关配置
 - [[#6642](https://github.com/apache/incubator-seata/pull/6642)] 修复codecov 
token找不到导致无法提交单测覆盖度报告
 - [[#6661](https://github.com/apache/incubator-seata/pull/6661)] 
修复`tableMeta`缓存定时刷新失效问题
+- [[#6486](https://github.com/apache/incubator-seata/pull/6486)] 
修复在mysql数据库下undo_log sql数据超过最大包大小错误
 - [[#6668](https://github.com/apache/incubator-seata/pull/6668)] 
解决namingserver同一个集群下instance添加和删除时的线程安全问题
 - [[#6678](https://github.com/apache/incubator-seata/pull/6678)] 
修复由于表名大小写问题导致的相同记录生成不同RowKey的问题
 - [[#6697](https://github.com/apache/incubator-seata/pull/6697)] 
v0版本的ByteBuf不应由父类先解码
 - [[#6707](https://github.com/apache/incubator-seata/pull/6707)] 修复Oracle 
XA事务中只读分支提交出错的问题
 
-
 ### optimize:
 - [[#6499](https://github.com/apache/incubator-seata/pull/6499)] 拆分 committing 
和 rollbacking 状态的任务线程池
 - [[#6208](https://github.com/apache/incubator-seata/pull/6208)] 支持多版本的Seata序列化
@@ -69,6 +69,7 @@
 - [xjlgod](https://github.com/xjlgod)
 - [xingfudeshi](https://github.com/xingfudeshi)
 - [wuwen5](https://github.com/wuwen5)
+- [jsbxyyx](https://github.com/jsbxyyx)
 - [iAmClever](https://github.com/iAmClever)
 - [GoodBoyCoder](https://github.com/GoodBoyCoder)
 - [liuqiufeng](https://github.com/liuqiufeng)
diff --git 
a/common/src/main/java/org/apache/seata/common/util/CollectionUtils.java 
b/common/src/main/java/org/apache/seata/common/util/CollectionUtils.java
index 1c8c3b2b41..244b490006 100644
--- a/common/src/main/java/org/apache/seata/common/util/CollectionUtils.java
+++ b/common/src/main/java/org/apache/seata/common/util/CollectionUtils.java
@@ -203,9 +203,9 @@ public class CollectionUtils {
         }
     }
 
-    private static final String KV_SPLIT = "=";
+    public static final String KV_SPLIT = "=";
 
-    private static final String PAIR_SPLIT = "&";
+    public static final String PAIR_SPLIT = "&";
 
     /**
      * Encode map to string
diff --git a/server/src/main/java/org/apache/seata/server/UUIDGenerator.java 
b/common/src/main/java/org/apache/seata/common/util/UUIDGenerator.java
similarity index 94%
rename from server/src/main/java/org/apache/seata/server/UUIDGenerator.java
rename to common/src/main/java/org/apache/seata/common/util/UUIDGenerator.java
index 0cd316bbff..542de3ed1e 100644
--- a/server/src/main/java/org/apache/seata/server/UUIDGenerator.java
+++ b/common/src/main/java/org/apache/seata/common/util/UUIDGenerator.java
@@ -14,13 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.seata.server;
-
-import org.apache.seata.common.util.IdWorker;
+package org.apache.seata.common.util;
 
 /**
  * The type Uuid generator.
- *
  */
 public class UUIDGenerator {
 
@@ -28,6 +25,7 @@ public class UUIDGenerator {
 
     /**
      * generate UUID using snowflake algorithm
+     *
      * @return UUID
      */
     public static long generateUUID() {
@@ -43,6 +41,7 @@ public class UUIDGenerator {
 
     /**
      * init IdWorker
+     *
      * @param serverNode the server node id, consider as machine id in 
snowflake
      */
     public static void init(Long serverNode) {
diff --git a/common/src/main/resources/error/ErrorCode_en.properties 
b/common/src/main/resources/error/ErrorCode_en.properties
index 424ac23455..9019ccd185 100644
--- a/common/src/main/resources/error/ErrorCode_en.properties
+++ b/common/src/main/resources/error/ErrorCode_en.properties
@@ -14,6 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+
 ERR_PREFIX=ERR-CODE: [Seata-{code}][{key}]
 ERR_POSTFIX=More: [https://seata.apache.org/docs/next/overview/faq#{code}]
 ERR_CONFIG=config error, {0}
diff --git 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
index e13b0b96dd..dfab706294 100644
--- 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
+++ 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
@@ -20,6 +20,8 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.sql.DataSource;
 
@@ -66,6 +68,8 @@ public class DataSourceProxy extends AbstractDataSourceProxy 
implements Resource
 
     private String productVersion;
 
+    private final Map<String, String> variables = new HashMap<>();
+
     /**
      * POLARDB-X 1.X -> TDDL
      * POLARDB-X 2.X & MySQL 5.6 -> PXC
@@ -399,27 +403,36 @@ public class DataSourceProxy extends 
AbstractDataSourceProxy implements Resource
         return kernelVersion;
     }
 
+    public String getVariableValue(String name) {
+        return variables.get(name);
+    }
+
     private void validMySQLVersion(Connection connection) {
         if (!JdbcConstants.MYSQL.equals(dbType)) {
             return;
         }
-        try (PreparedStatement preparedStatement = 
connection.prepareStatement("SELECT VERSION()");
-             ResultSet versionResult = preparedStatement.executeQuery()) {
-            if (versionResult.next()) {
-                String version = versionResult.getString("VERSION()");
-                if (StringUtils.isBlank(version)) {
-                    return;
-                }
-                int dashIdx = version.indexOf('-');
-                // in mysql: 5.6.45, in polardb-x: 5.6.45-TDDL-xxx
-                if (dashIdx > 0) {
-                    kernelVersion = version.substring(0, dashIdx);
-                    productVersion = version.substring(dashIdx + 1);
-                } else {
-                    kernelVersion = version;
-                    productVersion = version;
+        try (PreparedStatement preparedStatement = 
connection.prepareStatement("SHOW VARIABLES");
+             ResultSet rs = preparedStatement.executeQuery()) {
+            while (rs.next()) {
+                String name = rs.getString(1);
+                String value = rs.getString(2);
+                if (StringUtils.isNotBlank(name)) {
+                    variables.put(name.toLowerCase(), value);
                 }
             }
+            String version = variables.get("version");
+            if (StringUtils.isBlank(version)) {
+                return;
+            }
+            int dashIdx = version.indexOf('-');
+            // in mysql: 5.6.45, in polardb-x: 5.6.45-TDDL-xxx
+            if (dashIdx > 0) {
+                kernelVersion = version.substring(0, dashIdx);
+                productVersion = version.substring(dashIdx + 1);
+            } else {
+                kernelVersion = version;
+                productVersion = version;
+            }
         } catch (Exception e) {
             LOGGER.error("check mysql version fail error: {}", e.getMessage());
         }
diff --git 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoExecutor.java
 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoExecutor.java
index 1bfd90866b..d964c5469c 100644
--- 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoExecutor.java
+++ 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoExecutor.java
@@ -16,6 +16,7 @@
  */
 package org.apache.seata.rm.datasource.undo;
 
+import java.io.ByteArrayInputStream;
 import java.sql.Array;
 import java.sql.Connection;
 import java.sql.JDBCType;
@@ -33,7 +34,6 @@ import javax.sql.rowset.serial.SerialDatalink;
 
 import com.alibaba.fastjson.JSON;
 
-import org.apache.seata.common.util.BlobUtils;
 import org.apache.seata.common.util.IOUtil;
 import org.apache.seata.common.util.StringUtils;
 import org.apache.seata.config.ConfigurationFactory;
@@ -169,7 +169,14 @@ public abstract class AbstractUndoExecutor {
             if (type == JDBCType.BLOB.getVendorTypeNumber()) {
                 SerialBlob serialBlob = (SerialBlob) value;
                 if (serialBlob != null) {
-                    undoPST.setBytes(undoIndex, 
BlobUtils.blob2Bytes(serialBlob));
+                    undoPST.setObject(undoIndex, serialBlob.getBinaryStream());
+                } else {
+                    undoPST.setObject(undoIndex, null);
+                }
+            } else if (type == JDBCType.LONGVARBINARY.getVendorTypeNumber()) {
+                if (value != null) {
+                    byte[] bytes = (byte[]) value;
+                    undoPST.setObject(undoIndex, new 
ByteArrayInputStream(bytes));
                 } else {
                     undoPST.setObject(undoIndex, null);
                 }
diff --git 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoLogManager.java
 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoLogManager.java
index 69fc501a72..d9ba6bb3f3 100644
--- 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoLogManager.java
+++ 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/AbstractUndoLogManager.java
@@ -22,6 +22,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.SQLIntegrityConstraintViolationException;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -30,6 +31,7 @@ import java.util.Set;
 import org.apache.seata.common.Constants;
 import org.apache.seata.common.util.CollectionUtils;
 import org.apache.seata.common.util.SizeUtil;
+import org.apache.seata.common.util.StringUtils;
 import org.apache.seata.config.ConfigurationFactory;
 import org.apache.seata.core.compressor.CompressorFactory;
 import org.apache.seata.core.compressor.CompressorType;
@@ -37,6 +39,7 @@ import org.apache.seata.core.constants.ClientTableColumnsName;
 import org.apache.seata.core.constants.ConfigurationKeys;
 import org.apache.seata.core.exception.BranchTransactionException;
 import org.apache.seata.core.exception.TransactionException;
+import org.apache.seata.core.rpc.processor.Pair;
 import org.apache.seata.rm.datasource.ConnectionContext;
 import org.apache.seata.rm.datasource.ConnectionProxy;
 import org.apache.seata.rm.datasource.DataSourceProxy;
@@ -80,22 +83,25 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
     }
 
     protected static final String UNDO_LOG_TABLE_NAME = 
ConfigurationFactory.getInstance().getConfig(
-        ConfigurationKeys.TRANSACTION_UNDO_LOG_TABLE, 
DEFAULT_TRANSACTION_UNDO_LOG_TABLE);
+            ConfigurationKeys.TRANSACTION_UNDO_LOG_TABLE, 
DEFAULT_TRANSACTION_UNDO_LOG_TABLE);
 
     private static final String CHECK_UNDO_LOG_TABLE_EXIST_SQL = "SELECT 1 
FROM " + UNDO_LOG_TABLE_NAME + " LIMIT 1";
 
     protected static final String SELECT_UNDO_LOG_SQL = "SELECT * FROM " + 
UNDO_LOG_TABLE_NAME + " WHERE "
-        + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + " = ? AND " + 
ClientTableColumnsName.UNDO_LOG_XID
-        + " = ? FOR UPDATE";
+            + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + " = ? AND " + 
ClientTableColumnsName.UNDO_LOG_XID
+            + " = ? FOR UPDATE";
 
     protected static final String DELETE_UNDO_LOG_SQL = "DELETE FROM " + 
UNDO_LOG_TABLE_NAME + " WHERE "
-        + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + " = ? AND " + 
ClientTableColumnsName.UNDO_LOG_XID + " = ?";
+            + ClientTableColumnsName.UNDO_LOG_BRANCH_XID + " = ? AND " + 
ClientTableColumnsName.UNDO_LOG_XID + " = ?";
+
+    protected static final String DELETE_SUB_UNDO_LOG_SQL = "DELETE FROM " + 
UNDO_LOG_TABLE_NAME + " WHERE "
+            + ClientTableColumnsName.UNDO_LOG_CONTEXT + " = ? AND " + 
ClientTableColumnsName.UNDO_LOG_XID + " = ?";
 
     protected static final boolean ROLLBACK_INFO_COMPRESS_ENABLE = 
ConfigurationFactory.getInstance().getBoolean(
-        ConfigurationKeys.CLIENT_UNDO_COMPRESS_ENABLE, 
DEFAULT_CLIENT_UNDO_COMPRESS_ENABLE);
+            ConfigurationKeys.CLIENT_UNDO_COMPRESS_ENABLE, 
DEFAULT_CLIENT_UNDO_COMPRESS_ENABLE);
 
     protected static final CompressorType ROLLBACK_INFO_COMPRESS_TYPE = 
CompressorType.getByName(ConfigurationFactory.getInstance().getConfig(
-        ConfigurationKeys.CLIENT_UNDO_COMPRESS_TYPE, 
DEFAULT_CLIENT_UNDO_COMPRESS_TYPE));
+            ConfigurationKeys.CLIENT_UNDO_COMPRESS_TYPE, 
DEFAULT_CLIENT_UNDO_COMPRESS_TYPE));
 
     protected static final long ROLLBACK_INFO_COMPRESS_THRESHOLD = 
SizeUtil.size2Long(ConfigurationFactory.getInstance().getConfig(
             ConfigurationKeys.CLIENT_UNDO_COMPRESS_THRESHOLD, 
DEFAULT_CLIENT_UNDO_COMPRESS_THRESHOLD));
@@ -124,10 +130,15 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
      */
     @Override
     public void deleteUndoLog(String xid, long branchId, Connection conn) 
throws SQLException {
-        try (PreparedStatement deletePST = 
conn.prepareStatement(DELETE_UNDO_LOG_SQL)) {
+        try (PreparedStatement deletePST = 
conn.prepareStatement(DELETE_UNDO_LOG_SQL);
+             PreparedStatement deleteSubPST = 
conn.prepareStatement(DELETE_SUB_UNDO_LOG_SQL)) {
             deletePST.setLong(1, branchId);
             deletePST.setString(2, xid);
             deletePST.executeUpdate();
+
+            deleteSubPST.setString(1, UndoLogConstants.BRANCH_ID_KEY + 
CollectionUtils.KV_SPLIT + branchId);
+            deleteSubPST.setString(2, xid);
+            deleteSubPST.executeUpdate();
         } catch (Exception e) {
             if (!(e instanceof SQLException)) {
                 e = new SQLException(e);
@@ -139,9 +150,9 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
     /**
      * batch Delete undo log.
      *
-     * @param xids xid
+     * @param xids      xid
      * @param branchIds branch Id
-     * @param conn connection
+     * @param conn      connection
      */
     @Override
     public void batchDeleteUndoLog(Set<String> xids, Set<Long> branchIds, 
Connection conn) throws SQLException {
@@ -151,18 +162,28 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
         int xidSize = xids.size();
         int branchIdSize = branchIds.size();
         String batchDeleteSql = toBatchDeleteUndoLogSql(xidSize, branchIdSize);
-        try (PreparedStatement deletePST = 
conn.prepareStatement(batchDeleteSql)) {
+        String batchDeleteSubSql = toBatchDeleteSubUndoLogSql(xidSize, 
branchIdSize);
+        try (PreparedStatement deletePST = 
conn.prepareStatement(batchDeleteSql);
+             PreparedStatement deleteSubPST = 
conn.prepareStatement(batchDeleteSubSql)) {
             int paramsIndex = 1;
             for (Long branchId : branchIds) {
-                deletePST.setLong(paramsIndex++, branchId);
+                deletePST.setLong(paramsIndex, branchId);
+                deleteSubPST.setString(paramsIndex, 
UndoLogConstants.BRANCH_ID_KEY + CollectionUtils.KV_SPLIT + branchId);
+                paramsIndex++;
             }
             for (String xid : xids) {
-                deletePST.setString(paramsIndex++, xid);
+                deletePST.setString(paramsIndex, xid);
+                deleteSubPST.setString(paramsIndex, xid);
+                paramsIndex++;
             }
             int deleteRows = deletePST.executeUpdate();
             if (LOGGER.isDebugEnabled()) {
                 LOGGER.debug("batch delete undo log size {}", deleteRows);
             }
+            int deleteSubRows = deleteSubPST.executeUpdate();
+            if (LOGGER.isDebugEnabled()) {
+                LOGGER.debug("batch delete sub undo log size {}", 
deleteSubRows);
+            }
         } catch (Exception e) {
             if (!(e instanceof SQLException)) {
                 e = new SQLException(e);
@@ -174,7 +195,17 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
     protected static String toBatchDeleteUndoLogSql(int xidSize, int 
branchIdSize) {
         StringBuilder sqlBuilder = new StringBuilder(64);
         sqlBuilder.append("DELETE FROM ").append(UNDO_LOG_TABLE_NAME).append(" 
WHERE  ").append(
-            ClientTableColumnsName.UNDO_LOG_BRANCH_XID).append(" IN ");
+                ClientTableColumnsName.UNDO_LOG_BRANCH_XID).append(" IN ");
+        appendInParam(branchIdSize, sqlBuilder);
+        sqlBuilder.append(" AND 
").append(ClientTableColumnsName.UNDO_LOG_XID).append(" IN ");
+        appendInParam(xidSize, sqlBuilder);
+        return sqlBuilder.toString();
+    }
+
+    protected static String toBatchDeleteSubUndoLogSql(int xidSize, int 
branchIdSize) {
+        StringBuilder sqlBuilder = new StringBuilder(64);
+        sqlBuilder.append("DELETE FROM ").append(UNDO_LOG_TABLE_NAME).append(" 
WHERE  ").append(
+                ClientTableColumnsName.UNDO_LOG_CONTEXT).append(" IN ");
         appendInParam(branchIdSize, sqlBuilder);
         sqlBuilder.append(" AND 
").append(ClientTableColumnsName.UNDO_LOG_XID).append(" IN ");
         appendInParam(xidSize, sqlBuilder);
@@ -196,10 +227,19 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
         return state == State.Normal.getValue();
     }
 
-    protected String buildContext(String serializer, CompressorType 
compressorType) {
+    protected String buildContext(String serializer, CompressorType 
compressorType, String... others) {
         Map<String, String> map = new HashMap<>(2, 1.01f);
         map.put(UndoLogConstants.SERIALIZER_KEY, serializer);
         map.put(UndoLogConstants.COMPRESSOR_TYPE_KEY, compressorType.name());
+        if (others != null && others.length > 0 && others.length % 2 == 0) {
+            for (int i = 0; i < others.length; ) {
+                String key = others[i++];
+                String value = others[i++];
+                if (key != null) {
+                    map.put(key, value == null ? "" : value);
+                }
+            }
+        }
         return CollectionUtils.encodeMap(map);
     }
 
@@ -240,8 +280,15 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
             compressorType = ROLLBACK_INFO_COMPRESS_TYPE;
             undoLogContent = 
CompressorFactory.getCompressor(compressorType.getCode()).compress(undoLogContent);
         }
-
-        insertUndoLogWithNormal(xid, branchId, buildContext(parser.getName(), 
compressorType), undoLogContent, cp.getTargetConnection());
+        String maxAllowedPacket = getMaxAllowedPacket(cp.getDataSourceProxy());
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("resourceId: [{}] max_allowed_packet:[{}]", 
cp.getDataSourceProxy().getResourceId(), maxAllowedPacket);
+        }
+        String rollbackCtx = buildContext(
+                parser.getName(), compressorType,
+                UndoLogConstants.MAX_ALLOWED_PACKET, maxAllowedPacket
+        );
+        insertUndoLogWithNormal(xid, branchId, rollbackCtx, undoLogContent, 
cp.getTargetConnection());
     }
 
     /**
@@ -298,7 +345,7 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
 
                     String serializer = context == null ? null : 
context.get(UndoLogConstants.SERIALIZER_KEY);
                     UndoLogParser parser = serializer == null ? 
UndoLogParserFactory.getInstance()
-                        : UndoLogParserFactory.getInstance(serializer);
+                            : UndoLogParserFactory.getInstance(serializer);
                     BranchUndoLog branchUndoLog = parser.decode(rollbackInfo);
 
                     try {
@@ -310,10 +357,10 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
                         }
                         for (SQLUndoLog sqlUndoLog : sqlUndoLogs) {
                             TableMeta tableMeta = 
TableMetaCacheFactory.getTableMetaCache(dataSourceProxy.getDbType()).getTableMeta(
-                                conn, sqlUndoLog.getTableName(), 
dataSourceProxy.getResourceId());
+                                    conn, sqlUndoLog.getTableName(), 
dataSourceProxy.getResourceId());
                             sqlUndoLog.setTableMeta(tableMeta);
                             AbstractUndoExecutor undoExecutor = 
UndoExecutorFactory.getUndoExecutor(
-                                dataSourceProxy.getDbType(), sqlUndoLog);
+                                    dataSourceProxy.getDbType(), sqlUndoLog);
                             undoExecutor.executeOn(connectionProxy);
                         }
                     } finally {
@@ -336,14 +383,14 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
                     conn.commit();
                     if (LOGGER.isInfoEnabled()) {
                         LOGGER.info("xid {} branch {}, undo_log deleted with 
{}", xid, branchId,
-                            State.GlobalFinished.name());
+                                State.GlobalFinished.name());
                     }
                 } else {
                     insertUndoLogWithGlobalFinished(xid, branchId, 
UndoLogParserFactory.getInstance(), conn);
                     conn.commit();
                     if (LOGGER.isInfoEnabled()) {
                         LOGGER.info("xid {} branch {}, undo_log added with 
{}", xid, branchId,
-                            State.GlobalFinished.name());
+                                State.GlobalFinished.name());
                     }
                 }
 
@@ -363,13 +410,13 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
                 }
                 if (e instanceof SQLUndoDirtyException) {
                     throw new 
BranchTransactionException(BranchRollbackFailed_Unretriable, String.format(
-                        "Branch session rollback failed because of dirty undo 
log, please delete the relevant undolog after manually calibrating the data. 
xid = %s branchId = %s",
-                        xid, branchId), e);
+                            "Branch session rollback failed because of dirty 
undo log, please delete the relevant undolog after manually calibrating the 
data. xid = %s branchId = %s",
+                            xid, branchId), e);
                 }
                 throw new 
BranchTransactionException(BranchRollbackFailed_Retriable,
-                    String.format("Branch session rollback failed and try 
again later xid = %s branchId = %s %s", xid,
-                        branchId, e.getMessage()),
-                    e);
+                        String.format("Branch session rollback failed and try 
again later xid = %s branchId = %s %s", xid,
+                                branchId, e.getMessage()),
+                        e);
 
             } finally {
                 try {
@@ -426,6 +473,16 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
     protected abstract void insertUndoLogWithNormal(String xid, long branchId, 
String rollbackCtx, byte[] undoLogContent,
                                                     Connection conn) throws 
SQLException;
 
+    /**
+     * get database server max allowed packet
+     *
+     * @param dataSourceProxy the datasource proxy
+     * @return the max allowed packet value
+     */
+    protected String getMaxAllowedPacket(DataSourceProxy dataSourceProxy) {
+        return StringUtils.EMPTY;
+    }
+
     /**
      * RollbackInfo to bytes
      *
@@ -433,18 +490,52 @@ public abstract class AbstractUndoLogManager implements 
UndoLogManager {
      * @return rollback info
      * @throws SQLException SQLException
      */
-    protected byte[] getRollbackInfo(ResultSet rs) throws SQLException  {
+    protected byte[] getRollbackInfo(ResultSet rs) throws SQLException {
         byte[] rollbackInfo = 
rs.getBytes(ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO);
 
         String rollbackInfoContext = 
rs.getString(ClientTableColumnsName.UNDO_LOG_CONTEXT);
         Map<String, String> context = 
CollectionUtils.decodeMap(rollbackInfoContext);
+        String subIds = context.get(UndoLogConstants.SUB_ID_KEY);
+        if (StringUtils.isNotBlank(subIds)) {
+            Pair<Integer, List<byte[]>> pair = 
getSubRollbackInfo(rs.getStatement().getConnection(),
+                    subIds, 
rs.getLong(ClientTableColumnsName.UNDO_LOG_BRANCH_XID),
+                    rs.getString(ClientTableColumnsName.UNDO_LOG_XID));
+            int total = pair.getFirst();
+            byte[] rollbackInfoTotal = new byte[rollbackInfo.length + total];
+            System.arraycopy(rollbackInfo, 0, rollbackInfoTotal, 0, 
rollbackInfo.length);
+            int pos = rollbackInfo.length;
+            for (byte[] bytes : pair.getSecond()) {
+                System.arraycopy(bytes, 0, rollbackInfoTotal, pos, 
bytes.length);
+                pos += bytes.length;
+            }
+            rollbackInfo = rollbackInfoTotal;
+        }
         CompressorType compressorType = 
CompressorType.getByName(context.getOrDefault(UndoLogConstants.COMPRESSOR_TYPE_KEY,
                 CompressorType.NONE.name()));
         return 
CompressorFactory.getCompressor(compressorType.getCode()).decompress(rollbackInfo);
     }
 
+    @Override
+    public int deleteUndoLogByLogCreated(Date logCreated, int limitRows, 
Connection conn) throws SQLException {
+        return 0;
+    }
+
+    /**
+     * get sub rollback info
+     * @param conn the database connection
+     * @param subIds sub rollback info id
+     * @param branchId the branch id
+     * @param xid the xid
+     * @return first: sub rollback info size, seconds: rollback info bytes
+     * @throws SQLException SQLException
+     */
+    protected Pair<Integer, List<byte[]>> getSubRollbackInfo(Connection conn, 
String subIds, Long branchId, String xid) throws SQLException {
+        throw new UnsupportedOperationException("getSubRollbackInfo is not 
implemented");
+    }
+
     /**
      * if the undoLogContent is big enough to be compress
+     *
      * @param undoLogContent undoLogContent
      * @return boolean
      */
diff --git 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/UndoLogConstants.java
 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/UndoLogConstants.java
index e26fe99c34..1ae34682d6 100644
--- 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/UndoLogConstants.java
+++ 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/UndoLogConstants.java
@@ -30,4 +30,12 @@ public interface UndoLogConstants {
         .getConfig(ConfigurationKeys.TRANSACTION_UNDO_LOG_SERIALIZATION, 
DEFAULT_TRANSACTION_UNDO_LOG_SERIALIZATION);
 
     String COMPRESSOR_TYPE_KEY = "compressorType";
+
+    String SUB_ID_KEY = "subId";
+
+    String BRANCH_ID_KEY = "branchId";
+
+    String SUB_SPLIT_KEY = ",";
+
+    String MAX_ALLOWED_PACKET = "map";
 }
diff --git 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java
 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java
index 8e32511059..bc299af723 100644
--- 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java
+++ 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/mysql/MySQLUndoLogManager.java
@@ -16,15 +16,28 @@
  */
 package org.apache.seata.rm.datasource.undo.mysql;
 
+import java.io.ByteArrayInputStream;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
+import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.seata.common.loader.LoadLevel;
+import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.IOUtil;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.core.compressor.CompressorType;
 import org.apache.seata.core.constants.ClientTableColumnsName;
+import org.apache.seata.core.rpc.processor.Pair;
+import org.apache.seata.rm.datasource.DataSourceProxy;
 import org.apache.seata.rm.datasource.undo.AbstractUndoLogManager;
+import org.apache.seata.rm.datasource.undo.UndoLogConstants;
 import org.apache.seata.rm.datasource.undo.UndoLogParser;
 import org.apache.seata.sqlparser.util.JdbcConstants;
 import org.slf4j.Logger;
@@ -67,10 +80,89 @@ public class MySQLUndoLogManager extends 
AbstractUndoLogManager {
         }
     }
 
+    @Override
+    protected Pair<Integer, List<byte[]>> getSubRollbackInfo(Connection conn, 
String subIds, Long branchId, String xid) throws SQLException {
+        if (StringUtils.isBlank(subIds)) {
+            return new Pair<>(0, Collections.emptyList());
+        }
+        StringBuilder sqlBuilder = new StringBuilder(64);
+        sqlBuilder.append("SELECT * FROM 
").append(UNDO_LOG_TABLE_NAME).append(" WHERE ")
+                .append(ClientTableColumnsName.UNDO_LOG_BRANCH_XID).append(" 
IN ");
+        String[] split = StringUtils.split(subIds, 
UndoLogConstants.SUB_SPLIT_KEY);
+        appendInParam(split.length, sqlBuilder);
+        sqlBuilder.append(" AND 
").append(ClientTableColumnsName.UNDO_LOG_XID).append(" = ?");
+
+        PreparedStatement ps = null;
+        ResultSet rs = null;
+        try {
+            ps = conn.prepareStatement(sqlBuilder.toString());
+            int idx = 1;
+            for (String subId : split) {
+                ps.setLong(idx++, Long.parseLong(subId));
+            }
+            ps.setString(idx, xid);
+            rs = ps.executeQuery();
+            int total = 0;
+            List<byte[]> bytesList = new ArrayList<>();
+            while (rs.next()) {
+                byte[] bytes = 
rs.getBytes(ClientTableColumnsName.UNDO_LOG_ROLLBACK_INFO);
+                bytesList.add(bytes);
+                total += bytes.length;
+            }
+            return new Pair<>(total, bytesList);
+        } catch (Exception e) {
+            if (!(e instanceof SQLException)) {
+                e = new SQLException(e);
+            }
+            throw (SQLException) e;
+        } finally {
+            IOUtil.close(rs, ps);
+        }
+    }
+
+    @Override
+    protected String getMaxAllowedPacket(DataSourceProxy dataSourceProxy) {
+        return dataSourceProxy.getVariableValue("max_allowed_packet");
+    }
+
     @Override
     protected void insertUndoLogWithNormal(String xid, long branchId, String 
rollbackCtx, byte[] undoLogContent,
                                            Connection conn) throws 
SQLException {
-        insertUndoLog(xid, branchId, rollbackCtx, undoLogContent, 
State.Normal, conn);
+        Map<String, String> decodeMap = CollectionUtils.decodeMap(rollbackCtx);
+        String maxAllowedPacketStr = 
decodeMap.get(UndoLogConstants.MAX_ALLOWED_PACKET);
+        long maxAllowedPacket = 1024 * 1024; // 1MB -> mysql5.6 default value
+        if (StringUtils.isNotBlank(maxAllowedPacketStr)) {
+            maxAllowedPacket = Long.parseLong(maxAllowedPacketStr);
+        }
+
+        int limit = (int) (maxAllowedPacket * 0.8);
+        if (logger.isDebugEnabled()) {
+            logger.debug("undo log length : [{}] limit : [{}]", 
undoLogContent.length, limit);
+        }
+        if (undoLogContent.length > limit) {
+            final String subRollbackCtx = UndoLogConstants.BRANCH_ID_KEY + 
CollectionUtils.KV_SPLIT + branchId;
+            int pos = 0;
+            byte[] first = new byte[limit];
+            StringBuilder subIdBuilder = new StringBuilder(36);
+            while (pos < undoLogContent.length) {
+                if (pos == 0) {
+                    System.arraycopy(undoLogContent, pos, first, 0, 
first.length);
+                    pos += first.length;
+                } else {
+                    byte[] bytes = new byte[Math.min(undoLogContent.length - 
pos, limit)];
+                    System.arraycopy(undoLogContent, pos, bytes, 0, 
bytes.length);
+                    long subId = UUIDGenerator.generateUUID();
+                    
subIdBuilder.append(subId).append(UndoLogConstants.SUB_SPLIT_KEY);
+                    insertUndoLog(xid, subId, subRollbackCtx, bytes, 
State.Normal, conn);
+                    pos += bytes.length;
+                }
+            }
+            decodeMap.put(UndoLogConstants.SUB_ID_KEY, 
subIdBuilder.toString());
+            String finalRollbackCtx = CollectionUtils.encodeMap(decodeMap);
+            insertUndoLog(xid, branchId, finalRollbackCtx, first, 
State.Normal, conn);
+        } else {
+            insertUndoLog(xid, branchId, rollbackCtx, undoLogContent, 
State.Normal, conn);
+        }
     }
 
     @Override
@@ -84,7 +176,7 @@ public class MySQLUndoLogManager extends 
AbstractUndoLogManager {
             pst.setLong(1, branchId);
             pst.setString(2, xid);
             pst.setString(3, rollbackCtx);
-            pst.setBytes(4, undoLogContent);
+            pst.setObject(4, new ByteArrayInputStream(undoLogContent));
             pst.setInt(5, state.getValue());
             pst.executeUpdate();
         } catch (Exception e) {
diff --git 
a/rm-datasource/src/test/java/org/apache/seata/rm/datasource/undo/UndoLogManagerTest.java
 
b/rm-datasource/src/test/java/org/apache/seata/rm/datasource/undo/UndoLogManagerTest.java
index f54fe929ae..d2ced9a32b 100644
--- 
a/rm-datasource/src/test/java/org/apache/seata/rm/datasource/undo/UndoLogManagerTest.java
+++ 
b/rm-datasource/src/test/java/org/apache/seata/rm/datasource/undo/UndoLogManagerTest.java
@@ -30,6 +30,7 @@ import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -47,11 +48,11 @@ public class UndoLogManagerTest {
     @Test
     public void testBatchDeleteUndoLog() throws Exception {
         Set<String> xids = new HashSet<>();
-        for (int i = 0;i < APPEND_IN_SIZE;i++){
+        for (int i = 0; i < APPEND_IN_SIZE; i++) {
             xids.add(UUID.randomUUID().toString());
         }
         Set<Long> branchIds = new HashSet<>();
-        for (int i = 0;i < APPEND_IN_SIZE;i++){
+        for (int i = 0; i < APPEND_IN_SIZE; i++) {
             branchIds.add((long) i);
         }
         Connection connection = mock(Connection.class);
@@ -60,18 +61,19 @@ public class UndoLogManagerTest {
         
UndoLogManagerFactory.getUndoLogManager(JdbcConstants.MYSQL).batchDeleteUndoLog(xids,
 branchIds, connection);
 
         //verify
-        for (int i = 1;i <= APPEND_IN_SIZE;i++){
-            verify(preparedStatement).setLong(eq(i),anyLong());
+        for (int i = 1; i <= APPEND_IN_SIZE; i++) {
+            verify(preparedStatement).setLong(eq(i), anyLong());
+            verify(preparedStatement).setString(eq(i), anyString());
         }
-        for (int i = APPEND_IN_SIZE + 1;i <= APPEND_IN_SIZE * 2;i++){
-            verify(preparedStatement).setString(eq(i),anyString());
+        for (int i = APPEND_IN_SIZE + 1; i <= APPEND_IN_SIZE * 2; i++) {
+            verify(preparedStatement, times(2)).setString(eq(i), anyString());
         }
-        verify(preparedStatement).executeUpdate();
+        verify(preparedStatement, times(2)).executeUpdate();
     }
 
     @Test
     public void testToBatchDeleteUndoLogSql() {
-        String expectedSqlString="DELETE FROM undo_log WHERE  branch_id IN " +
+        String expectedSqlString = "DELETE FROM undo_log WHERE  branch_id IN " 
+
                 THE_APPEND_IN_SIZE_PARAM_STRING +
                 " AND xid IN " +
                 THE_DOUBLE_APPEND_IN_SIZE_PARAM_STRING;
diff --git a/server/src/main/java/org/apache/seata/server/Server.java 
b/server/src/main/java/org/apache/seata/server/Server.java
index 40616914c5..bdf3bd5307 100644
--- a/server/src/main/java/org/apache/seata/server/Server.java
+++ b/server/src/main/java/org/apache/seata/server/Server.java
@@ -29,6 +29,7 @@ import org.apache.seata.common.metadata.namingserver.Instance;
 import org.apache.seata.common.thread.NamedThreadFactory;
 import org.apache.seata.common.util.NetUtil;
 import org.apache.seata.common.util.StringUtils;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.config.ConfigurationFactory;
 import org.apache.seata.core.rpc.netty.NettyRemotingServer;
 import org.apache.seata.core.rpc.netty.NettyServerConfig;
diff --git 
a/server/src/main/java/org/apache/seata/server/session/GlobalSession.java 
b/server/src/main/java/org/apache/seata/server/session/GlobalSession.java
index 941c5babfe..0da8f0ff6e 100644
--- a/server/src/main/java/org/apache/seata/server/session/GlobalSession.java
+++ b/server/src/main/java/org/apache/seata/server/session/GlobalSession.java
@@ -41,7 +41,7 @@ import org.apache.seata.core.model.BranchStatus;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.core.model.LockStatus;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.cluster.raft.RaftServerManager;
 import org.apache.seata.server.lock.LockerManagerFactory;
 import org.apache.seata.server.store.SessionStorable;
diff --git 
a/server/src/main/java/org/apache/seata/server/session/SessionHelper.java 
b/server/src/main/java/org/apache/seata/server/session/SessionHelper.java
index 2ac9d52305..7ffab5f14b 100644
--- a/server/src/main/java/org/apache/seata/server/session/SessionHelper.java
+++ b/server/src/main/java/org/apache/seata/server/session/SessionHelper.java
@@ -37,7 +37,7 @@ import org.apache.seata.core.model.BranchStatus;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.metrics.IdConstants;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.cluster.raft.context.SeataClusterContext;
 import org.apache.seata.server.coordinator.DefaultCoordinator;
 import org.apache.seata.server.metrics.MetricsPublisher;
diff --git a/server/src/test/java/ServerTest.java 
b/server/src/test/java/ServerTest.java
index 57cc1de310..32624e3ae1 100644
--- a/server/src/test/java/ServerTest.java
+++ b/server/src/test/java/ServerTest.java
@@ -17,7 +17,7 @@
 import org.apache.seata.common.XID;
 import org.apache.seata.common.util.NetUtil;
 import org.apache.seata.core.rpc.netty.NettyRemotingServer;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.coordinator.DefaultCoordinator;
 
 import java.util.concurrent.LinkedBlockingQueue;
diff --git 
a/server/src/test/java/org/apache/seata/server/UUIDGeneratorOverflowTest.java 
b/server/src/test/java/org/apache/seata/server/UUIDGeneratorOverflowTest.java
index ca40dfc78d..65ca16f388 100644
--- 
a/server/src/test/java/org/apache/seata/server/UUIDGeneratorOverflowTest.java
+++ 
b/server/src/test/java/org/apache/seata/server/UUIDGeneratorOverflowTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.seata.server;
 
+import org.apache.seata.common.util.UUIDGenerator;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git 
a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java 
b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
index ec7af1b326..6d6889c804 100644
--- a/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
+++ b/server/src/test/java/org/apache/seata/server/lock/LockManagerTest.java
@@ -30,7 +30,7 @@ import org.apache.seata.common.util.CollectionUtils;
 import org.apache.seata.common.result.PageResult;
 import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchType;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.console.param.GlobalLockParam;
 import org.apache.seata.server.console.service.GlobalLockService;
 import org.apache.seata.server.console.vo.GlobalLockVO;
diff --git 
a/server/src/test/java/org/apache/seata/server/lock/file/FileLockManagerImplTest.java
 
b/server/src/test/java/org/apache/seata/server/lock/file/FileLockManagerImplTest.java
index 9cfaded45a..21e1f9042b 100644
--- 
a/server/src/test/java/org/apache/seata/server/lock/file/FileLockManagerImplTest.java
+++ 
b/server/src/test/java/org/apache/seata/server/lock/file/FileLockManagerImplTest.java
@@ -20,7 +20,7 @@ import java.util.stream.Stream;
 
 import org.apache.seata.common.XID;
 import org.apache.seata.core.model.BranchType;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.lock.LockManager;
 import org.apache.seata.server.session.BranchSession;
 import org.junit.jupiter.api.Assertions;
diff --git 
a/server/src/test/java/org/apache/seata/server/session/BranchSessionTest.java 
b/server/src/test/java/org/apache/seata/server/session/BranchSessionTest.java
index aeb0c9c66e..87bb61f2d0 100644
--- 
a/server/src/test/java/org/apache/seata/server/session/BranchSessionTest.java
+++ 
b/server/src/test/java/org/apache/seata/server/session/BranchSessionTest.java
@@ -19,7 +19,7 @@ package org.apache.seata.server.session;
 import java.util.stream.Stream;
 
 import org.apache.seata.core.model.BranchType;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.params.ParameterizedTest;
diff --git 
a/server/src/test/java/org/apache/seata/server/session/db/DataBaseSessionManagerTest.java
 
b/server/src/test/java/org/apache/seata/server/session/db/DataBaseSessionManagerTest.java
index 718dcfeb65..f4b45f4346 100644
--- 
a/server/src/test/java/org/apache/seata/server/session/db/DataBaseSessionManagerTest.java
+++ 
b/server/src/test/java/org/apache/seata/server/session/db/DataBaseSessionManagerTest.java
@@ -29,7 +29,7 @@ import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchStatus;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.session.BranchSession;
 import org.apache.seata.server.session.GlobalSession;
 import org.apache.seata.server.session.SessionCondition;
diff --git 
a/server/src/test/java/org/apache/seata/server/session/redis/RedisSessionManagerTest.java
 
b/server/src/test/java/org/apache/seata/server/session/redis/RedisSessionManagerTest.java
index 7a75f60a77..e343114e99 100644
--- 
a/server/src/test/java/org/apache/seata/server/session/redis/RedisSessionManagerTest.java
+++ 
b/server/src/test/java/org/apache/seata/server/session/redis/RedisSessionManagerTest.java
@@ -27,7 +27,7 @@ import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchStatus;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.core.model.GlobalStatus;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.session.BranchSession;
 import org.apache.seata.server.session.GlobalSession;
 import org.apache.seata.server.session.SessionCondition;
diff --git 
a/server/src/test/java/org/apache/seata/server/store/file/FileTransactionStoreManagerTest.java
 
b/server/src/test/java/org/apache/seata/server/store/file/FileTransactionStoreManagerTest.java
index a2747354d6..d9c8ec0831 100644
--- 
a/server/src/test/java/org/apache/seata/server/store/file/FileTransactionStoreManagerTest.java
+++ 
b/server/src/test/java/org/apache/seata/server/store/file/FileTransactionStoreManagerTest.java
@@ -33,7 +33,7 @@ import org.mockito.Mockito;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import org.apache.seata.common.util.BufferUtils;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.session.BranchSession;
 import org.apache.seata.server.session.GlobalSession;
 import org.apache.seata.server.session.SessionManager;
diff --git 
a/test-mock-server/src/main/java/org/apache/seata/mockserver/MockCoordinator.java
 
b/test-mock-server/src/main/java/org/apache/seata/mockserver/MockCoordinator.java
index eba654fa48..ac5d17fea8 100644
--- 
a/test-mock-server/src/main/java/org/apache/seata/mockserver/MockCoordinator.java
+++ 
b/test-mock-server/src/main/java/org/apache/seata/mockserver/MockCoordinator.java
@@ -53,7 +53,7 @@ import org.apache.seata.core.rpc.RpcContext;
 import org.apache.seata.core.rpc.TransactionMessageHandler;
 import org.apache.seata.mockserver.call.CallRm;
 import org.apache.seata.server.AbstractTCInboundHandler;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.session.BranchSession;
 import org.apache.seata.server.session.GlobalSession;
 import org.slf4j.Logger;
diff --git 
a/test-mock-server/src/main/java/org/apache/seata/mockserver/MockServer.java 
b/test-mock-server/src/main/java/org/apache/seata/mockserver/MockServer.java
index 5f57b66985..535d6d3dd0 100644
--- a/test-mock-server/src/main/java/org/apache/seata/mockserver/MockServer.java
+++ b/test-mock-server/src/main/java/org/apache/seata/mockserver/MockServer.java
@@ -25,7 +25,7 @@ import org.apache.seata.common.XID;
 import org.apache.seata.common.thread.NamedThreadFactory;
 import org.apache.seata.common.util.NetUtil;
 import org.apache.seata.server.ParameterParser;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.SpringApplication;
diff --git 
a/test/src/test/java/org/apache/seata/at/mysql/MysqlUpdateJoinTest.java 
b/test/src/test/java/org/apache/seata/at/mysql/MysqlUpdateJoinTest.java
index ecd8bc336d..65686885a7 100644
--- a/test/src/test/java/org/apache/seata/at/mysql/MysqlUpdateJoinTest.java
+++ b/test/src/test/java/org/apache/seata/at/mysql/MysqlUpdateJoinTest.java
@@ -33,7 +33,7 @@ import org.apache.seata.rm.datasource.DataSourceManager;
 import org.apache.seata.rm.datasource.DataSourceProxy;
 import org.apache.seata.rm.datasource.sql.struct.TableMetaCacheFactory;
 import org.apache.seata.rm.datasource.sql.struct.TableRecords;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.sqlparser.struct.TableMeta;
 import org.apache.seata.sqlparser.util.JdbcConstants;
 import org.junit.jupiter.api.Assertions;
diff --git 
a/test/src/test/java/org/apache/seata/core/rpc/netty/TmNettyClientTest.java 
b/test/src/test/java/org/apache/seata/core/rpc/netty/TmNettyClientTest.java
index 9701862d7b..ae723d2380 100644
--- a/test/src/test/java/org/apache/seata/core/rpc/netty/TmNettyClientTest.java
+++ b/test/src/test/java/org/apache/seata/core/rpc/netty/TmNettyClientTest.java
@@ -26,7 +26,7 @@ import 
org.apache.seata.core.protocol.transaction.BranchRegisterRequest;
 import org.apache.seata.core.protocol.transaction.BranchRegisterResponse;
 import org.apache.seata.mockserver.MockServer;
 import org.apache.seata.saga.engine.db.AbstractServerTest;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.coordinator.DefaultCoordinator;
 import org.apache.seata.server.session.SessionHolder;
 import org.junit.jupiter.api.AfterAll;
diff --git 
a/test/src/test/java/org/apache/seata/saga/engine/db/AbstractServerTest.java 
b/test/src/test/java/org/apache/seata/saga/engine/db/AbstractServerTest.java
index 670261d741..75b4ce873b 100644
--- a/test/src/test/java/org/apache/seata/saga/engine/db/AbstractServerTest.java
+++ b/test/src/test/java/org/apache/seata/saga/engine/db/AbstractServerTest.java
@@ -27,7 +27,7 @@ import org.apache.seata.core.rpc.ShutdownHook;
 import org.apache.seata.core.rpc.netty.NettyRemotingServer;
 import org.apache.seata.core.rpc.netty.NettyServerConfig;
 import org.apache.seata.server.ParameterParser;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.server.coordinator.DefaultCoordinator;
 import org.apache.seata.server.metrics.MetricsManager;
 import org.apache.seata.server.session.SessionHolder;
diff --git 
a/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
 
b/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
index 4a92fe39c5..1b0c68845d 100644
--- 
a/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
+++ 
b/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
@@ -20,7 +20,7 @@ import org.apache.seata.core.exception.TransactionException;
 import org.apache.seata.core.model.BranchStatus;
 import org.apache.seata.core.model.GlobalStatus;
 import org.apache.seata.saga.engine.tm.SagaTransactionalTemplate;
-import org.apache.seata.server.UUIDGenerator;
+import org.apache.seata.common.util.UUIDGenerator;
 import org.apache.seata.tm.api.GlobalTransaction;
 import org.apache.seata.tm.api.TransactionalExecutor.ExecutionException;
 import org.apache.seata.tm.api.transaction.TransactionInfo;


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@seata.apache.org
For additional commands, e-mail: notifications-h...@seata.apache.org

Reply via email to