Skip to content

Commit 1663902

Browse files
authored
handle duplicate locks existing during unlock phase (#1675)
1 parent e665ca9 commit 1663902

File tree

3 files changed

+5
-20
lines changed

3 files changed

+5
-20
lines changed

backend/locking/backend_locking.go

+4-10
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,12 @@ func (lock BackendDBLock) Lock(lockId int, resource string) (bool, error) {
2020
}
2121

2222
func (lock BackendDBLock) Unlock(resource string) (bool, error) {
23-
theLock, err := models.DB.GetDiggerLock(resource)
23+
// delete all locks that match this resource
24+
l := models.DiggerLock{}
25+
err := models.DB.GormDB.Where("resource=?", resource).Delete(&l).Error
2426
if err != nil {
25-
if err != nil {
26-
return false, fmt.Errorf("could not get lock record: %v", err)
27-
}
27+
return false, fmt.Errorf("could not delete all locks: %v", err)
2828
}
29-
30-
err = models.DB.DeleteDiggerLock(theLock)
31-
if err != nil {
32-
return false, fmt.Errorf("could not delete lock record: %v", err)
33-
}
34-
3529
return true, nil
3630
}
3731

backend/models/storage.go

-10
Original file line numberDiff line numberDiff line change
@@ -1245,13 +1245,3 @@ func (db *Database) GetDiggerLock(resource string) (*DiggerLock, error) {
12451245
}
12461246
return lock, nil
12471247
}
1248-
1249-
func (db *Database) DeleteDiggerLock(lock *DiggerLock) error {
1250-
log.Printf("DeleteDiggerLock Deleting: %v, %v", lock.LockId, lock.Resource)
1251-
result := db.GormDB.Delete(lock)
1252-
if result.Error != nil {
1253-
return result.Error
1254-
}
1255-
log.Printf("DeleteDiggerLock %v %v has been deleted successfully\n", lock.LockId, lock.Resource)
1256-
return nil
1257-
}

libs/locking/locking.go

+1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ func reportLockingFailed(r reporting.Reporter, comment string) {
123123
}
124124

125125
func (projectLock *PullRequestLock) verifyNoHangingLocks() (bool, error) {
126+
// TODO: Also include CI type (github, gitlab etc. into this lockID in order to avoid collision across VCS)
126127
lockId := projectLock.LockId()
127128
transactionId, err := projectLock.InternalLock.GetLock(lockId)
128129

0 commit comments

Comments
 (0)