You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by "0x-infinity (via GitHub)" <gi...@apache.org> on 2025/12/05 16:55:55 UTC

[I] Missing Codec for Message Type 111 (TYPE_RM_DELETE_UNDOLOG) [incubator-seata-go]

0x-infinity opened a new issue, #1016:
URL: https://github.com/apache/incubator-seata-go/issues/1016

   ### 讨论详情
   
   ## Problem Description
   
   When the seata-go client runs for approximately 2-3 minutes, it encounters a codec decode error. The TC server (Seata 1.8.0+) sends a message with type code 111 (`TYPE_RM_DELETE_UNDOLOG`), but the seata-go client does not have a registered codec to decode this message type.
   
   ## Error Logs
   
   ```
   2025-12-06 00:49:58.019 	INFO	getty/listener.go:58                         	Open new getty session 
   2025-12-06 00:49:58.019 	INFO	getty/getty_remoting.go:82                   	send async message: {message.RpcMessage{ID:2, Type:0x2, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.RegisterTMRequest{AbstractIdentifyRequest:message.AbstractIdentifyRequest{Version:"1.1.0", ApplicationId:"applicationName", TransactionServiceGroup:"default_tx_group", ExtraData:[]uint8(nil)}}}}
   2025-12-06 00:49:58.021 	INFO	client/client_on_response_processor.go:48    	the rm client received  clientOnResponse msg message.RpcMessage{ID:2, Type:0x1, Codec:0x1, Compressor:0x0, HeadMap:map[string]string{}, Body:message.RegisterTMResponse{AbstractIdentifyResponse:message.AbstractIdentifyResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x0, Msg:""}, Version:"1.8.1-SNAPSHOT", ExtraData:[]uint8(nil), Identified:true}}} from tc server.
   2025-12-06 00:49:58.120 	INFO	getty/getty_remoting.go:82                   	send async message: {message.RpcMessage{ID:1, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.RegisterRMRequest{AbstractIdentifyRequest:message.AbstractIdentifyRequest{Version:"1.5.2", ApplicationId:"applicationName", TransactionServiceGroup:"default_tx_group", ExtraData:[]uint8(nil)}, ResourceIds:"TestService"}}}
   2025-12-06 00:49:58.122 	INFO	client/client_on_response_processor.go:48    	the rm client received  clientOnResponse msg message.RpcMessage{ID:1, Type:0x1, Codec:0x1, Compressor:0x0, HeadMap:map[string]string{}, Body:message.RegisterRMResponse{AbstractIdentifyResponse:message.AbstractIdentifyResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x0, Msg:""}, Version:"1.8.1-SNAPSHOT", ExtraData:[]uint8(nil), Identified:true}}} from tc server.
   2025-12-06 00:49:58.122 	INFO	rm/rm_remoting.go:169                        	register RM success. response: message.RegisterRMResponse{AbstractIdentifyResponse:message.AbstractIdentifyResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x0, Msg:""}, Version:"1.8.1-SNAPSHOT", ExtraData:[]uint8(nil), Identified:true}}
   2025-12-06 00:49:58.122 	INFO	getty/getty_remoting.go:82                   	send async message: {message.RpcMessage{ID:3, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.GlobalBeginRequest{Timeout:60000000000, TransactionName:"test-global-tx"}}}
   2025-12-06 00:49:58.123 	INFO	client/client_on_response_processor.go:48    	the rm client received  clientOnResponse msg message.RpcMessage{ID:3, Type:0x1, Codec:0x1, Compressor:0x0, HeadMap:map[string]string{}, Body:message.GlobalBeginResponse{AbstractTransactionResponse:message.AbstractTransactionResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x1, Msg:""}, TransactionErrorCode:0}, Xid:"172.23.0.2:8091:3063170758788677637", ExtraData:[]uint8{}}} from tc server.
   2025-12-06 00:49:58.123 	INFO	tm/global_transaction.go:66                  	GlobalBeginRequest success, res {{{1 } 0} 172.23.0.2:8091:3063170758788677637 []}
   2025-12-06 00:49:58.123 	INFO	rocketmq/test.go:51                          	Starting global transaction
   2025-12-06 00:49:58.123 	INFO	getty/getty_remoting.go:82                   	send async message: {message.RpcMessage{ID:4, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.BranchRegisterRequest{Xid:"172.23.0.2:8091:3063170758788677637", BranchType:1, ResourceId:"TestService", LockKey:"", ApplicationData:[]uint8{0x7b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3a, 0x31, 0x37, 0x36, 0x34, 0x39, 0x35, 0x33, 0x33, 0x39, 0x38, 0x31, 0x32, 0x33, 0x2c, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x22, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x6f, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31, 0x31, 0x33, 0x22, 0x2c, 0x22, 0x
 73, 0x79, 0x73, 0x3a, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x3a, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x2c, 0x22, 0x73, 0x79, 0x73, 0x3a, 0x3a, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x22, 0x3a, 0x22, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x79, 0x73, 0x3a, 0x3a, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x22, 0x3a, 0x22, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x22, 0x7d, 0x7d}}}}
   2025-12-06 00:49:58.124 	INFO	client/client_on_response_processor.go:48    	the rm client received  clientOnResponse msg message.RpcMessage{ID:4, Type:0x1, Codec:0x1, Compressor:0x0, HeadMap:map[string]string{}, Body:message.BranchRegisterResponse{AbstractTransactionResponse:message.AbstractTransactionResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x1, Msg:""}, TransactionErrorCode:0}, BranchId:3063170758788677638}} from tc server.
   2025-12-06 00:49:58.125 	INFO	rocketmq/test.go:17                          	TestService Prepare
   2025-12-06 00:49:58.125 	INFO	getty/getty_remoting.go:82                   	send async message: {message.RpcMessage{ID:5, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.GlobalCommitRequest{AbstractGlobalEndRequest:message.AbstractGlobalEndRequest{Xid:"172.23.0.2:8091:3063170758788677637", ExtraData:[]uint8(nil)}}}}
   2025-12-06 00:49:58.125 	INFO	client/rm_branch_commit_processor.go:38      	the rm client received  rmBranchCommit msg message.RpcMessage{ID:5, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string{}, Body:message.BranchCommitRequest{AbstractBranchEndRequest:message.AbstractBranchEndRequest{MessageTypeAware:message.MessageTypeAware(nil), Xid:"172.23.0.2:8091:3063170758788677637", BranchId:3063170758788677638, BranchType:1, ResourceId:"TestService", ApplicationData:[]uint8{0x7b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3a, 0x31, 0x37, 0x36, 0x34, 0x39, 0x35, 0x33, 0x33, 0x39, 0x38, 0x31, 0x32, 0x33, 0x2c, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x22, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x6f, 0x73, 0x74, 0x2d,
  0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31, 0x31, 0x33, 0x22, 0x2c, 0x22, 0x73, 0x79, 0x73, 0x3a, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x3a, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x2c, 0x22, 0x73, 0x79, 0x73, 0x3a, 0x3a, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x22, 0x3a, 0x22, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x22, 0x2c, 0x22, 0x73, 0x79, 0x73, 0x3a, 0x3a, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x22, 0x3a, 0x22, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x22, 0x7d, 0x7d}}}} from tc server.
   2025-12-06 00:49:58.125 	INFO	client/rm_branch_commit_processor.go:44      	Branch committing: xid 172.23.0.2:8091:3063170758788677637, branchID 3063170758788677638, resourceID TestService, applicationData {"actionContext":{"action-start-time":1764953398123,"actionName":"TestService","host-name":"192.168.0.113","sys::commit":"Commit","sys::prepare":"Prepare","sys::rollback":"Rollback"}}
   2025-12-06 00:49:58.125 	INFO	rocketmq/test.go:22                          	TestService Commit
   2025-12-06 00:49:58.125 	INFO	client/rm_branch_commit_processor.go:57      	branch commit success: xid 172.23.0.2:8091:3063170758788677637, branchID 3063170758788677638, resourceID TestService, applicationData {"actionContext":{"action-start-time":1764953398123,"actionName":"TestService","host-name":"192.168.0.113","sys::commit":"Commit","sys::prepare":"Prepare","sys::rollback":"Rollback"}}
   2025-12-06 00:49:58.126 	INFO	getty/getty_remoting.go:82                   	send async message: {message.RpcMessage{ID:5, Type:0x1, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.BranchCommitResponse{AbstractBranchEndResponse:message.AbstractBranchEndResponse{AbstractTransactionResponse:message.AbstractTransactionResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x1, Msg:""}, TransactionErrorCode:0}, Xid:"172.23.0.2:8091:3063170758788677637", BranchId:3063170758788677638, BranchStatus:5}}}}
   2025-12-06 00:49:58.126 	INFO	client/rm_branch_commit_processor.go:90      	send branch commit success: xid 172.23.0.2:8091:3063170758788677637, branchID 3063170758788677638, resourceID TestService, applicationData [123 34 97 99 116 105 111 110 67 111 110 116 101 120 116 34 58 123 34 97 99 116 105 111 110 45 115 116 97 114 116 45 116 105 109 101 34 58 49 55 54 52 57 53 51 51 57 56 49 50 51 44 34 97 99 116 105 111 110 78 97 109 101 34 58 34 84 101 115 116 83 101 114 118 105 99 101 34 44 34 104 111 115 116 45 110 97 109 101 34 58 34 49 57 50 46 49 54 56 46 48 46 49 49 51 34 44 34 115 121 115 58 58 99 111 109 109 105 116 34 58 34 67 111 109 109 105 116 34 44 34 115 121 115 58 58 112 114 101 112 97 114 101 34 58 34 80 114 101 112 97 114 101 34 44 34 115 121 115 58 58 114 111 108 108 98 97 99 107 34 58 34 82 111 108 108 98 97 99 107 34 125 125]
   2025-12-06 00:49:58.127 	INFO	client/client_on_response_processor.go:48    	the rm client received  clientOnResponse msg message.RpcMessage{ID:5, Type:0x1, Codec:0x1, Compressor:0x0, HeadMap:map[string]string{}, Body:message.GlobalCommitResponse{AbstractGlobalEndResponse:message.AbstractGlobalEndResponse{AbstractTransactionResponse:message.AbstractTransactionResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x1, Msg:""}, TransactionErrorCode:0}, GlobalStatus:0x9}}} from tc server.
   2025-12-06 00:50:18.127 	ERROR	getty/getty_client.go:102                    	wait resp timeout: message.RpcMessage{ID:5, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.GlobalCommitRequest{AbstractGlobalEndRequest:message.AbstractGlobalEndRequest{Xid:"172.23.0.2:8091:3063170758788677637", ExtraData:[]uint8(nil)}}}
   seata.apache.org/seata-go/pkg/remoting/getty.(*GettyRemotingClient).syncCallback
   	/home/finntew/Projects/incubator-seata-go/pkg/remoting/getty/getty_client.go:102
   seata.apache.org/seata-go/pkg/remoting/getty.(*GettyRemoting).sendAsync
   	/home/finntew/Projects/incubator-seata-go/pkg/remoting/getty/getty_remoting.go:98
   seata.apache.org/seata-go/pkg/remoting/getty.(*GettyRemoting).SendSync
   	/home/finntew/Projects/incubator-seata-go/pkg/remoting/getty/getty_remoting.go:56
   seata.apache.org/seata-go/pkg/remoting/getty.(*GettyRemotingClient).SendSyncRequest
   	/home/finntew/Projects/incubator-seata-go/pkg/remoting/getty/getty_client.go:90
   seata.apache.org/seata-go/pkg/tm.(*GlobalTransactionManager).Commit
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/global_transaction.go:102
   seata.apache.org/seata-go/pkg/tm.commitOrRollback
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:172
   seata.apache.org/seata-go/pkg/tm.WithGlobalTx.func1
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:71
   seata.apache.org/seata-go/pkg/tm.WithGlobalTx
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:93
   main.main
   	/home/finntew/Projects/incubator-seata-go-samples/tcc/rocketmq/test.go:47
   runtime.main
   	/usr/lib/go-1.25/src/runtime/proc.go:285
   2025-12-06 00:50:18.127 	ERROR	getty/getty_remoting.go:59                   	send message: message.RpcMessage{ID:5, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.GlobalCommitRequest{AbstractGlobalEndRequest:message.AbstractGlobalEndRequest{Xid:"172.23.0.2:8091:3063170758788677637", ExtraData:[]uint8(nil)}}}, session: session {client_test:TCP_CLIENT:1:127.0.0.1:58776<->127.0.0.1:8091}, Read Bytes: 762, Write Bytes: 880, Read Pkgs: 25, Write Pkgs: 26
   seata.apache.org/seata-go/pkg/remoting/getty.(*GettyRemoting).SendSync
   	/home/finntew/Projects/incubator-seata-go/pkg/remoting/getty/getty_remoting.go:59
   seata.apache.org/seata-go/pkg/remoting/getty.(*GettyRemotingClient).SendSyncRequest
   	/home/finntew/Projects/incubator-seata-go/pkg/remoting/getty/getty_client.go:90
   seata.apache.org/seata-go/pkg/tm.(*GlobalTransactionManager).Commit
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/global_transaction.go:102
   seata.apache.org/seata-go/pkg/tm.commitOrRollback
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:172
   seata.apache.org/seata-go/pkg/tm.WithGlobalTx.func1
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:71
   seata.apache.org/seata-go/pkg/tm.WithGlobalTx
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:93
   main.main
   	/home/finntew/Projects/incubator-seata-go-samples/tcc/rocketmq/test.go:47
   runtime.main
   	/usr/lib/go-1.25/src/runtime/proc.go:285
   2025-12-06 00:50:18.127 	WARN	tm/global_transaction.go:105                 	send global commit request failed, xid 172.23.0.2:8091:3063170758788677637, error wait response timeout, request: message.RpcMessage{ID:5, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.GlobalCommitRequest{AbstractGlobalEndRequest:message.AbstractGlobalEndRequest{Xid:"172.23.0.2:8091:3063170758788677637", ExtraData:[]uint8(nil)}}}
   seata.apache.org/seata-go/pkg/tm.(*GlobalTransactionManager).Commit
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/global_transaction.go:105
   seata.apache.org/seata-go/pkg/tm.commitOrRollback
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:172
   seata.apache.org/seata-go/pkg/tm.WithGlobalTx.func1
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:71
   seata.apache.org/seata-go/pkg/tm.WithGlobalTx
   	/home/finntew/Projects/incubator-seata-go/pkg/tm/transaction_executor.go:93
   main.main
   	/home/finntew/Projects/incubator-seata-go-samples/tcc/rocketmq/test.go:47
   runtime.main
   	/usr/lib/go-1.25/src/runtime/proc.go:285
   2025-12-06 00:50:18.324 	INFO	getty/getty_remoting.go:82                   	send async message: {message.RpcMessage{ID:6, Type:0x0, Codec:0x1, Compressor:0x0, HeadMap:map[string]string(nil), Body:message.GlobalCommitRequest{AbstractGlobalEndRequest:message.AbstractGlobalEndRequest{Xid:"172.23.0.2:8091:3063170758788677637", ExtraData:[]uint8(nil)}}}}
   2025-12-06 00:50:18.326 	INFO	client/client_on_response_processor.go:48    	the rm client received  clientOnResponse msg message.RpcMessage{ID:6, Type:0x1, Codec:0x1, Compressor:0x0, HeadMap:map[string]string{}, Body:message.GlobalCommitResponse{AbstractGlobalEndResponse:message.AbstractGlobalEndResponse{AbstractTransactionResponse:message.AbstractTransactionResponse{AbstractResultMessage:message.AbstractResultMessage{ResultCode:0x1, Msg:""}, TransactionErrorCode:0}, GlobalStatus:0xf}}} from tc server.
   2025-12-06 00:50:18.326 	INFO	tm/global_transaction.go:115                 	send global commit request success, xid 172.23.0.2:8091:3063170758788677637
   2025-12-06 00:50:18.326 	INFO	rocketmq/test.go:61                          	Transaction completed, waiting for error to appear...
   ```
   
   ## Environment
   
   - **seata-go version**: Latest (master branch)
   - **Seata TC Server version**: 1.8.0+
   - **Transaction mode**: TCC or AT mode
   
   ## Minimal Reproduction Code
   
   ```go
   package main
   
   import (
   	"context"
   	"time"
   
   	"seata.apache.org/seata-go/pkg/client"
   	"seata.apache.org/seata-go/pkg/rm/tcc"
   	"seata.apache.org/seata-go/pkg/tm"
   	"seata.apache.org/seata-go/pkg/util/log"
   )
   
   // Simple TCC service
   type TestService struct{}
   
   func (s *TestService) Prepare(ctx context.Context, params interface{}) (bool, error) {
   	log.Infof("TestService Prepare")
   	return true, nil
   }
   
   func (s *TestService) Commit(ctx context.Context, businessCtx *tm.BusinessActionContext) (bool, error) {
   	log.Infof("TestService Commit")
   	return true, nil
   }
   
   func (s *TestService) Rollback(ctx context.Context, businessCtx *tm.BusinessActionContext) (bool, error) {
   	log.Infof("TestService Rollback")
   	return true, nil
   }
   
   func (s *TestService) GetActionName() string {
   	return "TestService"
   }
   
   func main() {
   	// Initialize seata client (adjust config path as needed)
   	client.InitPath("./conf/seatago.yml")
   
   	// Register TCC service
   	tccService, err := tcc.NewTCCServiceProxy(&TestService{})
   	if err != nil {
   		log.Errorf("Failed to create TCC service: %v", err)
   		return
   	}
   
   	// Execute a simple global transaction
   	err = tm.WithGlobalTx(context.Background(), &tm.GtxConfig{
   		Name:    "test-global-tx",
   		Timeout: time.Second * 60,
   	}, func(ctx context.Context) error {
   		log.Infof("Starting global transaction")
   		_, err := tccService.Prepare(ctx, "test-data")
   		return err
   	})
   
   	if err != nil {
   		log.Errorf("Transaction failed: %v", err)
   		return
   	}
   
   	log.Infof("Transaction completed, waiting for error to appear...")
   
   	// Wait for 3 minutes to see the error
   	time.Sleep(3 * time.Minute)
   }
   ```
   
   **Configuration file** (`conf/seatago.yml`):
   ```yaml
   seata:
     application-id: test-app
     tx-service-group: default_tx_group
     registry:
       type: file
     config:
       type: file
   ```
   
   **Steps to reproduce:**
   1. Start Seata TC Server (v1.8.0 or later)
   2. Run the above code
   3. Wait approximately 2-3 minutes after the transaction completes
   4. Observe the error logs showing message type 111 decode failure
   
   ## Root Cause
   
   The TC server periodically sends `UndoLogDeleteRequest` (message type 111) to Resource Managers to clean up old undo log records. However, seata-go is missing the necessary components to handle this message:
   
   1. **Message Structure Field Type Issue**: `SaveDays` field has wrong type `MessageType` instead of `int16`
      - Location: `pkg/protocol/message/request_message.go:132-136`
   
   2. **Missing Codec**: No codec implementation for `MessageTypeRmDeleteUndolog`
      - Expected location: `pkg/protocol/codec/undolog_delete_req_codec.go`
   
   3. **Missing Processor**: No message processor to handle this request
      - Expected location: `pkg/remoting/processor/client/rm_delete_undolog_processor.go`
   
   4. **Missing Registration**: Codec and processor not registered in initialization
      - Files: `pkg/protocol/codec/codec.go` and `pkg/remoting/processor/client/init.go`
   
   ## Message Type 111 Definition
   
   ```java
   short TYPE_RM_DELETE_UNDOLOG = 111;
   ```
   
   ```java
   public class UndoLogDeleteRequest {
       private String resourceId;
       private short saveDays;
       private BranchType branchType;
   }
   ```
   
   ### 📚 相关背景
   
   _No response_


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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