Skip to content

Commit 87c7405

Browse files
committed
use globallock lock
1 parent c34cc96 commit 87c7405

File tree

1 file changed

+12
-8
lines changed
  • routers/api/packages/container

1 file changed

+12
-8
lines changed

routers/api/packages/container/blob.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,14 @@ import (
1414
"code.gitea.io/gitea/models/db"
1515
packages_model "code.gitea.io/gitea/models/packages"
1616
container_model "code.gitea.io/gitea/models/packages/container"
17+
"code.gitea.io/gitea/modules/globallock"
1718
"code.gitea.io/gitea/modules/log"
1819
packages_module "code.gitea.io/gitea/modules/packages"
1920
container_module "code.gitea.io/gitea/modules/packages/container"
20-
"code.gitea.io/gitea/modules/sync"
2121
"code.gitea.io/gitea/modules/util"
2222
packages_service "code.gitea.io/gitea/services/packages"
2323
)
2424

25-
var uploadVersionMutex = sync.NewExclusivePool()
26-
2725
// saveAsPackageBlob creates a package blob from an upload
2826
// The uploaded blob gets stored in a special upload version to link them to the package/image
2927
func saveAsPackageBlob(ctx context.Context, hsr packages_module.HashedSizeReader, pci *packages_service.PackageCreationInfo) (*packages_model.PackageBlob, error) { //nolint:unparam
@@ -90,14 +88,20 @@ func mountBlob(ctx context.Context, pi *packages_service.PackageInfo, pb *packag
9088
})
9189
}
9290

91+
func containerPkgName(piName string) string {
92+
return "pkg_container_" + strings.ToLower(piName)
93+
}
94+
9395
func getOrCreateUploadVersion(ctx context.Context, pi *packages_service.PackageInfo) (*packages_model.PackageVersion, error) {
9496
var uploadVersion *packages_model.PackageVersion
9597

96-
// FIXME: Replace usage of mutex with database transaction
97-
// https://github.com/go-gitea/gitea/pull/21862
98-
uploadVersionMutex.CheckIn(strings.ToLower(pi.Name))
99-
defer uploadVersionMutex.CheckOut(strings.ToLower(pi.Name))
100-
err := db.WithTx(ctx, func(ctx context.Context) error {
98+
ctx, releaser, err := globallock.Lock(ctx, containerPkgName(pi.Name))
99+
if err != nil {
100+
return nil, err
101+
}
102+
defer releaser()
103+
104+
err = db.WithTx(ctx, func(ctx context.Context) error {
101105
created := true
102106
p := &packages_model.Package{
103107
OwnerID: pi.Owner.ID,

0 commit comments

Comments
 (0)