Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

生成lock_table表row_key不完整导致插入失败 #6552

Closed
1 task
kaisa-zzh opened this issue May 16, 2024 · 0 comments
Closed
1 task

生成lock_table表row_key不完整导致插入失败 #6552

kaisa-zzh opened this issue May 16, 2024 · 0 comments

Comments

@kaisa-zzh
Copy link

kaisa-zzh commented May 16, 2024

  • I have searched the issues of this repository and believe that this is not a duplicate.

Ⅰ. Issue Description

RM注册成功,seata-seaver在写入lock_table表时,生成的row_key截取了部分长度的id,导致lock_table表数据写入失败

Ⅱ. Describe what happened

If there is an exception, please attach the exception trace:

seata服务端日志:
2024-05-16 16:08:14.946 ERROR --- [ServerHandlerThread_1_39_500] [io.seata.core.exception.AbstractExceptionHandler] [exceptionHandleTemplate] [10.200.7.25:18093:18535623205631387]: Catch TransactionException while do RPC, request: BranchRegisterRequest{xid='10.200.7.25:18093:18535623205631387', branchType=AT, resourceId='jdbc:mysql://10.200.8.1:3306/yxy1', lockKey='bpm_instance:449798968234475524;undo_log:577288', applicationData='{"autoCommit":false,"skipCheckLock":true}'}
==>
io.seata.core.exception.TransactionException: branch register request failed. xid=10.200.7.25:18093:18535623205631387, msg=Duplicate entry 'jdbc:mysql://10.200.8.1:3306/yxy1^^^bpm_instance^^^4497989682344' for key 'PRIMARY'
        at io.seata.server.AbstractTCInboundHandler$4.execute(AbstractTCInboundHandler.java:187) ~[classes!/:1.8.0]
        at io.seata.server.AbstractTCInboundHandler$4.execute(AbstractTCInboundHandler.java:179) ~[classes!/:1.8.0]
        at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:131) ~[seata-core-1.8.0.jar:1.8.0]
        at io.seata.server.AbstractTCInboundHandler.handle(AbstractTCInboundHandler.java:179) [classes!/:1.8.0]
        at io.seata.core.protocol.transaction.BranchRegisterRequest.handle(BranchRegisterRequest.java:136) [seata-core-1.8.0.jar:1.8.0]
        at io.seata.server.coordinator.DefaultCoordinator.onRequest(DefaultCoordinator.java:523) [classes!/:1.8.0]
        at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.handleRequestsByMergedWarpMessage(ServerOnRequestProcessor.java:288) [seata-core-1.8.0.jar:1.8.0]
        at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.onRequestMessage(ServerOnRequestProcessor.java:182) [seata-core-1.8.0.jar:1.8.0]
        at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.process(ServerOnRequestProcessor.java:122) [seata-core-1.8.0.jar:1.8.0]
        at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:281) [seata-core-1.8.0.jar:1.8.0]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_261]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_261]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.76.Final.jar:4.1.76.Final]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_261]
Caused by: io.seata.common.exception.StoreException: Duplicate entry 'jdbc:mysql://10.200.8.1:3306/yxy1^^^bpm_instance^^^4497989682344' for key 'PRIMARY'
        at io.seata.server.storage.db.lock.LockStoreDataBaseDAO.acquireLock(LockStoreDataBaseDAO.java:199) ~[classes!/:1.8.0]
        at io.seata.server.storage.db.lock.DataBaseLocker.acquireLock(DataBaseLocker.java:64) ~[classes!/:1.8.0]
        at io.seata.server.lock.AbstractLockManager.acquireLock(AbstractLockManager.java:65) ~[classes!/:1.8.0]
        at io.seata.server.session.BranchSession.lock(BranchSession.java:287) ~[classes!/:1.8.0]
        at io.seata.server.transaction.at.ATCore.branchSessionLock(ATCore.java:77) ~[classes!/:1.8.0]
        at io.seata.server.coordinator.AbstractCore.lambda$branchRegister$0(AbstractCore.java:83) ~[classes!/:1.8.0]
        at io.seata.server.storage.db.session.DataBaseSessionManager.lockAndExecute(DataBaseSessionManager.java:191) ~[classes!/:1.8.0]
        at io.seata.server.session.SessionHolder.lockAndExecute(SessionHolder.java:367) ~[classes!/:1.8.0]
        at io.seata.server.coordinator.AbstractCore.branchRegister(AbstractCore.java:77) ~[classes!/:1.8.0]
        at io.seata.server.coordinator.DefaultCore.branchRegister(DefaultCore.java:103) ~[classes!/:1.8.0]
        at io.seata.server.coordinator.DefaultCoordinator.doBranchRegister(DefaultCoordinator.java:294) [classes!/:1.8.0]
        at io.seata.server.AbstractTCInboundHandler$4.execute(AbstractTCInboundHandler.java:184) ~[classes!/:1.8.0]
        ... 13 common frames omitted
Caused by: java.sql.BatchUpdateException: Duplicate entry 'jdbc:mysql://10.200.8.1:3306/yxy1^^^bpm_instance^^^4497989682344' for key 'PRIMARY'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_261]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_261]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_261]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_261]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1162) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.PreparedStatement.executeBatchedInserts(PreparedStatement.java:1587) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.PreparedStatement.executeBatchInternal(PreparedStatement.java:1253) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:970) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeBatch(DruidPooledPreparedStatement.java:565) ~[druid-1.2.7.jar:1.2.7]
        at io.seata.server.storage.db.lock.LockStoreDataBaseDAO.doAcquireLocks(LockStoreDataBaseDAO.java:371) ~[classes!/:1.8.0]
        at io.seata.server.storage.db.lock.LockStoreDataBaseDAO.acquireLock(LockStoreDataBaseDAO.java:187) ~[classes!/:1.8.0]
        ... 24 common frames omitted
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'jdbc:mysql://10.200.8.1:3306/yxy1^^^bpm_instance^^^4497989682344' for key 'PRIMARY'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_261]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_261]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_261]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_261]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2490) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        at com.mysql.jdbc.PreparedStatement.executeBatchedInserts(PreparedStatement.java:1548) ~[mysql-connector-java-5.1.42.jar:5.1.42]
        ... 29 common frames omitted
<==

Ⅲ. Describe what you expected to happen

生成的row_key应为:jdbc:mysql://10.200.8.1:3306/yxy1^^^bpm_instance^^^449798968234475524
实际生成的row_key为:jdbc:mysql://10.200.8.1:3306/yxy1^^^bpm_instance^^^4497989682344

Ⅳ. How to reproduce it (as minimally and precisely as possible)

  1. seata集群,版本1.8,nacos作为注册和配置中心
  2. 集成activity
  3. 分支事务注册成功后,写lock_table失败

Minimal yet complete reproducer code (or URL to code):

Ⅴ. Anything else we need to know?

Ⅵ. Environment:

  • JDK version(e.g. java -version):1.8
  • Seata client/server version: 1.8
  • Database version:5.7
  • OS(e.g. uname -a):linux
  • Others:
@kaisa-zzh kaisa-zzh closed this as not planned Won't fix, can't repro, duplicate, stale May 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant