From a3fb38821a21877d589550bd31c612e7aef2f8ef Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Tue, 4 Jun 2024 00:24:21 +0700 Subject: [PATCH] fix: api deadlock --- api/pubsub_download.go | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/api/pubsub_download.go b/api/pubsub_download.go index 687309a..592f02d 100644 --- a/api/pubsub_download.go +++ b/api/pubsub_download.go @@ -7,7 +7,6 @@ import ( "github.com/ThreeDotsLabs/watermill" "github.com/ThreeDotsLabs/watermill/message" - "github.com/stephenafamo/bob" "github.com/tigorlazuardi/redmage/models" "github.com/tigorlazuardi/redmage/pkg/errs" "github.com/tigorlazuardi/redmage/pkg/log" @@ -96,26 +95,22 @@ func (api *API) PubsubStartDownloadSubreddit(ctx context.Context, params PubsubS return errs.Wrapw(err, "failed to verify subreddit existence", "params", params) } - err = api.withTransaction(ctx, func(exec bob.Executor) error { - _, err := api.scheduleSet(ctx, exec, ScheduleSetParams{ - Subreddit: subreddit.Name, - Status: ScheduleStatusEnqueued, - }) - if err != nil { - return err - } - - payload, err := json.Marshal(subreddit) - if err != nil { - return errs.Wrapw(err, "failed to marshal subreddit") - } - - err = api.publisher.Publish(downloadTopic, message.NewMessage(watermill.NewUUID(), payload)) - if err != nil { - return errs.Wrapw(err, "failed to enqueue reddit download", "params", params) - } - return nil + _, errSchedule := api.scheduleSet(ctx, api.db, ScheduleSetParams{ + Subreddit: subreddit.Name, + Status: ScheduleStatusEnqueued, }) + if errSchedule != nil { + log.New(ctx).Err(errSchedule).Error("failed to set schedule status", "subreddit", subreddit.Name, "status", ScheduleStatusEnqueued.String()) + } + payload, err := json.Marshal(subreddit) + if err != nil { + return errs.Wrapw(err, "failed to marshal subreddit") + } + + err = api.publisher.Publish(downloadTopic, message.NewMessage(watermill.NewUUID(), payload)) + if err != nil { + return errs.Wrapw(err, "failed to enqueue reddit download", "params", params) + } return nil }