dtm/dtmgrpc/saga.go
2021-08-10 14:54:55 +08:00

49 lines
1.0 KiB
Go

package dtmgrpc
import (
context "context"
"github.com/yedf/dtm/dtmcli"
)
// SagaGrpc struct of saga
type SagaGrpc struct {
dtmcli.SagaData
dtmcli.TransBase
}
// NewSaga create a saga
func NewSaga(server string, gid string) *SagaGrpc {
return &SagaGrpc{
SagaData: dtmcli.SagaData{TransData: dtmcli.TransData{
Gid: gid,
TransType: "saga",
}},
TransBase: dtmcli.TransBase{
Dtm: server,
},
}
}
// Add add a saga step
func (s *SagaGrpc) Add(action string, compensate string, appData []byte) *SagaGrpc {
dtmcli.Logf("saga %s Add %s %s %v", s.SagaData.Gid, action, compensate, string(appData))
step := dtmcli.SagaStep{
Action: action,
Compensate: compensate,
Data: string(appData),
}
s.Steps = append(s.Steps, step)
return s
}
// Submit submit the saga trans
func (s *SagaGrpc) Submit() error {
_, err := MustGetDtmClient(s.Dtm).Submit(context.Background(), &DtmRequest{
Gid: s.Gid,
TransType: s.TransType,
Data: dtmcli.MustMarshalString(&s.Steps),
})
return err
}