base.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package lockman
  15. import "context"
  16. type SBaseLockManager struct {
  17. manager ILockManager
  18. }
  19. func NewBaseLockManger(m ILockManager) *SBaseLockManager {
  20. return &SBaseLockManager{manager: m}
  21. }
  22. func (m *SBaseLockManager) LockClass(ctx context.Context, manager ILockedClass, projectId string) {
  23. key := getClassKey(manager, projectId)
  24. m.manager.LockKey(ctx, key)
  25. }
  26. func (m *SBaseLockManager) ReleaseClass(ctx context.Context, manager ILockedClass, projectId string) {
  27. key := getClassKey(manager, projectId)
  28. m.manager.UnlockKey(ctx, key)
  29. }
  30. func (m *SBaseLockManager) LockObject(ctx context.Context, model ILockedObject) {
  31. key := getObjectKey(model)
  32. m.manager.LockKey(ctx, key)
  33. }
  34. func (m *SBaseLockManager) ReleaseObject(ctx context.Context, model ILockedObject) {
  35. key := getObjectKey(model)
  36. m.manager.UnlockKey(ctx, key)
  37. }
  38. func (m *SBaseLockManager) LockRawObject(ctx context.Context, resName string, resId string) {
  39. key := getRawObjectKey(resName, resId)
  40. m.manager.LockKey(ctx, key)
  41. }
  42. func (m *SBaseLockManager) ReleaseRawObject(ctx context.Context, resName string, resId string) {
  43. key := getRawObjectKey(resName, resId)
  44. m.manager.UnlockKey(ctx, key)
  45. }
  46. func (m *SBaseLockManager) LockJointObject(ctx context.Context, model ILockedObject, model2 ILockedObject) {
  47. key := getJointObjectKey(model, model2)
  48. m.manager.LockKey(ctx, key)
  49. }
  50. func (m *SBaseLockManager) ReleaseJointObject(ctx context.Context, model ILockedObject, model2 ILockedObject) {
  51. key := getJointObjectKey(model, model2)
  52. m.manager.UnlockKey(ctx, key)
  53. }