Skip to content

Commit 888739c

Browse files
authored
fix danglin locks issue (#2079)
* fix danglin locks issue * rename function * add indexes
1 parent 9114953 commit 888739c

File tree

6 files changed

+50
-3
lines changed

6 files changed

+50
-3
lines changed

backend/controllers/github.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,20 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
697697
}
698698
}
699699

700+
// remove any dangling locks which are no longer in the list of impacted projects
701+
if *diggerCommand == orchestrator_scheduler.DiggerCommandUnlock {
702+
err := models.DB.DeleteAllLocksAcquiredByPR(prNumber, organisationId)
703+
if err != nil {
704+
slog.Error("Failed to delete locks",
705+
"prNumber", prNumber,
706+
"command", *diggerCommand,
707+
"error", err,
708+
)
709+
commentReporterManager.UpdateComment(fmt.Sprintf(":x: Failed to delete locks: %v", err))
710+
return fmt.Errorf("failed to delete locks: %v", err)
711+
}
712+
}
713+
700714
// if commands are locking or unlocking we don't need to trigger any jobs
701715
if *diggerCommand == orchestrator_scheduler.DiggerCommandUnlock ||
702716
*diggerCommand == orchestrator_scheduler.DiggerCommandLock {
@@ -1579,6 +1593,20 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
15791593
}
15801594
}
15811595

1596+
// remove any dangling locks which are no longer in the list of impacted projects
1597+
if *diggerCommand == orchestrator_scheduler.DiggerCommandUnlock {
1598+
err := models.DB.DeleteAllLocksAcquiredByPR(issueNumber, orgId)
1599+
if err != nil {
1600+
slog.Error("Failed to delete locks",
1601+
"prNumber", issueNumber,
1602+
"command", *diggerCommand,
1603+
"error", err,
1604+
)
1605+
commentReporterManager.UpdateComment(fmt.Sprintf(":x: Failed to delete locks: %v", err))
1606+
return fmt.Errorf("failed to delete locks: %v", err)
1607+
}
1608+
}
1609+
15821610
// if commands are locking or unlocking we don't need to trigger any jobs
15831611
if *diggerCommand == orchestrator_scheduler.DiggerCommandUnlock ||
15841612
*diggerCommand == orchestrator_scheduler.DiggerCommandLock {

backend/go.sum

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm
750750
github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
751751
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
752752
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
753+
github.com/alecthomas/kong v0.7.1 h1:azoTh0IOfwlAX3qN9sHWTxACE2oV8Bg2gAwBsMwDQY4=
754+
github.com/alecthomas/kong v0.7.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
753755
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
754756
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
755757
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -1024,6 +1026,7 @@ github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyT
10241026
github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I=
10251027
github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s=
10261028
github.com/getsentry/sentry-go v0.29.0 h1:YtWluuCFg9OfcqnaujpY918N/AhCCwarIDWOYSBAjCA=
1029+
github.com/getsentry/sentry-go v0.29.0/go.mod h1:jhPesDAL0Q0W2+2YEuVOvdWmVtdsr1+jtBrlDEVWwLY=
10271030
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
10281031
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
10291032
github.com/gin-contrib/pprof v1.5.0 h1:E/Oy7g+kNw94KfdCy3bZxQFtyDnAX2V7axRS7sNYVrU=
@@ -1783,6 +1786,7 @@ github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgY
17831786
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
17841787
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
17851788
github.com/samber/lo v1.46.0 h1:w8G+oaCPgz1PoCJztqymCFaKwXt+5cCXn51uPxExFfQ=
1789+
github.com/samber/lo v1.46.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
17861790
github.com/samber/slog-gin v1.15.0 h1:Kqs/ilXd9divtslWjbz5DVptmLlzyntbBiXUAta2SFg=
17871791
github.com/samber/slog-gin v1.15.0/go.mod h1:mPAEinK/g2jPLauuWO11m3Q0Ca7aG4k9XjXjXY8IhMQ=
17881792
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
@@ -2776,8 +2780,10 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
27762780
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
27772781
gorm.io/driver/mysql v1.4.0/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c=
27782782
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
2783+
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
27792784
gorm.io/driver/postgres v1.4.1/go.mod h1:whNfh5WhhHs96honoLjBAMwJGYEuA3m1hvgUbNXhPCw=
27802785
gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8=
2786+
gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
27812787
gorm.io/driver/sqlite v1.4.1/go.mod h1:AKZZCAoFfOWHF7Nd685Iq8Uywc0i9sWJlzpoE/INzsw=
27822788
gorm.io/driver/sqlite v1.5.5 h1:7MDMtUZhV065SilG62E0MquljeArQZNfJnjd9i9gx3E=
27832789
gorm.io/driver/sqlite v1.5.5/go.mod h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATavE=
@@ -2790,6 +2796,7 @@ gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA=
27902796
gorm.io/gorm v1.25.2-0.20230610234218-206613868439/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
27912797
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
27922798
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
2799+
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
27932800
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
27942801
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
27952802
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=

backend/migrations/20250812035039.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- Create index "idx_digger_lock_id" to table: "digger_locks"
2+
CREATE INDEX "idx_digger_lock_id" ON "public"."digger_locks" ("lock_id", "organisation_id");

backend/migrations/atlas.sum

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
h1:g7vBQEDCfExWRVQBcLZ9Jnxb1y/szNvlaeZjw1ZfRSY=
1+
h1:scehEjCp4nRGl7111drKpd0hZ+ePO0DSLGy75uRXYd4=
22
20231227132525.sql h1:43xn7XC0GoJsCnXIMczGXWis9d504FAWi4F1gViTIcw=
33
20240115170600.sql h1:IW8fF/8vc40+eWqP/xDK+R4K9jHJ9QBSGO6rN9LtfSA=
44
20240116123649.sql h1:R1JlUIgxxF6Cyob9HdtMqiKmx/BfnsctTl5rvOqssQw=
@@ -62,3 +62,4 @@ h1:g7vBQEDCfExWRVQBcLZ9Jnxb1y/szNvlaeZjw1ZfRSY=
6262
20250717032021.sql h1:HaIhNsz3C+c87CDmFjgFlc9zGqoE5BU4m0dofDpeDYk=
6363
20250725041417.sql h1:Dds6fqS415FD1jlsoVEahcEEm1px3EHV5435moL+Vp8=
6464
20250730002811.sql h1:VqNDMnhVinkBXlDJN4BCq5JzZr4NHVu6zuHEGP9dMvk=
65+
20250812035039.sql h1:OLRqsoO26JjdOABsc+QauTWV0kUuZKkx6EOPUVgpBpw=

backend/models/locking.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "gorm.io/gorm"
55
type DiggerLock struct {
66
gorm.Model
77
Resource string `gorm:"index:idx_digger_locked_resource"`
8-
LockId int
8+
LockId int `gorm:"index:idx_digger_lock_id"`
99
Organisation *Organisation
10-
OrganisationID uint
10+
OrganisationID uint `gorm:"index:idx_digger_lock_id"`
1111
}

backend/models/storage.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,6 +1726,15 @@ func (db *Database) CreateDiggerLock(resource string, lockId int, orgId uint) (*
17261726
return lock, nil
17271727
}
17281728

1729+
func (db *Database) DeleteAllLocksAcquiredByPR(prNumber int, orgId uint) error {
1730+
l := DiggerLock{}
1731+
err := db.GormDB.Where("lock_id=? AND organisation_id=?", prNumber, orgId).Delete(&l).Error
1732+
if err != nil {
1733+
return fmt.Errorf("could not delete all locks: %v", err)
1734+
}
1735+
return nil
1736+
}
1737+
17291738
func (db *Database) GetDiggerLock(resource string) (*DiggerLock, error) {
17301739
lock := &DiggerLock{}
17311740
result := db.GormDB.Where("resource=? ", resource).First(lock)

0 commit comments

Comments
 (0)