Browse Source

取消db模块的sql包;给CreateBucket接口增加上锁过程

pull/1/head
Sydonian 3 years ago
parent
commit
085ac70423
9 changed files with 216 additions and 86 deletions
  1. +3
    -2
      pkg/distlock/lockprovider/string_lock_target.go
  2. +2
    -11
      pkg/distlock/reqbuilder/ipfs.go
  3. +15
    -0
      pkg/distlock/reqbuilder/lock_request_builder.go
  4. +1
    -61
      pkg/distlock/reqbuilder/metadata.go
  5. +63
    -0
      pkg/distlock/reqbuilder/metadata_bucket.go
  6. +63
    -0
      pkg/distlock/reqbuilder/metadata_node.go
  7. +63
    -0
      pkg/distlock/reqbuilder/metadata_user_bucket.go
  8. +3
    -11
      pkg/distlock/reqbuilder/storage.go
  9. +3
    -1
      pkg/distlock/service/mutex.go

+ 3
- 2
pkg/distlock/lockprovider/string_lock_target.go View File

@@ -15,9 +15,10 @@ func NewStringLockTarget() *StringLockTarget {
return &StringLockTarget{}
}

func (t *StringLockTarget) AddComponent(values ...any) *StringLockTarget {
// Add 添加一个Component,并将其内容设置为compValues
func (t *StringLockTarget) Add(compValues ...any) *StringLockTarget {
t.Components = append(t.Components, StringLockTargetComponet{
Values: lo.Map(values, func(val any, index int) string { return fmt.Sprintf("%v", val) }),
Values: lo.Map(compValues, func(val any, index int) string { return fmt.Sprintf("%v", val) }),
})

return t


+ 2
- 11
pkg/distlock/reqbuilder/ipfs.go View File

@@ -14,20 +14,11 @@ type IPFSLockReqBuilder struct {
func (b *LockRequestBuilder) IPFS() *IPFSLockReqBuilder {
return &IPFSLockReqBuilder{LockRequestBuilder: b}
}

func (b *MetadataLockReqBuilder) IPFS() *IPFSLockReqBuilder {
return &IPFSLockReqBuilder{LockRequestBuilder: b.LockRequestBuilder}
}

func (b *StorageLockReqBuilder) IPFS() *IPFSLockReqBuilder {
return &IPFSLockReqBuilder{LockRequestBuilder: b.LockRequestBuilder}
}

func (b *IPFSLockReqBuilder) ReadOneRep(nodeID int, fileHash string) *IPFSLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath(nodeID),
Name: lockprovider.IPFS_ELEMENT_READ_LOCK,
Target: *lockprovider.NewStringLockTarget().AddComponent(fileHash),
Target: *lockprovider.NewStringLockTarget().Add(fileHash),
})
return b
}
@@ -36,7 +27,7 @@ func (b *IPFSLockReqBuilder) WriteOneRep(nodeID int, fileHash string) *IPFSLockR
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath(nodeID),
Name: lockprovider.IPFS_ELEMENT_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget().AddComponent(fileHash),
Target: *lockprovider.NewStringLockTarget().Add(fileHash),
})
return b
}


+ 15
- 0
pkg/distlock/reqbuilder/lock_request_builder.go View File

@@ -2,6 +2,7 @@ package reqbuilder

import (
"gitlink.org.cn/cloudream/common/pkg/distlock"
"gitlink.org.cn/cloudream/common/pkg/distlock/service"
mylo "gitlink.org.cn/cloudream/common/utils/lo"
)

@@ -9,8 +10,22 @@ type LockRequestBuilder struct {
locks []distlock.Lock
}

func NewBuilder() *LockRequestBuilder {
return &LockRequestBuilder{}
}

func (b *LockRequestBuilder) Build() distlock.LockRequest {
return distlock.LockRequest{
Locks: mylo.ArrayClone(b.locks),
}
}

func (b *LockRequestBuilder) MutextLock(svc *service.Service) (*service.Mutex, error) {
mutex := service.NewMutex(svc, b.Build())
err := mutex.Lock()
if err != nil {
return nil, err
}

return mutex, nil
}

+ 1
- 61
pkg/distlock/reqbuilder/metadata.go View File

@@ -1,9 +1,6 @@
package reqbuilder

import (
"gitlink.org.cn/cloudream/common/pkg/distlock"
"gitlink.org.cn/cloudream/common/pkg/distlock/lockprovider"
)
import "gitlink.org.cn/cloudream/common/pkg/distlock"

type MetadataLockReqBuilder struct {
*LockRequestBuilder
@@ -13,63 +10,6 @@ func (b *LockRequestBuilder) Metadata() *MetadataLockReqBuilder {
return &MetadataLockReqBuilder{LockRequestBuilder: b}
}

func (b *IPFSLockReqBuilder) Metadata() *MetadataLockReqBuilder {
return &MetadataLockReqBuilder{LockRequestBuilder: b.LockRequestBuilder}
}

func (b *StorageLockReqBuilder) Metadata() *MetadataLockReqBuilder {
return &MetadataLockReqBuilder{LockRequestBuilder: b.LockRequestBuilder}
}

func (b *MetadataLockReqBuilder) ReadOneNode(nodeID int) *MetadataLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_ELEMENT_READ_LOCK,
Target: *lockprovider.NewStringLockTarget().AddComponent(nodeID),
})
return b
}
func (b *MetadataLockReqBuilder) WriteOneNode(nodeID int) *MetadataLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_ELEMENT_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget().AddComponent(nodeID),
})
return b
}
func (b *MetadataLockReqBuilder) CreateOneNode() *MetadataLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_ELEMENT_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataLockReqBuilder) ReadAnyNode() *MetadataLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_SET_READ_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataLockReqBuilder) WriteAnyNode(nodeID int) *MetadataLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_SET_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataLockReqBuilder) CreateAnyNode() *MetadataLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_SET_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}

func (b *MetadataLockReqBuilder) makePath(tableName string) []string {
return []string{distlock.METADATA_LOCK_PATH_PREFIX, tableName}
}

+ 63
- 0
pkg/distlock/reqbuilder/metadata_bucket.go View File

@@ -0,0 +1,63 @@
package reqbuilder

import (
"gitlink.org.cn/cloudream/common/pkg/distlock"
"gitlink.org.cn/cloudream/common/pkg/distlock/lockprovider"
)

type MetadataBucketLockReqBuilder struct {
*MetadataLockReqBuilder
}

func (b *MetadataLockReqBuilder) Bucket() *MetadataBucketLockReqBuilder {
return &MetadataBucketLockReqBuilder{MetadataLockReqBuilder: b}
}

func (b *MetadataBucketLockReqBuilder) ReadOne(bucketID int) *MetadataBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Bucket"),
Name: lockprovider.METADATA_ELEMENT_READ_LOCK,
Target: *lockprovider.NewStringLockTarget().Add(bucketID),
})
return b
}
func (b *MetadataBucketLockReqBuilder) WriteOne(bucketID int) *MetadataBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Bucket"),
Name: lockprovider.METADATA_ELEMENT_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget().Add(bucketID),
})
return b
}
func (b *MetadataBucketLockReqBuilder) CreateOne(userID int, bucketName string) *MetadataBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Bucket"),
Name: lockprovider.METADATA_ELEMENT_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget().Add(userID, bucketName),
})
return b
}
func (b *MetadataBucketLockReqBuilder) ReadAny() *MetadataBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Bucket"),
Name: lockprovider.METADATA_SET_READ_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataBucketLockReqBuilder) WriteAny() *MetadataBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Bucket"),
Name: lockprovider.METADATA_SET_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataBucketLockReqBuilder) CreateAny() *MetadataBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Bucket"),
Name: lockprovider.METADATA_SET_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}

+ 63
- 0
pkg/distlock/reqbuilder/metadata_node.go View File

@@ -0,0 +1,63 @@
package reqbuilder

import (
"gitlink.org.cn/cloudream/common/pkg/distlock"
"gitlink.org.cn/cloudream/common/pkg/distlock/lockprovider"
)

type MetadataNodeLockReqBuilder struct {
*MetadataLockReqBuilder
}

func (b *MetadataLockReqBuilder) Node() *MetadataNodeLockReqBuilder {
return &MetadataNodeLockReqBuilder{MetadataLockReqBuilder: b}
}

func (b *MetadataNodeLockReqBuilder) ReadOne(nodeID int) *MetadataNodeLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_ELEMENT_READ_LOCK,
Target: *lockprovider.NewStringLockTarget().Add(nodeID),
})
return b
}
func (b *MetadataNodeLockReqBuilder) WriteOne(nodeID int) *MetadataNodeLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_ELEMENT_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget().Add(nodeID),
})
return b
}
func (b *MetadataNodeLockReqBuilder) CreateOne() *MetadataNodeLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_ELEMENT_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataNodeLockReqBuilder) ReadAny() *MetadataNodeLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_SET_READ_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataNodeLockReqBuilder) WriteAny() *MetadataNodeLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_SET_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataNodeLockReqBuilder) CreateAny() *MetadataNodeLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("Node"),
Name: lockprovider.METADATA_SET_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}

+ 63
- 0
pkg/distlock/reqbuilder/metadata_user_bucket.go View File

@@ -0,0 +1,63 @@
package reqbuilder

import (
"gitlink.org.cn/cloudream/common/pkg/distlock"
"gitlink.org.cn/cloudream/common/pkg/distlock/lockprovider"
)

type MetadataUserBucketLockReqBuilder struct {
*MetadataLockReqBuilder
}

func (b *MetadataLockReqBuilder) UserBucket() *MetadataUserBucketLockReqBuilder {
return &MetadataUserBucketLockReqBuilder{MetadataLockReqBuilder: b}
}

func (b *MetadataUserBucketLockReqBuilder) ReadOne(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),
})
return b
}
func (b *MetadataUserBucketLockReqBuilder) WriteOne(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),
})
return b
}
func (b *MetadataUserBucketLockReqBuilder) CreateOne(userID int, bucketID int) *MetadataUserBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("UserBucket"),
Name: lockprovider.METADATA_ELEMENT_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget().Add(userID, bucketID),
})
return b
}
func (b *MetadataUserBucketLockReqBuilder) ReadAny() *MetadataUserBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("UserBucket"),
Name: lockprovider.METADATA_SET_READ_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataUserBucketLockReqBuilder) WriteAny() *MetadataUserBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("UserBucket"),
Name: lockprovider.METADATA_SET_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}
func (b *MetadataUserBucketLockReqBuilder) CreateAny() *MetadataUserBucketLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath("UserBucket"),
Name: lockprovider.METADATA_SET_CREATE_LOCK,
Target: *lockprovider.NewStringLockTarget(),
})
return b
}

+ 3
- 11
pkg/distlock/reqbuilder/storage.go View File

@@ -15,19 +15,11 @@ func (b *LockRequestBuilder) Storage() *StorageLockReqBuilder {
return &StorageLockReqBuilder{LockRequestBuilder: b}
}

func (b *MetadataLockReqBuilder) Storage() *StorageLockReqBuilder {
return &StorageLockReqBuilder{LockRequestBuilder: b.LockRequestBuilder}
}

func (b *IPFSLockReqBuilder) Storage() *StorageLockReqBuilder {
return &StorageLockReqBuilder{LockRequestBuilder: b.LockRequestBuilder}
}

func (b *StorageLockReqBuilder) ReadOneObject(storageID int, fileHash string) *StorageLockReqBuilder {
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath(storageID),
Name: lockprovider.STORAGE_ELEMENT_READ_LOCK,
Target: *lockprovider.NewStringLockTarget().AddComponent(fileHash),
Target: *lockprovider.NewStringLockTarget().Add(fileHash),
})
return b
}
@@ -36,7 +28,7 @@ func (b *StorageLockReqBuilder) WriteOneObject(storageID int, fileHash string) *
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath(storageID),
Name: lockprovider.STORAGE_ELEMENT_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget().AddComponent(fileHash),
Target: *lockprovider.NewStringLockTarget().Add(fileHash),
})
return b
}
@@ -45,7 +37,7 @@ func (b *StorageLockReqBuilder) CreateOneObject(storageID int, fileHash string)
b.locks = append(b.locks, distlock.Lock{
Path: b.makePath(storageID),
Name: lockprovider.STORAGE_ELEMENT_WRITE_LOCK,
Target: *lockprovider.NewStringLockTarget().AddComponent(fileHash),
Target: *lockprovider.NewStringLockTarget().Add(fileHash),
})
return b
}


+ 3
- 1
pkg/distlock/service/mutex.go View File

@@ -1,6 +1,8 @@
package service

import "gitlink.org.cn/cloudream/common/pkg/distlock"
import (
"gitlink.org.cn/cloudream/common/pkg/distlock"
)

type Mutex struct {
svc *Service


Loading…
Cancel
Save