in tcc/fence/service/service.go [67:92]
func (T TestTCCServiceBusiness) Prepare(ctx context.Context, params interface{}) (b bool, err error) {
db, err := sql.Open(DriverName, Url)
if err != nil {
return false, fmt.Errorf("database connect failed, msg :%s", err.Error())
}
defer db.Close()
tx, err := db.Begin()
if err != nil {
return false, fmt.Errorf("transaction begin failed, msg :%s", err.Error())
}
defer func() {
if err != nil {
err = fmt.Errorf("business method throw error: %s, rollback result: %s", err, tx.Rollback())
return
}
b, err = true, tx.Commit()
}()
err = fence.WithFence(ctx, tx, func() error {
log.Infof("TestTCCServiceBusiness Prepare, param %v", params)
return nil
})
return
}