Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use per package global lock for container uploads instead of memory lock #31860

Merged
merged 11 commits into from
Oct 11, 2024
8 changes: 4 additions & 4 deletions routers/api/packages/container/blob.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,19 @@ import (
"fmt"
"os"
"strings"
"sync"

"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
container_model "code.gitea.io/gitea/models/packages/container"
"code.gitea.io/gitea/modules/log"
packages_module "code.gitea.io/gitea/modules/packages"
container_module "code.gitea.io/gitea/modules/packages/container"
"code.gitea.io/gitea/modules/sync"
"code.gitea.io/gitea/modules/util"
packages_service "code.gitea.io/gitea/services/packages"
)

var uploadVersionMutex sync.Mutex
var uploadVersionMutex = sync.NewStatusTable()

// saveAsPackageBlob creates a package blob from an upload
// The uploaded blob gets stored in a special upload version to link them to the package/image
Expand Down Expand Up @@ -95,7 +95,8 @@ func getOrCreateUploadVersion(ctx context.Context, pi *packages_service.PackageI

// FIXME: Replace usage of mutex with database transaction
// https://github.com/go-gitea/gitea/pull/21862
uploadVersionMutex.Lock()
uploadVersionMutex.Start(strings.ToLower(pi.Name))
wxiaoguang marked this conversation as resolved.
Show resolved Hide resolved
defer uploadVersionMutex.Stop(strings.ToLower(pi.Name))
err := db.WithTx(ctx, func(ctx context.Context) error {
created := true
p := &packages_model.Package{
Expand Down Expand Up @@ -140,7 +141,6 @@ func getOrCreateUploadVersion(ctx context.Context, pi *packages_service.PackageI

return nil
})
uploadVersionMutex.Unlock()

return uploadVersion, err
}
Expand Down
Loading