diff --git a/pkg/distlock/reqbuilder/metadata_cache.go b/pkg/distlock/reqbuilder/metadata_cache.go new file mode 100644 index 0000000..0638a0f --- /dev/null +++ b/pkg/distlock/reqbuilder/metadata_cache.go @@ -0,0 +1,63 @@ +package reqbuilder + +import ( + "gitlink.org.cn/cloudream/common/pkg/distlock" + "gitlink.org.cn/cloudream/common/pkg/distlock/lockprovider" +) + +type MetadataCacheLockReqBuilder struct { + *MetadataLockReqBuilder +} + +func (b *MetadataLockReqBuilder) Cache() *MetadataCacheLockReqBuilder { + return &MetadataCacheLockReqBuilder{MetadataLockReqBuilder: b} +} + +func (b *MetadataCacheLockReqBuilder) ReadOne(objectID int) *MetadataCacheLockReqBuilder { + b.locks = append(b.locks, distlock.Lock{ + Path: b.makePath("Cache"), + Name: lockprovider.METADATA_ELEMENT_READ_LOCK, + Target: *lockprovider.NewStringLockTarget().Add(objectID), + }) + return b +} +func (b *MetadataCacheLockReqBuilder) WriteOne(objectID int) *MetadataCacheLockReqBuilder { + b.locks = append(b.locks, distlock.Lock{ + Path: b.makePath("Cache"), + Name: lockprovider.METADATA_ELEMENT_WRITE_LOCK, + Target: *lockprovider.NewStringLockTarget().Add(objectID), + }) + return b +} +func (b *MetadataCacheLockReqBuilder) CreateOne() *MetadataCacheLockReqBuilder { + b.locks = append(b.locks, distlock.Lock{ + Path: b.makePath("Cache"), + Name: lockprovider.METADATA_ELEMENT_CREATE_LOCK, + Target: *lockprovider.NewStringLockTarget(), + }) + return b +} +func (b *MetadataCacheLockReqBuilder) ReadAny() *MetadataCacheLockReqBuilder { + b.locks = append(b.locks, distlock.Lock{ + Path: b.makePath("Cache"), + Name: lockprovider.METADATA_SET_READ_LOCK, + Target: *lockprovider.NewStringLockTarget(), + }) + return b +} +func (b *MetadataCacheLockReqBuilder) WriteAny() *MetadataCacheLockReqBuilder { + b.locks = append(b.locks, distlock.Lock{ + Path: b.makePath("Cache"), + Name: lockprovider.METADATA_SET_WRITE_LOCK, + Target: *lockprovider.NewStringLockTarget(), + }) + return b +} +func (b *MetadataCacheLockReqBuilder) CreateAny() *MetadataCacheLockReqBuilder { + b.locks = append(b.locks, distlock.Lock{ + Path: b.makePath("Cache"), + Name: lockprovider.METADATA_SET_CREATE_LOCK, + Target: *lockprovider.NewStringLockTarget(), + }) + return b +} diff --git a/pkg/distlock/reqbuilder/metadata_object.go b/pkg/distlock/reqbuilder/metadata_object.go index 14c7acf..0fe7d46 100644 --- a/pkg/distlock/reqbuilder/metadata_object.go +++ b/pkg/distlock/reqbuilder/metadata_object.go @@ -29,11 +29,11 @@ func (b *MetadataObjectLockReqBuilder) WriteOne(objectID int) *MetadataObjectLoc }) return b } -func (b *MetadataObjectLockReqBuilder) CreateOne() *MetadataObjectLockReqBuilder { +func (b *MetadataObjectLockReqBuilder) CreateOne(bucketID int, objectName string) *MetadataObjectLockReqBuilder { b.locks = append(b.locks, distlock.Lock{ Path: b.makePath("Object"), Name: lockprovider.METADATA_ELEMENT_CREATE_LOCK, - Target: *lockprovider.NewStringLockTarget(), + Target: *lockprovider.NewStringLockTarget().Add(bucketID, objectName), }) return b } diff --git a/pkg/distlock/reqbuilder/metadata_user_bucket.go b/pkg/distlock/reqbuilder/metadata_user_bucket.go index ffab827..5328257 100644 --- a/pkg/distlock/reqbuilder/metadata_user_bucket.go +++ b/pkg/distlock/reqbuilder/metadata_user_bucket.go @@ -13,19 +13,19 @@ func (b *MetadataLockReqBuilder) UserBucket() *MetadataUserBucketLockReqBuilder return &MetadataUserBucketLockReqBuilder{MetadataLockReqBuilder: b} } -func (b *MetadataUserBucketLockReqBuilder) ReadOne(bucketID int) *MetadataUserBucketLockReqBuilder { +func (b *MetadataUserBucketLockReqBuilder) ReadOne(userID int, bucketID int) *MetadataUserBucketLockReqBuilder { b.locks = append(b.locks, distlock.Lock{ Path: b.makePath("UserBucket"), Name: lockprovider.METADATA_ELEMENT_READ_LOCK, - Target: *lockprovider.NewStringLockTarget().Add(bucketID), + Target: *lockprovider.NewStringLockTarget().Add(userID, bucketID), }) return b } -func (b *MetadataUserBucketLockReqBuilder) WriteOne(bucketID int) *MetadataUserBucketLockReqBuilder { +func (b *MetadataUserBucketLockReqBuilder) WriteOne(userID int, bucketID int) *MetadataUserBucketLockReqBuilder { b.locks = append(b.locks, distlock.Lock{ Path: b.makePath("UserBucket"), Name: lockprovider.METADATA_ELEMENT_WRITE_LOCK, - Target: *lockprovider.NewStringLockTarget().Add(bucketID), + Target: *lockprovider.NewStringLockTarget().Add(userID, bucketID), }) return b }