Browse Source

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
tags/v1.15.0-rc1
zeripath 3 years ago
parent
commit
82d1a7fb17
No account linked to committer's email address
2 changed files with 13 additions and 5 deletions
  1. 2
    5
      models/repo.go
  2. 11
    0
      modules/repository/check.go

+ 2
- 5
models/repo.go View File

@@ -740,15 +740,12 @@ func (repo *Repository) updateSize(e Engine) error {
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 {
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)
return err
}

+ 11
- 0
modules/repository/check.go View File

@@ -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)
}

// 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
},
); err != nil {

Loading…
Cancel
Save