in pkg/remoting/processor/client/rm_branch_commit_processor.go [37:92]
func (f *rmBranchCommitProcessor) Process(ctx context.Context, rpcMessage message.RpcMessage) error {
log.Infof("the rm client received rmBranchCommit msg %#v from tc server.", rpcMessage)
request := rpcMessage.Body.(message.BranchCommitRequest)
xid := request.Xid
branchID := request.BranchId
resourceID := request.ResourceId
applicationData := request.ApplicationData
log.Infof("Branch committing: xid %s, branchID %d, resourceID %s, applicationData %s", xid, branchID, resourceID, applicationData)
branchResource := rm.BranchResource{
ResourceId: resourceID,
BranchId: branchID,
ApplicationData: applicationData,
Xid: xid,
}
status, err := rm.GetRmCacheInstance().GetResourceManager(request.BranchType).BranchCommit(ctx, branchResource)
if err != nil {
log.Errorf("branch commit error: %s", err.Error())
return err
}
log.Infof("branch commit success: xid %s, branchID %d, resourceID %s, applicationData %s", xid, branchID, resourceID, applicationData)
var (
resultCode message.ResultCode
errMsg string
)
if err != nil {
resultCode = message.ResultCodeFailed
errMsg = err.Error()
} else {
resultCode = message.ResultCodeSuccess
}
// reply commit response to tc server
// todo add TransactionErrorCode
response := message.BranchCommitResponse{
AbstractBranchEndResponse: message.AbstractBranchEndResponse{
AbstractTransactionResponse: message.AbstractTransactionResponse{
AbstractResultMessage: message.AbstractResultMessage{
ResultCode: resultCode,
Msg: errMsg,
},
},
Xid: xid,
BranchId: branchID,
BranchStatus: status,
},
}
err = getty.GetGettyRemotingClient().SendAsyncResponse(rpcMessage.ID, response)
if err != nil {
log.Errorf("send branch commit response error: {%#v}", err.Error())
return err
}
log.Infof("send branch commit success: xid %v, branchID %v, resourceID %v, applicationData %v", xid, branchID, resourceID, applicationData)
return nil
}