-
Notifications
You must be signed in to change notification settings - Fork 8.9k
Description
Check Ahead
-
I have searched the issues of this repository and believe that this is not a duplicate.
-
I am willing to try to fix this bug myself.
Ⅰ. Issue Description
seata 2.1 client, seata 2.3 server
exception occurs when globaltransaction rollback:
2025-09-25 13:30:32.141 | �[34m INFO 29608�[0;39m | �[1;33mrpcDispatch_RMROLE_1_19_32 [TID: N/A]�[0;39m �[1;32morg.apache.seata.rm.AbstractRMHandler �[0;39m | Branch Rollbacked result: PhaseTwo_RollbackFailed_Retryable
2025-09-25 13:30:33.137 | �[34m INFO 29608�[0;39m | �[1;33mrpcDispatch_RMROLE_1_20_32 [TID: N/A]�[0;39m �[1;32mo.a.s.c.r.p.c.RmBranchRollbackProcessor �[0;39m | rm handle branch rollback process:BranchRollbackRequest{xid='xxxx:3261279418629289337', branchId=3261279418629289338, branchType=AT, resourceId='jdbc:postgresql://xxxxx', applicationData='null'}
2025-09-25 13:30:33.137 | �[34m INFO 29608�[0;39m | �[1;33mrpcDispatch_RMROLE_1_20_32 [TID: N/A]�[0;39m �[1;32morg.apache.seata.rm.AbstractRMHandler �[0;39m | Branch Rollbacking: xxxx:3261279418629289337 3261279418629289338 jdbc:postgresql://xxxx:5432/db_sys_dev
2025-09-25 13:30:33.139 | �[1;31mERROR 29608�[0;39m | �[1;33mrpcDispatch_RMROLE_1_20_32 [TID: N/A]�[0;39m �[1;32mo.a.s.r.d.u.parser.JacksonUndoLogParser �[0;39m | json decode exception, Cannot deserialize value of type java.lang.Long
from Array value (token JsonToken.START_ARRAY
)
at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION
disabled); line: 1, column: 1159] (through reference chain: org.apache.seata.rm.datasource.undo.BranchUndoLog["sqlUndoLogs"]->java.util.ArrayList[0]->org.apache.seata.rm.datasource.undo.SQLUndoLog["beforeImage"]->org.apache.seata.rm.datasource.sql.struct.TableRecords["rows"]->java.util.ArrayList[0]->org.apache.seata.rm.datasource.sql.struct.Row["fields"]->java.util.ArrayList[2]->org.apache.seata.rm.datasource.sql.struct.Field["value"]->org.apache.seata.rm.datasource.sql.serial.SerialArray["elements"]->java.lang.Object[][0])
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.lang.Long
from Array value (token JsonToken.START_ARRAY
)
at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION
disabled); line: 1, column: 1159] (through reference chain: org.apache.seata.rm.datasource.undo.BranchUndoLog["sqlUndoLogs"]->java.util.ArrayList[0]->org.apache.seata.rm.datasource.undo.SQLUndoLog["beforeImage"]->org.apache.seata.rm.datasource.sql.struct.TableRecords["rows"]->java.util.ArrayList[0]->org.apache.seata.rm.datasource.sql.struct.Row["fields"]->java.util.ArrayList[2]->org.apache.seata.rm.datasource.sql.struct.Field["value"]->org.apache.seata.rm.datasource.sql.serial.SerialArray["elements"]->java.lang.Object[][0])
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1767)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1541)
undolog rollback info:
{"@Class":"org.apache.seata.rm.datasource.undo.BranchUndoLog","xid":"192.168.100.81:8091:3261279418629289337","branchId":3261279418629289338,"sqlUndoLogs":["java.util.ArrayList",[{"@Class":"org.apache.seata.rm.datasource.undo.SQLUndoLog","sqlType":"UPDATE","tableName":"system_users","beforeImage":{"@Class":"org.apache.seata.rm.datasource.sql.struct.TableRecords","tableName":"system_users","rows":["java.util.ArrayList",[{"@Class":"org.apache.seata.rm.datasource.sql.struct.Row","fields":["java.util.ArrayList",[{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"available_site_ids","keyType":"NULL","type":2003,"value":{"@Class":"org.apache.seata.rm.datasource.sql.serial.SerialArray","elements":["[Ljava.lang.Long;",[]],"baseType":-5,"baseTypeName":"int8","array":["[Ljava.lang.Long;",[]],"resultSet":null}},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"avatar","keyType":"NULL","type":12,"value":""},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"dept_ids","keyType":"NULL","type":2003,"value":{"@Class":"org.apache.seata.rm.datasource.sql.serial.SerialArray","elements":["[Ljava.lang.Long;",[["java.lang.Long",10]]],"baseType":-5,"baseTypeName":"int8","array":["[Ljava.lang.Long;",[10]],"resultSet":null}},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"email","keyType":"NULL","type":12,"value":""},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"id","keyType":"PRIMARY_KEY","type":-5,"value":["java.lang.Long",1956302537468411905]},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"mobile","keyType":"NULL","type":12,"value":""},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"nickname","keyType":"NULL","type":12,"value":"keithxxxxxxxxxxxx"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"post_ids","keyType":"NULL","type":12,"value":"[1]"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"purpose","keyType":"NULL","type":5,"value":1},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"remark","keyType":"NULL","type":12,"value":"123"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"sex","keyType":"NULL","type":5,"value":0},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"status","keyType":"NULL","type":5,"value":0},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"update_time","keyType":"NULL","type":93,"value":["java.sql.Timestamp",1758766045000]},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"updater","keyType":"NULL","type":12,"value":"1"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"user_type_id","keyType":"NULL","type":4,"value":2},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"username","keyType":"NULL","type":12,"value":"keithTestadmin"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"valid_time","keyType":"NULL","type":93,"value":["java.sql.Timestamp",1755253777649]}]]}]]},"afterImage":{"@Class":"org.apache.seata.rm.datasource.sql.struct.TableRecords","tableName":"system_users","rows":["java.util.ArrayList",[{"@Class":"org.apache.seata.rm.datasource.sql.struct.Row","fields":["java.util.ArrayList",[{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"available_site_ids","keyType":"NULL","type":2003,"value":{"@Class":"org.apache.seata.rm.datasource.sql.serial.SerialArray","elements":["[Ljava.lang.Long;",[]],"baseType":-5,"baseTypeName":"int8","array":["[Ljava.lang.Long;",[]],"resultSet":null}},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"avatar","keyType":"NULL","type":12,"value":""},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"dept_ids","keyType":"NULL","type":2003,"value":{"@Class":"org.apache.seata.rm.datasource.sql.serial.SerialArray","elements":["[Ljava.lang.Long;",[["java.lang.Long",10]]],"baseType":-5,"baseTypeName":"int8","array":["[Ljava.lang.Long;",[10]],"resultSet":null}},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"email","keyType":"NULL","type":12,"value":""},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"id","keyType":"PRIMARY_KEY","type":-5,"value":["java.lang.Long",1956302537468411905]},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"mobile","keyType":"NULL","type":12,"value":""},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"nickname","keyType":"NULL","type":12,"value":"keithxxxxxxxxxxxx"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"post_ids","keyType":"NULL","type":12,"value":"[1]"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"purpose","keyType":"NULL","type":5,"value":1},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"remark","keyType":"NULL","type":12,"value":"1234"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"sex","keyType":"NULL","type":5,"value":0},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"status","keyType":"NULL","type":5,"value":0},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"update_time","keyType":"NULL","type":93,"value":["java.sql.Timestamp",1758778122000]},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"updater","keyType":"NULL","type":12,"value":"1"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"user_type_id","keyType":"NULL","type":4,"value":2},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"username","keyType":"NULL","type":12,"value":"keithTestadmin"},{"@Class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"valid_time","keyType":"NULL","type":93,"value":["java.sql.Timestamp",1755253777649]}]]}]]}}]]}
Ⅱ. Describe what happened
globaltransaction service failed, and seata rollback exception
Ⅲ. Describe what you expected to happen
seata rollback success
Ⅳ. How to reproduce it (as minimally and precisely as possible)
postgres table with array type field, and when service failed trigger seata rollback, seata will throw json deser exception
CREATE TABLE public.system_users (
id bigserial NOT NULL,
username varchar(60) NOT NULL,
dept_ids _int8 NULL, <<-----this is an array type field
CONSTRAINT pk_system_users PRIMARY KEY (id)
);
Ⅴ. Anything else we need to know?
No response
Ⅵ. Environment
jdk 21
seata client 2.1
seata server 2.3
db: postgres 15
os: windows10