Closed mrsuibian closed 1 week ago
请提供sql和表结构 Please provide SQL and table structure
以及对应的undolog中的rollback info 也一并提交上来 And the rollback info in the corresponding undolog is also committed together.
以及对应的undolog中的rollback info 也一并提交上来 And the rollback info in the corresponding undolog is also committed together.
这个错误是一直重试的时候偶尔发生的,我调试的时候发现出现失败的原因并不是这个异常导致的,如果表里面定义了联合主键,回滚会报错,在undolog里面联合主键里的另外一个字段会保存两次。
例如定义了联合主键id和packing_unit_id:
{
"@class": "io.seata.rm.datasource.undo.BranchUndoLog",
"xid": "10.200.99.22:8091:8503330764517695498",
"branchId": 8503330764517695499,
"sqlUndoLogs": [
"java.util.ArrayList",
[
{
"@class": "io.seata.rm.datasource.undo.SQLUndoLog",
"sqlType": "INSERT",
"tableName": "goods",
"beforeImage": {
"@class": "io.seata.rm.datasource.sql.struct.TableRecords$EmptyTableRecords",
"tableName": "goods",
"rows": [
"java.util.ArrayList",
[]
]
},
"afterImage": {
"@class": "io.seata.rm.datasource.sql.struct.TableRecords",
"tableName": "goods",
"rows": [
"java.util.ArrayList",
[
{
"@class": "io.seata.rm.datasource.sql.struct.Row",
"fields": [
"java.util.ArrayList",
[
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "packing_unit_id",
"keyType": "PRIMARY_KEY",
"type": 4,
"value": 14
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "id",
"keyType": "PRIMARY_KEY",
"type": 4,
"value": 5257
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "name",
"keyType": "NULL",
"type": 12,
"value": "ä¸ é¹ ä¹ é¾ ä¸ è ¶555ML"
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "code",
"keyType": "NULL",
"type": 12,
"value": "012022"
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "international_bar_code",
"keyType": "NULL",
"type": 12,
"value": "6934502302147"
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "specification",
"keyType": "NULL",
"type": 12,
"value": "1*1"
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "packing_unit_id",
"keyType": "PRIMARY_KEY",
"type": 4,
"value": 14
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "goods_brand_id",
"keyType": "NULL",
"type": 4,
"value": 25
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "main_goods_supplier_id",
"keyType": "NULL",
"type": 4,
"value": 65
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "goods_category_id",
"keyType": "NULL",
"type": 4,
"value": 81
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "Purchase_price",
"keyType": "NULL",
"type": 3,
"value": [
"java.math.BigDecimal",
1.04
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "retail_price",
"keyType": "NULL",
"type": 3,
"value": [
"java.math.BigDecimal",
3.0
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "pricing_gross_margin",
"keyType": "NULL",
"type": 3,
"value": [
"java.math.BigDecimal",
65.28
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "purchase_factor",
"keyType": "NULL",
"type": 4,
"value": 1
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "delivery_factor",
"keyType": "NULL",
"type": 4,
"value": 1
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "wholesale_factor",
"keyType": "NULL",
"type": 4,
"value": 1
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "min_inventory",
"keyType": "NULL",
"type": 4,
"value": 0
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "max_inventory",
"keyType": "NULL",
"type": 4,
"value": 9999
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "input_tax_rate",
"keyType": "NULL",
"type": 3,
"value": [
"java.math.BigDecimal",
13.0
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "output_tax_rate",
"keyType": "NULL",
"type": 3,
"value": [
"java.math.BigDecimal",
13.0
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "min_inventory_warn",
"keyType": "NULL",
"type": 3,
"value": [
"java.math.BigDecimal",
0.25
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "max_inventory_warn",
"keyType": "NULL",
"type": 3,
"value": [
"java.math.BigDecimal",
2.0
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "dormant_inventory",
"keyType": "NULL",
"type": 4,
"value": 15
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "status",
"keyType": "NULL",
"type": 12,
"value": "20"
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "remarks",
"keyType": "NULL",
"type": 12,
"value": ""
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "cid",
"keyType": "NULL",
"type": 4,
"value": 1
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "cdt",
"keyType": "NULL",
"type": 93,
"value": [
"java.time.LocalDateTime",
1718971249000
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "uid",
"keyType": "NULL",
"type": 4,
"value": 1
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "udt",
"keyType": "NULL",
"type": 93,
"value": [
"java.time.LocalDateTime",
1718971249000
]
}
]
]
}
]
]
}
}
]
]
}里面的packing_unit_id会有两个,在io.seata.rm.datasource.undo.AbstractUndoExecutor下318行报错
请尝试使用2.0版本进行验证 Please try to verify with version 2.0
请尝试使用2.0版本进行验证 Please try to verify with version 2.0
2.0版本因为有另外一个bug,所有没用
https://github.com/apache/incubator-seata/pull/6077
该问题需要等待2.1版本的发布,其已经在2.1版本中进行修复
This issue needs to wait for the release of version 2.1, which has been fixed in version 2.1
[error,61] - [stacktrace]branchRollback failed. branchType:[AT], xid:[10.19.36.125:8092:5323786182041662173], branchId:[5323786182041662175], resourceId:[jdbc:mysql://10.19.36.124:3306/gtsy_bsi], applicationData:[{"skipCheckLock":true}]. reason:[Branch session rollback failed and try again later xid = 10.19.36.125:8092:5323786182041662173 branchId = 5323786182041662175 Index: 1, Size: 1] io.seata.core.exception.BranchTransactionException: Branch session rollback failed and try again later xid = 10.19.36.125:8092:5323786182041662173 branchId = 5323786182041662175 Index: 1, Size: 1 at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:370) at io.seata.rm.datasource.DataSourceManager.branchRollback(DataSourceManager.java:122) at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:125) at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:67) at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:63) at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:131) at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:63) at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:68) at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35) at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:150) at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.handleBranchRollback(RmBranchRollbackProcessor.java:63) at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.process(RmBranchRollbackProcessor.java:58) at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:281) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.ArrayList.rangeCheck(ArrayList.java:657) at java.util.ArrayList.get(ArrayList.java:433) at io.seata.rm.datasource.undo.AbstractUndoExecutor.queryCurrentRecords(AbstractUndoExecutor.java:318) at io.seata.rm.datasource.undo.AbstractUndoExecutor.dataValidationAndGoOn(AbstractUndoExecutor.java:250) at io.seata.rm.datasource.undo.AbstractUndoExecutor.executeOn(AbstractUndoExecutor.java:118) at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:317) ... 16 common frames omitted