Skip to content

Commit

Permalink
Issue #657 - extract functions to assemble package mutex keys
Browse files Browse the repository at this point in the history
- needed a separate one in packagerevision.go for the Create()
  - since we're putting that key together from parts as yet
    uncombined into a proper PackageRevision name
- also extracted conflict error message assembly for the Create operation

nephio-project/nephio#657
  • Loading branch information
JamesMcDermott committed Oct 9, 2024
1 parent 03ee3e1 commit 7ecf14c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 16 deletions.
6 changes: 5 additions & 1 deletion pkg/registry/porch/packagecommon.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ func (r *packageCommon) updatePackageRevision(ctx context.Context, name string,
return nil, false, apierrors.NewBadRequest("namespace must be specified")
}

pkgMutexKey := fmt.Sprintf("%s/%s", ns, name)
pkgMutexKey := getPackageMutexKey(ns, name)
pkgMutex := getMutexForPackage(pkgMutexKey)

locked := pkgMutex.TryLock()
Expand Down Expand Up @@ -490,6 +490,10 @@ func (r *packageCommon) validateUpdate(ctx context.Context, newRuntimeObj runtim
return nil
}

func getPackageMutexKey(namespace, name string) string {
return fmt.Sprintf("%s/%s", namespace, name)
}

func getMutexForPackage(pkgMutexKey string) *sync.Mutex {
mutexMapMutex.Lock()
defer mutexMapMutex.Unlock()
Expand Down
38 changes: 24 additions & 14 deletions pkg/registry/porch/packagerevision.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,23 +164,12 @@ func (r *packageRevisions) Create(ctx context.Context, runtimeObject runtime.Obj
parentPackage = p
}

pkgMutexKey := fmt.Sprintf("%s-%s-%s-%s",
newApiPkgRev.Namespace,
newApiPkgRev.Spec.RepositoryName,
newApiPkgRev.Spec.PackageName,
newApiPkgRev.Spec.WorkspaceName)

pkgMutexKey := uncreatedPackageMutexKey(newApiPkgRev)
pkgMutex := getMutexForPackage(pkgMutexKey)

locked := pkgMutex.TryLock()
if !locked {

conflictError := fmt.Errorf(
fmt.Sprintf(ConflictErrorMsgBase, "to create package revision with details namespace=%q, repository=%q, package=%q,workspace=%q"),
newApiPkgRev.Namespace,
newApiPkgRev.Spec.RepositoryName,
newApiPkgRev.Spec.PackageName,
newApiPkgRev.Spec.WorkspaceName)
conflictError := creationConflictError(newApiPkgRev)
return nil,
apierrors.NewConflict(
api.Resource("packagerevisions"),
Expand Down Expand Up @@ -250,7 +239,7 @@ func (r *packageRevisions) Delete(ctx context.Context, name string, deleteValida
return nil, false, err
}

pkgMutexKey := fmt.Sprintf("%s/%s", ns, name)
pkgMutexKey := getPackageMutexKey(ns, name)
pkgMutex := getMutexForPackage(pkgMutexKey)

locked := pkgMutex.TryLock()
Expand All @@ -270,3 +259,24 @@ func (r *packageRevisions) Delete(ctx context.Context, name string, deleteValida
// TODO: Should we do an async delete?
return apiPkgRev, true, nil
}

func uncreatedPackageMutexKey(newApiPkgRev *api.PackageRevision) string {
return fmt.Sprintf("%s-%s-%s-%s",
newApiPkgRev.Namespace,
newApiPkgRev.Spec.RepositoryName,
newApiPkgRev.Spec.PackageName,
newApiPkgRev.Spec.WorkspaceName)
}

func creationConflictError(newApiPkgRev *api.PackageRevision) error {
return fmt.Errorf(
fmt.Sprintf(
ConflictErrorMsgBase,
"to create package revision with details namespace=%q, repository=%q, package=%q,workspace=%q"
),
newApiPkgRev.Namespace,
newApiPkgRev.Spec.RepositoryName,
newApiPkgRev.Spec.PackageName,
newApiPkgRev.Spec.WorkspaceName
)
}
2 changes: 1 addition & 1 deletion pkg/registry/porch/packagerevisionresources.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ func (r *packageRevisionResources) Update(ctx context.Context, name string, objI
return nil, false, apierrors.NewBadRequest("namespace must be specified")
}

pkgMutexKey := fmt.Sprintf("%s/%s", ns, name)
pkgMutexKey := getPackageMutexKey(ns, name)
pkgMutex := getMutexForPackage(pkgMutexKey)
locked := pkgMutex.TryLock()
if !locked {
Expand Down

0 comments on commit 7ecf14c

Please sign in to comment.