Skip to content

Commit

Permalink
Implement archive cleanup (#885)
Browse files Browse the repository at this point in the history
* Implement archive cleanup

Fixes #769

Signed-off-by: Andrew <write@imaginarycode.com>

* Make sure to close the directory file

* Resolve issues noted by @strk

* edit cheatsheet app.ini [ci skip]

* oops [ci skip]
  • Loading branch information
minecrafter authored and lunny committed Feb 11, 2017
1 parent cf0f451 commit 42835c7
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 3 deletions.
7 changes: 7 additions & 0 deletions conf/app.ini
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,13 @@ ARGS =
RUN_AT_START = true
SCHEDULE = @every 24h

; Clean up old repository archives
[cron.archive_cleanup]
RUN_AT_START = true
SCHEDULE = @every 24h
; Archives created more than OLDER_THAN ago are subject to deletion
OLDER_THAN = 24h

[git]
; Disables highlight of added and removed changes
DISABLE_DIFF_HIGHLIGHT = false
Expand Down
61 changes: 58 additions & 3 deletions models/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -1837,6 +1837,60 @@ func DeleteRepositoryArchives() error {
})
}

// DeleteOldRepositoryArchives deletes old repository archives.
func DeleteOldRepositoryArchives() {
if taskStatusTable.IsRunning(archiveCleanup) {
return
}
taskStatusTable.Start(archiveCleanup)
defer taskStatusTable.Stop(archiveCleanup)

log.Trace("Doing: ArchiveCleanup")

if err := x.Where("id > 0").Iterate(new(Repository), deleteOldRepositoryArchives); err != nil {
log.Error(4, "ArchiveClean: %v", err)
}
}

func deleteOldRepositoryArchives(idx int, bean interface{}) error {
repo := bean.(*Repository)
basePath := filepath.Join(repo.RepoPath(), "archives")

for _, ty := range []string{"zip", "targz"} {
path := filepath.Join(basePath, ty)
file, err := os.Open(path)
if err != nil {
if !os.IsNotExist(err) {
log.Warn("Unable to open directory %s: %v", path, err)
return err
}

// If the directory doesn't exist, that's okay.
continue
}

files, err := file.Readdir(0)
file.Close()
if err != nil {
log.Warn("Unable to read directory %s: %v", path, err)
return err
}

minimumOldestTime := time.Now().Add(-setting.Cron.ArchiveCleanup.OlderThan)
for _, info := range files {
if info.ModTime().Before(minimumOldestTime) && !info.IsDir() {
toDelete := filepath.Join(path, info.Name())
// This is a best-effort purge, so we do not check error codes to confirm removal.
if err = os.Remove(toDelete); err != nil {
log.Trace("Unable to delete %s, but proceeding: %v", toDelete, err)
}
}
}
}

return nil
}

func gatherMissingRepoRecords() ([]*Repository, error) {
repos := make([]*Repository, 0, 10)
if err := x.
Expand Down Expand Up @@ -1915,9 +1969,10 @@ func RewriteRepositoryUpdateHook() error {
var taskStatusTable = sync.NewStatusTable()

const (
mirrorUpdate = "mirror_update"
gitFsck = "git_fsck"
checkRepos = "check_repos"
mirrorUpdate = "mirror_update"
gitFsck = "git_fsck"
checkRepos = "check_repos"
archiveCleanup = "archive_cleanup"
)

// GitFsck calls 'git fsck' to check repository health.
Expand Down
11 changes: 11 additions & 0 deletions modules/cron/cron.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,17 @@ func NewContext() {
go models.CheckRepoStats()
}
}
if setting.Cron.ArchiveCleanup.Enabled {
entry, err = c.AddFunc("Clean up old repository archives", setting.Cron.ArchiveCleanup.Schedule, models.DeleteOldRepositoryArchives)
if err != nil {
log.Fatal(4, "Cron[Clean up old repository archives]: %v", err)
}
if setting.Cron.ArchiveCleanup.RunAtStart {
entry.Prev = time.Now()
entry.ExecTimes++
go models.DeleteOldRepositoryArchives()
}
}
c.Start()
}

Expand Down
16 changes: 16 additions & 0 deletions modules/setting/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,12 @@ var (
RunAtStart bool
Schedule string
} `ini:"cron.check_repo_stats"`
ArchiveCleanup struct {
Enabled bool
RunAtStart bool
Schedule string
OlderThan time.Duration
} `ini:"cron.archive_cleanup"`
}{
UpdateMirror: struct {
Enabled bool
Expand Down Expand Up @@ -334,6 +340,16 @@ var (
RunAtStart: true,
Schedule: "@every 24h",
},
ArchiveCleanup: struct {
Enabled bool
RunAtStart bool
Schedule string
OlderThan time.Duration
}{
RunAtStart: true,
Schedule: "@every 24h",
OlderThan: 24 * time.Hour,
},
}

// Git settings
Expand Down

0 comments on commit 42835c7

Please sign in to comment.