From 07499d146dc0d883eac0890f71443237fdda67eb Mon Sep 17 00:00:00 2001 From: pirosiki197 Date: Tue, 2 Apr 2024 20:47:13 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E6=99=82=E3=81=ABdeadlock=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/repository/environment.go | 24 +++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/pkg/infrastructure/repository/environment.go b/pkg/infrastructure/repository/environment.go index 8d8c8c4e3..6b0912d91 100644 --- a/pkg/infrastructure/repository/environment.go +++ b/pkg/infrastructure/repository/environment.go @@ -44,24 +44,36 @@ func (r *environmentRepository) GetEnv(ctx context.Context, cond domain.GetEnvCo return ds.Map(environments, repoconvert.ToDomainEnvironment), nil } -func (r *environmentRepository) SetEnv(ctx context.Context, env *domain.Environment) error { +func (r *environmentRepository) SetEnv(ctx context.Context, env *domain.Environment) (err error) { // NOTE: sqlboiler does not recognize multiple column unique keys: https://github.com/volatiletech/sqlboiler/issues/328 tx, err := r.db.BeginTx(ctx, nil) if err != nil { return errors.Wrap(err, "failed to start transaction") } + defer func() { + if err != nil { + tx.Rollback() + } + }() - me, err := models.Environments( - models.EnvironmentWhere.ApplicationID.EQ(env.ApplicationID), - models.EnvironmentWhere.Key.EQ(env.Key), + _, err = models.Applications( + qm.Select(models.ApplicationColumns.ID), + models.ApplicationWhere.ID.EQ(env.ApplicationID), qm.For("UPDATE"), ).One(ctx, tx) + if err != nil { + return errors.Wrap(err, "failed to get application") + } + + exists, err := models.Environments( + models.EnvironmentWhere.ApplicationID.EQ(env.ApplicationID), + models.EnvironmentWhere.Key.EQ(env.Key), + ).Exists(ctx, tx) if err != nil && !isNoRowsErr(err) { return errors.Wrap(err, "failed to get environment") } - exists := !isNoRowsErr(err) - me = repoconvert.FromDomainEnvironment(env) + me := repoconvert.FromDomainEnvironment(env) if exists { _, err = me.Update(ctx, tx, boil.Blacklist()) From a2082c2dba0aba666399342588bdf05d1af1685d Mon Sep 17 00:00:00 2001 From: pirosiki197 Date: Tue, 2 Apr 2024 21:43:14 +0900 Subject: [PATCH 2/2] =?UTF-8?q?named=20return=E3=82=92=E3=82=84=E3=82=81?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/repository/environment.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pkg/infrastructure/repository/environment.go b/pkg/infrastructure/repository/environment.go index 6b0912d91..5cbaaf3a0 100644 --- a/pkg/infrastructure/repository/environment.go +++ b/pkg/infrastructure/repository/environment.go @@ -44,17 +44,13 @@ func (r *environmentRepository) GetEnv(ctx context.Context, cond domain.GetEnvCo return ds.Map(environments, repoconvert.ToDomainEnvironment), nil } -func (r *environmentRepository) SetEnv(ctx context.Context, env *domain.Environment) (err error) { +func (r *environmentRepository) SetEnv(ctx context.Context, env *domain.Environment) error { // NOTE: sqlboiler does not recognize multiple column unique keys: https://github.com/volatiletech/sqlboiler/issues/328 tx, err := r.db.BeginTx(ctx, nil) if err != nil { return errors.Wrap(err, "failed to start transaction") } - defer func() { - if err != nil { - tx.Rollback() - } - }() + defer tx.Rollback() _, err = models.Applications( qm.Select(models.ApplicationColumns.ID),