Skip to content

Commit 6d3cb35

Browse files
committed
move status table to cron package
1 parent 877df0f commit 6d3cb35

File tree

5 files changed

+39
-54
lines changed

5 files changed

+39
-54
lines changed

models/branches.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -458,11 +458,6 @@ func (deletedBranch *DeletedBranch) LoadUser() {
458458

459459
// RemoveOldDeletedBranches removes old deleted branches
460460
func RemoveOldDeletedBranches() {
461-
if !taskStatusTable.StartIfNotRunning(`deleted_branches_cleanup`) {
462-
return
463-
}
464-
defer taskStatusTable.Stop(`deleted_branches_cleanup`)
465-
466461
log.Trace("Doing: DeletedBranchesCleanup")
467462

468463
deleteBefore := time.Now().Add(-setting.Cron.DeletedBranchesCleanup.OlderThan)

models/repo.go

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2056,11 +2056,6 @@ func DeleteRepositoryArchives() error {
20562056

20572057
// DeleteOldRepositoryArchives deletes old repository archives.
20582058
func DeleteOldRepositoryArchives() {
2059-
if !taskStatusTable.StartIfNotRunning(archiveCleanup) {
2060-
return
2061-
}
2062-
defer taskStatusTable.Stop(archiveCleanup)
2063-
20642059
log.Trace("Doing: ArchiveCleanup")
20652060

20662061
if err := x.Where("id > 0").Iterate(new(Repository), deleteOldRepositoryArchives); err != nil {
@@ -2187,23 +2182,8 @@ func SyncRepositoryHooks() error {
21872182
})
21882183
}
21892184

2190-
// Prevent duplicate running tasks.
2191-
var taskStatusTable = sync.NewStatusTable()
2192-
2193-
const (
2194-
mirrorUpdate = "mirror_update"
2195-
gitFsck = "git_fsck"
2196-
checkRepos = "check_repos"
2197-
archiveCleanup = "archive_cleanup"
2198-
)
2199-
22002185
// GitFsck calls 'git fsck' to check repository health.
22012186
func GitFsck() {
2202-
if !taskStatusTable.StartIfNotRunning(gitFsck) {
2203-
return
2204-
}
2205-
defer taskStatusTable.Stop(gitFsck)
2206-
22072187
log.Trace("Doing: GitFsck")
22082188

22092189
if err := x.
@@ -2272,11 +2252,6 @@ func repoStatsCheck(checker *repoChecker) {
22722252

22732253
// CheckRepoStats checks the repository stats
22742254
func CheckRepoStats() {
2275-
if !taskStatusTable.StartIfNotRunning(checkRepos) {
2276-
return
2277-
}
2278-
defer taskStatusTable.Stop(checkRepos)
2279-
22802255
log.Trace("Doing: CheckRepoStats")
22812256

22822257
checkers := []*repoChecker{

models/repo_mirror.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -315,11 +315,6 @@ func DeleteMirrorByRepoID(repoID int64) error {
315315

316316
// MirrorUpdate checks and updates mirror repositories.
317317
func MirrorUpdate() {
318-
if !taskStatusTable.StartIfNotRunning(mirrorUpdate) {
319-
return
320-
}
321-
defer taskStatusTable.Stop(mirrorUpdate)
322-
323318
log.Trace("Doing: MirrorUpdate")
324319

325320
if err := x.

models/user.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ const (
6060
algoPbkdf2 = "pbkdf2"
6161
)
6262

63-
const syncExternalUsers = "sync_external_users"
64-
6563
var (
6664
// ErrUserNotKeyOwner user does not own this key error
6765
ErrUserNotKeyOwner = errors.New("User does not own this public key")
@@ -1643,11 +1641,6 @@ func synchronizeLdapSSHPublicKeys(usr *User, s *LoginSource, sshPublicKeys []str
16431641

16441642
// SyncExternalUsers is used to synchronize users with external authorization source
16451643
func SyncExternalUsers() {
1646-
if !taskStatusTable.StartIfNotRunning(syncExternalUsers) {
1647-
return
1648-
}
1649-
defer taskStatusTable.Stop(syncExternalUsers)
1650-
16511644
log.Trace("Doing: SyncExternalUsers")
16521645

16531646
ls, err := LoginSources()

modules/cron/cron.go

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,80 +12,107 @@ import (
1212
"code.gitea.io/gitea/models"
1313
"code.gitea.io/gitea/modules/log"
1414
"code.gitea.io/gitea/modules/setting"
15+
"code.gitea.io/gitea/modules/sync"
16+
)
17+
18+
const (
19+
mirrorUpdate = "mirror_update"
20+
gitFsck = "git_fsck"
21+
checkRepos = "check_repos"
22+
archiveCleanup = "archive_cleanup"
23+
syncExternalUsers = "sync_external_users"
24+
deletedBranchesCleanup = "deleted_branches_cleanup"
1525
)
1626

1727
var c = cron.New()
1828

29+
// Prevent duplicate running tasks.
30+
var taskStatusTable = sync.NewStatusTable()
31+
32+
// CronFunc defines a cron function
33+
type CronFunc func()
34+
35+
// WithUnique wrap a cron func with an unique running check
36+
func WithUnique(name string, body CronFunc) CronFunc {
37+
return func() {
38+
if !taskStatusTable.StartIfNotRunning(name) {
39+
return
40+
}
41+
defer taskStatusTable.Stop(name)
42+
body()
43+
}
44+
}
45+
1946
// NewContext begins cron tasks
2047
func NewContext() {
2148
var (
2249
entry *cron.Entry
2350
err error
2451
)
2552
if setting.Cron.UpdateMirror.Enabled {
26-
entry, err = c.AddFunc("Update mirrors", setting.Cron.UpdateMirror.Schedule, models.MirrorUpdate)
53+
entry, err = c.AddFunc("Update mirrors", setting.Cron.UpdateMirror.Schedule, WithUnique(mirrorUpdate, models.MirrorUpdate))
2754
if err != nil {
2855
log.Fatal("Cron[Update mirrors]: %v", err)
2956
}
3057
if setting.Cron.UpdateMirror.RunAtStart {
3158
entry.Prev = time.Now()
3259
entry.ExecTimes++
33-
go models.MirrorUpdate()
60+
go WithUnique(mirrorUpdate, models.MirrorUpdate)()
3461
}
3562
}
3663
if setting.Cron.RepoHealthCheck.Enabled {
37-
entry, err = c.AddFunc("Repository health check", setting.Cron.RepoHealthCheck.Schedule, models.GitFsck)
64+
entry, err = c.AddFunc("Repository health check", setting.Cron.RepoHealthCheck.Schedule, WithUnique(gitFsck, models.GitFsck))
3865
if err != nil {
3966
log.Fatal("Cron[Repository health check]: %v", err)
4067
}
4168
if setting.Cron.RepoHealthCheck.RunAtStart {
4269
entry.Prev = time.Now()
4370
entry.ExecTimes++
44-
go models.GitFsck()
71+
go WithUnique(gitFsck, models.GitFsck)()
4572
}
4673
}
4774
if setting.Cron.CheckRepoStats.Enabled {
48-
entry, err = c.AddFunc("Check repository statistics", setting.Cron.CheckRepoStats.Schedule, models.CheckRepoStats)
75+
entry, err = c.AddFunc("Check repository statistics", setting.Cron.CheckRepoStats.Schedule, WithUnique(checkRepos, models.CheckRepoStats))
4976
if err != nil {
5077
log.Fatal("Cron[Check repository statistics]: %v", err)
5178
}
5279
if setting.Cron.CheckRepoStats.RunAtStart {
5380
entry.Prev = time.Now()
5481
entry.ExecTimes++
55-
go models.CheckRepoStats()
82+
go WithUnique(checkRepos, models.CheckRepoStats)()
5683
}
5784
}
5885
if setting.Cron.ArchiveCleanup.Enabled {
59-
entry, err = c.AddFunc("Clean up old repository archives", setting.Cron.ArchiveCleanup.Schedule, models.DeleteOldRepositoryArchives)
86+
entry, err = c.AddFunc("Clean up old repository archives", setting.Cron.ArchiveCleanup.Schedule, WithUnique(archiveCleanup, models.DeleteOldRepositoryArchives))
6087
if err != nil {
6188
log.Fatal("Cron[Clean up old repository archives]: %v", err)
6289
}
6390
if setting.Cron.ArchiveCleanup.RunAtStart {
6491
entry.Prev = time.Now()
6592
entry.ExecTimes++
66-
go models.DeleteOldRepositoryArchives()
93+
go WithUnique(archiveCleanup, models.DeleteOldRepositoryArchives)()
6794
}
6895
}
6996
if setting.Cron.SyncExternalUsers.Enabled {
70-
entry, err = c.AddFunc("Synchronize external users", setting.Cron.SyncExternalUsers.Schedule, models.SyncExternalUsers)
97+
entry, err = c.AddFunc("Synchronize external users", setting.Cron.SyncExternalUsers.Schedule, WithUnique(syncExternalUsers, models.SyncExternalUsers))
7198
if err != nil {
7299
log.Fatal("Cron[Synchronize external users]: %v", err)
73100
}
74101
if setting.Cron.SyncExternalUsers.RunAtStart {
75102
entry.Prev = time.Now()
76103
entry.ExecTimes++
77-
go models.SyncExternalUsers()
104+
go WithUnique(syncExternalUsers, models.SyncExternalUsers)()
78105
}
79106
}
80107
if setting.Cron.DeletedBranchesCleanup.Enabled {
81-
entry, err = c.AddFunc("Remove old deleted branches", setting.Cron.DeletedBranchesCleanup.Schedule, models.RemoveOldDeletedBranches)
108+
entry, err = c.AddFunc("Remove old deleted branches", setting.Cron.DeletedBranchesCleanup.Schedule, WithUnique(deletedBranchesCleanup, models.RemoveOldDeletedBranches))
82109
if err != nil {
83110
log.Fatal("Cron[Remove old deleted branches]: %v", err)
84111
}
85112
if setting.Cron.DeletedBranchesCleanup.RunAtStart {
86113
entry.Prev = time.Now()
87114
entry.ExecTimes++
88-
go models.RemoveOldDeletedBranches()
115+
go WithUnique(deletedBranchesCleanup, models.RemoveOldDeletedBranches)()
89116
}
90117
}
91118
c.Start()

0 commit comments

Comments
 (0)