| @@ -227,9 +227,9 @@ func (n Node) String() string { | |||||
| } | } | ||||
| type PinnedObject struct { | type PinnedObject struct { | ||||
| ObjectID ObjectID `db:"ObjectID" json:"objectID"` | |||||
| NodeID NodeID `db:"NodeID" json:"nodeID"` | |||||
| CreateTime time.Time `db:"CreateTime" json:"createTime"` | |||||
| ObjectID ObjectID `gorm:"column:ObjectID; primaryKey" json:"objectID"` | |||||
| StorageID StorageID `gorm:"column:StorageID; primaryKey" json:"storageID"` | |||||
| CreateTime time.Time `gorm:"column:CreateTime" json:"createTime"` | |||||
| } | } | ||||
| type Bucket struct { | type Bucket struct { | ||||
| @@ -271,44 +271,3 @@ type CodeError struct { | |||||
| func (e *CodeError) Error() string { | func (e *CodeError) Error() string { | ||||
| return fmt.Sprintf("code: %s, message: %s", e.Code, e.Message) | return fmt.Sprintf("code: %s, message: %s", e.Code, e.Message) | ||||
| } | } | ||||
| type StorageAddress interface { | |||||
| GetType() string | |||||
| // 输出调试用的字符串,不要包含敏感信息 | |||||
| String() string | |||||
| } | |||||
| type Feature interface { | |||||
| GetType() string | |||||
| } | |||||
| type Storage struct { | |||||
| StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey; autoIncrement;"` | |||||
| Name string `json:"name" gorm:"column:Name; not null"` | |||||
| // 存储服务的地址,包含鉴权所需数据 | |||||
| Address StorageAddress `json:"address" gorm:"column:Address; type:json; not null; serializer:union"` | |||||
| // 存储服务拥有的特别功能 | |||||
| Features []Feature `json:"features" gorm:"column:Features; type:json; serializer:union"` | |||||
| } | |||||
| type ShardStoreConfig interface { | |||||
| GetType() string | |||||
| } | |||||
| type ShardStorage struct { | |||||
| StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey"` | |||||
| // 完全管理此存储服务的Hub的ID | |||||
| MasterHub NodeID `json:"masterHub" gorm:"column:MasterHub; not null"` | |||||
| // Shard存储空间在存储服务的目录 | |||||
| Root string `json:"root" gorm:"column:Root; not null"` | |||||
| // ShardStore配置数据 | |||||
| Config ShardStoreConfig `json:"config" gorm:"column:Config; type:json; not null; serializer:union"` | |||||
| } | |||||
| type SharedStorage struct { | |||||
| StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey"` | |||||
| // 调度文件时保存文件的根路径 | |||||
| LoadBase string `json:"loadBase" gorm:"column:LoadBase; not null"` | |||||
| // 回源数据时数据存放位置的根路径 | |||||
| DataReturnBase string `json:"dataReturnBase" gorm:"column:DataReturnBase; not null"` | |||||
| } | |||||
| @@ -0,0 +1,43 @@ | |||||
| package cdssdk | |||||
| import ( | |||||
| "fmt" | |||||
| "gitlink.org.cn/cloudream/common/pkgs/types" | |||||
| "gitlink.org.cn/cloudream/common/utils/serder" | |||||
| ) | |||||
| // 分片存储服务的配置数据 | |||||
| type ShardStoreConfig interface { | |||||
| GetType() string | |||||
| // 输出调试用的字符串,不要包含敏感信息 | |||||
| String() string | |||||
| } | |||||
| var _ = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[ShardStoreConfig]( | |||||
| (*LocalShardStorage)(nil), | |||||
| )), "type") | |||||
| type ShardStorage struct { | |||||
| StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey"` | |||||
| // 完全管理此存储服务的Hub的ID | |||||
| MasterHub NodeID `json:"masterHub" gorm:"column:MasterHub; not null"` | |||||
| // Shard存储空间在存储服务的目录 | |||||
| Root string `json:"root" gorm:"column:Root; not null"` | |||||
| // ShardStore配置数据 | |||||
| Config ShardStoreConfig `json:"config" gorm:"column:Config; type:json; not null; serializer:union"` | |||||
| } | |||||
| type LocalShardStorage struct { | |||||
| serder.Metadata `union:"Local"` | |||||
| Root string `json:"root"` | |||||
| MaxSize int64 `json:"maxSize"` | |||||
| } | |||||
| func (s *LocalShardStorage) GetType() string { | |||||
| return "Local" | |||||
| } | |||||
| func (s *LocalShardStorage) String() string { | |||||
| return fmt.Sprintf("Local[root=%s, maxSize=%d]", s.Root, s.MaxSize) | |||||
| } | |||||
| @@ -0,0 +1,47 @@ | |||||
| package cdssdk | |||||
| import ( | |||||
| "gitlink.org.cn/cloudream/common/pkgs/types" | |||||
| "gitlink.org.cn/cloudream/common/utils/serder" | |||||
| ) | |||||
| // 存储服务地址 | |||||
| type StorageAddress interface { | |||||
| GetType() string | |||||
| // 输出调试用的字符串,不要包含敏感信息 | |||||
| String() string | |||||
| } | |||||
| var _ = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[StorageAddress]( | |||||
| (*LocalStorageAddress)(nil), | |||||
| )), "type") | |||||
| type LocalStorageAddress struct { | |||||
| serder.Metadata `union:"Local"` | |||||
| } | |||||
| func (a *LocalStorageAddress) GetType() string { | |||||
| return "Local" | |||||
| } | |||||
| func (a *LocalStorageAddress) String() string { | |||||
| return "Local" | |||||
| } | |||||
| type Storage struct { | |||||
| StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey; autoIncrement;"` | |||||
| Name string `json:"name" gorm:"column:Name; not null"` | |||||
| // 存储服务的地址,包含鉴权所需数据 | |||||
| Address StorageAddress `json:"address" gorm:"column:Address; type:json; not null; serializer:union"` | |||||
| // 存储服务拥有的特别功能 | |||||
| Features []StorageFeature `json:"features" gorm:"column:Features; type:json; serializer:union"` | |||||
| } | |||||
| // 共享存储服务的配置数据 | |||||
| type SharedStorage struct { | |||||
| StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey"` | |||||
| // 调度文件时保存文件的根路径 | |||||
| LoadBase string `json:"loadBase" gorm:"column:LoadBase; not null"` | |||||
| // 回源数据时数据存放位置的根路径 | |||||
| DataReturnBase string `json:"dataReturnBase" gorm:"column:DataReturnBase; not null"` | |||||
| } | |||||
| @@ -0,0 +1,46 @@ | |||||
| package cdssdk | |||||
| import ( | |||||
| "gitlink.org.cn/cloudream/common/pkgs/types" | |||||
| "gitlink.org.cn/cloudream/common/utils/serder" | |||||
| ) | |||||
| // 存储服务特性 | |||||
| type StorageFeature interface { | |||||
| GetType() string | |||||
| // 输出调试用的字符串,不要包含敏感信息 | |||||
| String() string | |||||
| } | |||||
| var _ = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[StorageFeature]( | |||||
| (*BypassUploadFeature)(nil), | |||||
| (*MultipartUploadFeature)(nil), | |||||
| )), "type") | |||||
| // 存储服务支持被非MasterHub直接上传文件 | |||||
| type BypassUploadFeature struct { | |||||
| serder.Metadata `union:"BypassUpload"` | |||||
| // 存放上传文件的临时目录 | |||||
| TempRoot string `json:"tempRoot"` | |||||
| } | |||||
| func (f *BypassUploadFeature) GetType() string { | |||||
| return "BypassUpload" | |||||
| } | |||||
| func (f *BypassUploadFeature) String() string { | |||||
| return "BypassUpload" | |||||
| } | |||||
| // 存储服务支持分段上传 | |||||
| type MultipartUploadFeature struct { | |||||
| serder.Metadata `union:"MultipartUpload"` | |||||
| } | |||||
| func (f *MultipartUploadFeature) GetType() string { | |||||
| return "MultipartUpload" | |||||
| } | |||||
| func (f *MultipartUploadFeature) String() string { | |||||
| return "MultipartUpload" | |||||
| } | |||||