Comments (4)
现在就已经支持使用gorm的事务进行处理,参见: https://dtm.pub/ref/sdk.html#orm
from dtm.
现在就已经支持使用gorm的事务进行处理,参见: https://dtm.pub/ref/sdk.html#orm
这个我看到了,不过我们是UserModel里面有一个*gorm.DB字段。如果在UserModel初始化的时候传给它一个已经开启了事务的*gorm.DB,然后再在UserModel里面使用 u.db.Begin()就会报错。
如果我们使用gorm的事务嵌套就可以了,但是需要dtm提供一个不自动commit/rollback的BranchBarrier.Call方法,也就是我上面说的简单的把现有的Call方法拆成两个方法,一个自动commit/rollback,一个由使用者自己去处理commit/rollback,更加灵活一点
func TestName(t *testing.T) {
gormDB,_:=gorm.Open(mysql.Open("dsn"))
//正常情况
um:=UserModel{db: gormDB}
um.Insert(User{})
//异常情况 报错 invalid transaction
gormTx:=gormDB.Begin()
um2:=UserModel{db: gormTx}
um2.Insert(User{})
}
type User struct {
Id int64
}
type UserModel struct {
db *gorm.DB
}
func (u UserModel) Insert(v User) error {
tx := u.db.Begin()
msg := dtmcli.NewMsg("server", "gid")
return msg.DoAndSubmit("", func(bb *dtmcli.BranchBarrier) error {
return bb.Call(tx.Statement.ConnPool.(*sql.Tx), func(tx *sql.Tx) error {
_, err := tx.Exec("insert into user values (?)", v.Id)
return err
})
})
}
from dtm.
感觉你的这个场景需求会不会太小众了?为什么一定要自己开启和结束事务,希望能够详细说明一下为什么需要支持这种场景
from dtm.
应该是我考虑的有问题,不好意思,感谢回答
from dtm.
Related Issues (20)
- http_workflow_tcc_barrier 某种异常情况下,子事务 rollback 之后又会走到 commit 步骤 HOT 26
- saga grpc 加上ctx入参 HOT 5
- 关于异常信息的传递 HOT 5
- dtm真有管理后台? HOT 4
- 子事务屏障和幂等的问题?
- clone run的时候出现的错误 HOT 5
- grpc_saga_passthroughHeaders 中间件设置header后接口中无法获取 HOT 5
- Can I provide a demo for accessing XA transactions in the go-zero framework HOT 1
- Azure MySQL SSL-mode requird
- XA全局事务成功后,DTM Admin 显示正常,但是本地数据库XA事务未提交,要修改的数据未变动,需要手动执行XA事务提交才生效 HOT 2
- Expect the Server to support SqlServer storage
- Lua not supported? HOT 1
- mod\github.com\dtm-labs\[email protected]\dtmimp\vars.go:48:22: undefined: dtmdriver.GetHTTPDriver HOT 2
- 并发情况下 偶尔会出现死锁 HOT 2
- 基于mysql做存储时间长了会不会影响性能? HOT 2
- 为什么二阶消息回查不直接由DTM HOT 2
- k8s部署时,如何配置MicroService的EndPoint? HOT 1
- 性能测试和文档内描述的差距较大 HOT 1
- tcc模式下,Cancel阶段怎么拿到Try或者Confirm阶段生成的数据 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dtm.