1.应用端启动日志
下面只贴出关键信息:
<!-- 1 -->
main [traceId= ] [SpanId= ] i.s.s.b.a.SeataAutoConfiguration Automatically configure Seata
...
<!-- 2 -->
main [traceId= ] [SpanId= ] i.s.c.r.n.NettyClientChannelManager will connect to 127.0.0.1:8091
main [traceId= ] [SpanId= ] i.s.c.r.n.NettyPoolableFactory NettyPool create channel to transactionRole:TMROLE,address:127.0.0.1:8091,msg:< RegisterTMRequest{applicationId='application-a', transactionServiceGroup='default_tx_group'} >
<!-- 3 -->
main [traceId= ] [SpanId= ] i.s.c.r.n.TmNettyRemotingClient register TM success. client version:1.5.2, server version:1.5.2,channel:[id: 0xb7472379, L:/127.0.0.1:64235 - R:/127.0.0.1:8091]
main [traceId= ] [SpanId= ] i.s.c.r.n.NettyPoolableFactory register success, cost 153 ms, version:1.5.2,role:TMROLE,channel:[id: 0xb7472379, L:/127.0.0.1:64235 - R:/127.0.0.1:8091]
main [traceId= ] [SpanId= ] i.s.s.a.GlobalTransactionScanner Transaction Manager Client is initialized. applicationId[application-a] txServiceGroup[default_tx_group]
...
<!-- 4 -->
main [traceId= ] [SpanId= ] i.s.r.d.xa.ResourceManagerXA ResourceManagerXA init ...
...
main [traceId= ] [SpanId= ] i.s.s.a.GlobalTransactionScanner Resource Manager is initialized. applicationId[application-a] txServiceGroup[default_tx_group]
main [traceId= ] [SpanId= ] i.s.s.a.GlobalTransactionScanner Global Transaction Clients are initialized.
...
<!-- 5 -->
main [traceId= ] [SpanId= ] i.s.s.a.GlobalTransactionScanner Bean[com.onepiece.picture.endpoint.seatademo.SeataEndpoint$$EnhancerBySpringCGLIB$$ce85d5b1] with name [seataEndpoint] would use interceptor [io.seata.spring.annotation.GlobalTransactionalInterceptor]
...
<!-- 6 -->
main [traceId= ] [SpanId= ] i.s.c.r.n.RmNettyRemotingClient RM will register :jdbc:mysql://mysql-server.8btc-vpc.com:3306/xxx_xxx
main [traceId= ] [SpanId= ] i.s.c.r.n.NettyPoolableFactory NettyPool create channel to transactionRole:RMROLE,address:127.0.0.1:8091,msg:< RegisterRMRequest{resourceIds='jdbc:mysql://mysql-server.8btc-vpc.com:3306/xxx_xxx', applicationId='application-a', transactionServiceGroup='default_tx_group'} >
main [traceId= ] [SpanId= ] i.s.c.r.n.RmNettyRemotingClient register RM success. client version:1.5.2, server version:1.5.2,channel:[id: 0xefec1cc9, L:/127.0.0.1:64319 - R:/127.0.0.1:8091]
main [traceId= ] [SpanId= ] i.s.c.r.n.NettyPoolableFactory register success, cost 61 ms, version:1.5.2,role:RMROLE,channel:[id: 0xefec1cc9, L:/127.0.0.1:64319 - R:/127.0.0.1:8091]
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
- SeataAutoConfiguration执行
- 连接上seata-server
- register TM success
- ResourceManagerXA init
- 发现需要开启分布式事务的位置
- RM register
2.seata-server 伴随应用启动日志
<!-- 1 -->
INFO --- [ttyServerNIOWorker_1_3_16] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='application-a', transactionServiceGroup='default_tx_group'},channel:[id: 0x24e19073, L:/127.0.0.1:8091 - R:/127.0.0.1:64235],client version:1.5.2
<!-- 2 -->
INFO --- [rverHandlerThread_1_2_500] i.s.c.r.processor.server.RegRmProcessor : RM register success,message:RegisterRMRequest{resourceIds='jdbc:mysql://mysql-server.8btc-vpc.com:3306/xxx_xxx', applicationId='application-a', transactionServiceGroup='default_tx_group'},channel:[id: 0x55b46694, L:/127.0.0.1:8091 - R:/127.0.0.1:64319],client version:1.5.2
- TM register success
- RM register success
3. Begin new global transaction 相关信息
应用端日志
[traceId= 30011d9c86e05b82] [SpanId= 30011d9c86e05b82] i.s.t.a.DefaultGlobalTransaction Begin new global transaction [10.8.0.14:8091:6764743828138625962]
服务端日志
INFO --- [rverHandlerThread_1_3_500] i.s.s.coordinator.DefaultCoordinator : Begin new global transaction applicationId: application-a,transactionServiceGroup: default_tx_group, transactionName: test(),timeout:3600000,xid:10.8.0.14:8091:6764743828138625962
分布式事务默认超时时间为60s
seata 数据库
global_table
xid transaction_id status application_id transaction_service_group transaction_name timeout begin_time application_data gmt_create gmt_modified
10.8.0.14:8091:6764743828138625962 6764743828138625962 1 application-a default_tx_group test() 3600000 1670759846823 2022-12-11 11:57:26 2022-12-11 11:57:26
- status为1表示全局事务开始
- application_id表示开启分布式事务的应用标识
- transaction_name:事务名。这里是被@GlobalTransactional注释的方法。
- timeout:事务超时时间
branch_table
branch_id xid transaction_id resource_group_id resource_id branch_type status client_id application_data gmt_create gmt_modified
6764743828138625982 10.8.0.14:8091:6764743828138625962 6764743828138625962 jdbc:mysql://mysql-server.8btc-vpc.com:3306/application-b AT 0 application-b:127.0.0.1:49491 2022-12-11 12:53:51.043356 2022-12-11 12:53:51.043356
- resource_id:mysql url
- client_id:客户端id,name+ip+端口。
lock_table
row_key xid transaction_id branch_id resource_id table_name pk status gmt_create gmt_modified
jdbc:mysql://mysql-server.8btc-vpc.com:3306/application-b^^^sa_artwork_series_ratio^^^0 10.8.0.14:8091:6764743828138625962 6764743828138625962 6764743828138625982 jdbc:mysql://mysql-server.8btc-vpc.com:3306/application-b sa_artwork_series_ratio 0 0 2022-12-11 12:53:51 2022-12-11 12:53:51
- row_key:行key。这里为mysql url+表名+主键
undo_log
branch_id xid context rollback_info log_status log_created log_modified
6764743828138625982 10.8.0.14:8091:6764743828138625962 serializer=jackson&compressorType=NONE {"@class":"io.seata.rm.datasource.undo.BranchUndoLog","xid":"10.8.0.14:8091:6764743828138626373","branchId":6764743828138626382,"sqlUndoLogs":["java.util.ArrayList",[{"@class":"io.seata.rm.datasource.undo.SQLUndoLog","sqlType":"DELETE","tableName":"sa_artwork_series_ratio","beforeImage":{"@class":"io.seata.rm.datasource.sql.struct.TableRecords","tableName":"sa_artwork_series_ratio","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":"utime","keyType":"NULL","type":93,"value":null},{"@class":"io.seata.rm.datasource.sql.struct.Field","name":"ctime","keyType":"NULL","type":93,"value":["java.sql.Timestamp",1670576248000]},{"@class":"io.seata.rm.datasource.sql.struct.Field","name":"artwork_series_id","keyType":"PRIMARY_KEY","type":-5,"value":["java.lang.Long",0]},{"@class":"io.seata.rm.datasource.sql.struct.Field","name":"ratio","keyType":"NULL","type":12,"value":"test"}]]}]]},"afterImage":{"@class":"io.seata.rm.datasource.sql.struct.TableRecords$EmptyTableRecords","tableName":"sa_artwork_series_ratio","rows":["java.util.ArrayList",[]]}}]]} 0 2022-12-11 21:11:48.502465 2022-12-11 21:11:48.502465
- context:内容,包含了一些技术信息。这里为
serializer=jackson&compressorType=NONE - rollback_info:回滚信息
{
"@class": "io.seata.rm.datasource.undo.BranchUndoLog",
"xid": "10.8.0.14:8091:6764743828138626373",
"branchId": 6764743828138626382,
"sqlUndoLogs": [
"java.util.ArrayList",
[
{
"@class": "io.seata.rm.datasource.undo.SQLUndoLog",
"sqlType": "DELETE",
"tableName": "sa_artwork_series_ratio",
"beforeImage": {
"@class": "io.seata.rm.datasource.sql.struct.TableRecords",
"tableName": "sa_artwork_series_ratio",
"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": "utime",
"keyType": "NULL",
"type": 93,
"value": null
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "ctime",
"keyType": "NULL",
"type": 93,
"value": [
"java.sql.Timestamp",
1670576248000
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "artwork_series_id",
"keyType": "PRIMARY_KEY",
"type": -5,
"value": [
"java.lang.Long",
0
]
},
{
"@class": "io.seata.rm.datasource.sql.struct.Field",
"name": "ratio",
"keyType": "NULL",
"type": 12,
"value": "test"
}
]
]
}
]
]
},
"afterImage": {
"@class": "io.seata.rm.datasource.sql.struct.TableRecords$EmptyTableRecords",
"tableName": "sa_artwork_series_ratio",
"rows": [
"java.util.ArrayList",
[]
]
}
}
]
]
}
里面有xid、branchId、sqlType(这里为DELETE)、tableName(这里为sa_artwork_series_ratio)、beforeImage(记录了提交前的数据状态,只记录会变化的值)、afterImage(记录了提交后的数据状态,只记录会变化的值),利用这些值生成回滚sql。
回滚日志
INFO rpcDispatch_RMROLE_1_1_16 [traceId= ] [SpanId= ] i.s.c.r.p.c.RmBranchRollbackProcessor rm handle branch rollback process:xid=10.8.0.14:8091:6764743828138625962,branchId=6764743828138625982,branchType=AT,resourceId=jdbc:mysql://mysql-server.8btc-vpc.com:3306/application-b,applicationData=null
INFO rpcDispatch_RMROLE_1_1_16 [traceId= ] [SpanId= ] io.seata.rm.AbstractRMHandler Branch Rollbacking: 10.8.0.14:8091:6764743828138625962 6764743828138625982 jdbc:mysql://mysql-server.8btc-vpc.com:3306/application-b
INFO rpcDispatch_RMROLE_1_1_16 [traceId= ] [SpanId= ] i.s.r.d.u.AbstractUndoLogManager xid 10.8.0.14:8091:6764743828138625962 branch 6764743828138625982, undo_log deleted with GlobalFinished
running 2022-12-11 21:00:17.511 INFO rpcDispatch_RMROLE_1_1_16 [traceId= ] [SpanId= ] io.seata.rm.AbstractRMHandler Branch Rollbacked result: PhaseTwo_Rollbacked
回滚删除undo_log
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情