Update repository size on cron gc task (#15177)
git gc cron could change the size of the repository therefore we should update the size of the repo stored in our database. Also significantly improve the efficiency of counting lfs associated with the repository
This commit is contained in:
parent
5ad65c8f5d
commit
82d1a7fb17
2 changed files with 13 additions and 5 deletions
|
@ -740,15 +740,12 @@ func (repo *Repository) updateSize(e Engine) error {
|
||||||
return fmt.Errorf("updateSize: %v", err)
|
return fmt.Errorf("updateSize: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
objs, err := repo.GetLFSMetaObjects(-1, 0)
|
lfsSize, err := e.Where("repository_id = ?", repo.ID).SumInt(new(LFSMetaObject), "size")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("updateSize: GetLFSMetaObjects: %v", err)
|
return fmt.Errorf("updateSize: GetLFSMetaObjects: %v", err)
|
||||||
}
|
}
|
||||||
for _, obj := range objs {
|
|
||||||
size += obj.Size
|
|
||||||
}
|
|
||||||
|
|
||||||
repo.Size = size
|
repo.Size = size + lfsSize
|
||||||
_, err = e.ID(repo.ID).Cols("size").Update(repo)
|
_, err = e.ID(repo.ID).Cols("size").Update(repo)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,17 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...string) erro
|
||||||
}
|
}
|
||||||
return fmt.Errorf("Repository garbage collection failed in repo: %s: Error: %v", repo.FullName(), err)
|
return fmt.Errorf("Repository garbage collection failed in repo: %s: Error: %v", repo.FullName(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now update the size of the repository
|
||||||
|
if err := repo.UpdateSize(models.DefaultDBContext()); err != nil {
|
||||||
|
log.Error("Updating size as part of garbage collection failed for %v. Stdout: %s\nError: %v", repo, stdout, err)
|
||||||
|
desc := fmt.Sprintf("Updating size as part of garbage collection failed for %s. Stdout: %s\nError: %v", repo.RepoPath(), stdout, err)
|
||||||
|
if err = models.CreateRepositoryNotice(desc); err != nil {
|
||||||
|
log.Error("CreateRepositoryNotice: %v", err)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("Updating size as part of garbage collection failed in repo: %s: Error: %v", repo.FullName(), err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
|
|
Reference in a new issue