Skip to content

Commit bc72567

Browse files
add locker
1 parent b37e591 commit bc72567

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

routers/api/packages/arch/arch.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"strings"
1515

1616
packages_model "code.gitea.io/gitea/models/packages"
17+
"code.gitea.io/gitea/modules/globallock"
1718
packages_module "code.gitea.io/gitea/modules/packages"
1819
arch_module "code.gitea.io/gitea/modules/packages/arch"
1920
"code.gitea.io/gitea/modules/util"
@@ -47,9 +48,18 @@ func GetRepositoryKey(ctx *context.Context) {
4748
})
4849
}
4950

51+
func refreshLocker(ctx *context.Context, group string) (globallock.ReleaseFunc, error) {
52+
return globallock.Lock(ctx, fmt.Sprintf("pkg_arch_pkg_%s", group))
53+
}
54+
5055
func PushPackage(ctx *context.Context) {
5156
group := ctx.PathParam("group")
52-
57+
releaser, err := refreshLocker(ctx, group)
58+
if err != nil {
59+
apiError(ctx, http.StatusInternalServerError, err)
60+
return
61+
}
62+
defer releaser()
5363
upload, needToClose, err := ctx.UploadStream()
5464
if err != nil {
5565
apiError(ctx, http.StatusInternalServerError, err)
@@ -211,6 +221,12 @@ func RemovePackage(ctx *context.Context) {
211221
ver = ctx.PathParam("version")
212222
pkgArch = ctx.PathParam("arch")
213223
)
224+
releaser, err := refreshLocker(ctx, group)
225+
if err != nil {
226+
apiError(ctx, http.StatusInternalServerError, err)
227+
return
228+
}
229+
defer releaser()
214230
pv, err := packages_model.GetVersionByNameAndVersion(
215231
ctx, ctx.Package.Owner.ID, packages_model.TypeArch, pkg, ver,
216232
)

services/packages/arch/repository.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818

1919
packages_model "code.gitea.io/gitea/models/packages"
2020
user_model "code.gitea.io/gitea/models/user"
21+
"code.gitea.io/gitea/modules/globallock"
2122
"code.gitea.io/gitea/modules/httplib"
2223
packages_module "code.gitea.io/gitea/modules/packages"
2324
arch_module "code.gitea.io/gitea/modules/packages/arch"
@@ -103,6 +104,11 @@ func NewFileSign(ctx context.Context, ownerID int64, input io.Reader) (*packages
103104

104105
// BuildPacmanDB Create db signature cache
105106
func BuildPacmanDB(ctx context.Context, ownerID int64, group, arch string) error {
107+
lock, err := globallock.Lock(ctx, fmt.Sprintf("pkg_arch_db_%s", group))
108+
if err != nil {
109+
return err
110+
}
111+
defer lock()
106112
pv, err := GetOrCreateRepositoryVersion(ctx, ownerID)
107113
if err != nil {
108114
return err

0 commit comments

Comments
 (0)