From edd24701027b5b7aa8572558a4b7008b2e6d4e5a Mon Sep 17 00:00:00 2001 From: yedongfu Date: Sat, 10 Jul 2021 16:36:05 +0800 Subject: [PATCH] update readme --- README.md | 6 +++--- examples/main_tcc_barrier.go | 14 ++++---------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 672aba6..7f6bbbc 100644 --- a/README.md +++ b/README.md @@ -23,13 +23,13 @@ DTM是首款golang的分布式事务管理器,优雅的解决了幂等、空 + XA ### 文档与介绍(更新中) - * [DTM简介](https://zhuanlan.zhihu.com/p/386770520) + * [分布式事务简介](https://zhuanlan.zhihu.com/p/387487859) * 分布式事务模式 - [XA事务模式](https://zhuanlan.zhihu.com/p/384756957) - [SAGA事务模式](https://zhuanlan.zhihu.com/p/385594256) - - TCC事务模式 + - [TCC事务模式](https://zhuanlan.zhihu.com/p/388357329) - 可靠消息事务模式 - * 子事务屏障 + * [子事务屏障](https://zhuanlan.zhihu.com/p/388444465) * FAQ * 部署指南 diff --git a/examples/main_tcc_barrier.go b/examples/main_tcc_barrier.go index 12115c5..4d73bba 100644 --- a/examples/main_tcc_barrier.go +++ b/examples/main_tcc_barrier.go @@ -9,7 +9,6 @@ import ( "github.com/sirupsen/logrus" "github.com/yedf/dtm/common" "github.com/yedf/dtm/dtmcli" - "gorm.io/gorm" ) // 事务参与者的服务地址 @@ -70,7 +69,7 @@ const transOutUid = 2 func adjustTrading(sdb *sql.DB, uid int, amount int) (interface{}, error) { db := common.SqlDB2DB(sdb) - dbr := db.Exec("update dtm_busi.user_account_trading t join dtm_busi.user_account a on t.user_id=a.user_id and t.user_id=? set t.trading_balance=t.trading_balance + ? where a.balance + t.trading_balance + ? > 0", uid, amount, amount) + dbr := db.Exec("update dtm_busi.user_account_trading t join dtm_busi.user_account a on t.user_id=a.user_id and t.user_id=? set t.trading_balance=t.trading_balance + ? where a.balance + t.trading_balance + ? >= 0", uid, amount, amount) if dbr.Error == nil && dbr.RowsAffected == 0 { return nil, fmt.Errorf("update error, maybe balance not enough") } @@ -79,15 +78,10 @@ func adjustTrading(sdb *sql.DB, uid int, amount int) (interface{}, error) { func adjustBalance(sdb *sql.DB, uid int, amount int) (interface{}, error) { db := common.SqlDB2DB(sdb) - dbr := db.Exec("update dtm_busi.user_account_trading t join dtm_busi.user_account a on t.user_id=a.user_id and t.user_id=? set t.trading_balance=t.trading_balance + ? where a.balance + t.trading_balance + ? > 0", uid, -amount, -amount) - if dbr.Error != nil { - return nil, dbr.Error + dbr := db.Exec("update dtm_busi.user_account_trading t join dtm_busi.user_account a on t.user_id=a.user_id and t.user_id=? set t.trading_balance=t.trading_balance + ?", uid, -amount, -amount) + if dbr.Error == nil && dbr.RowsAffected == 1 { + dbr = db.Exec("update dtm_busi.user_account set balance=balance+? where user_id=?", amount, uid) } - if dbr.RowsAffected == 0 { - return nil, fmt.Errorf("update trading error") - } - dbr = db.Model(&UserAccount{}).Where("user_id = ?", uid). - Update("balance", gorm.Expr("balance + ?", amount)) if dbr.Error != nil { return nil, dbr.Error }