mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-03 18:24:29 +00:00
refactor: retry file remove/rename when a file is busy and clean up os detection (#38588)
Rename functions "util.Remove" (remove.go) to "util.RemoveWithRetry" (file_retry.go) and add comments to clarify their behaviors, also add tests. Refactor callers: when no concurrent access (cmd cli, migration, app init, test), use "os.Xxx" directly. More details are in `modules/util/file_retry.go` By the way, clean up OS (windows) detection, make FileURLToPath test always run
This commit is contained in:
@@ -152,7 +152,7 @@ func (rfw *RotatingFileWriter) DoRotate() error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := util.Rename(fd.Name(), fname); err != nil {
|
||||
if err := util.RenameWithRetry(fd.Name(), fname); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -203,12 +203,12 @@ func compressOldFile(fname string, compressionLevel int) error {
|
||||
if err != nil {
|
||||
_ = zw.Close()
|
||||
_ = fw.Close()
|
||||
_ = util.Remove(fname + ".gz")
|
||||
_ = util.RemoveWithRetry(fname + ".gz")
|
||||
return fmt.Errorf("compressOldFile: failed to write to gz file: %w", err)
|
||||
}
|
||||
_ = reader.Close()
|
||||
|
||||
err = util.Remove(fname)
|
||||
err = util.RemoveWithRetry(fname)
|
||||
if err != nil {
|
||||
return fmt.Errorf("compressOldFile: failed to delete old file: %w", err)
|
||||
}
|
||||
@@ -235,7 +235,9 @@ func deleteOldFiles(dir, prefix string, removeBefore time.Time) {
|
||||
}
|
||||
if info.ModTime().Before(removeBefore) {
|
||||
if strings.HasPrefix(filepath.Base(path), prefix) {
|
||||
return util.Remove(path)
|
||||
if err = util.RemoveWithRetry(path); err != nil && !os.IsNotExist(err) {
|
||||
errorf("deleteOldFiles: failed to delete old file %s: %v", path, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user