From c0e4c5879224f09b706d511324e7ee3455aa943d Mon Sep 17 00:00:00 2001
From: dd-Rebecca <135697495+dd-Rebecca@users.noreply.github.com>
Date: Thu, 4 Jan 2024 16:12:35 +0800
Subject: [PATCH] fix(eventbus): eventbus lock with nowait (#20)

Co-authored-by: daijiaqi <daijiaqi@bytedance.com>
---
 eventbus/mysql/eventbus.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/eventbus/mysql/eventbus.go b/eventbus/mysql/eventbus.go
index ba758ed..dd883c6 100644
--- a/eventbus/mysql/eventbus.go
+++ b/eventbus/mysql/eventbus.go
@@ -325,7 +325,7 @@ func (e *EventBus) initService() error {
 
 func (e *EventBus) lockService(tx *gorm.DB) (*ServicePO, error) {
 	service := &ServicePO{}
-	if err := tx.Clauses(clause.Locking{Strength: "UPDATE"}).
+	if err := tx.Clauses(clause.Locking{Strength: "UPDATE", Options: "NOWAIT"}).
 		Where("name = ?", e.serviceName).
 		First(service).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
@@ -504,7 +504,7 @@ func (e *EventBus) handleTransactions() error {
 		ctx := e.ctxWithDB(context.TODO(), db)
 
 		trans := make([]*Transaction, 0)
-		if err := db.Clauses(clause.Locking{Strength: "UPDATE"}).Where(
+		if err := db.Clauses(clause.Locking{Strength: "UPDATE", Options: "NOWAIT"}).Where(
 			"service = ? and due_time < ?", e.serviceName, time.Now(),
 		).Find(&trans).Error; err != nil {
 			return err
-- 
GitLab