You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

package.go 7.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. package coordinator
  2. import (
  3. "time"
  4. "gitlink.org.cn/cloudream/common/pkgs/mq"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model"
  7. )
  8. type PackageService interface {
  9. GetPackage(msg *GetPackage) (*GetPackageResp, *mq.CodeMessage)
  10. GetPackageByName(msg *GetPackageByName) (*GetPackageByNameResp, *mq.CodeMessage)
  11. CreatePackage(msg *CreatePackage) (*CreatePackageResp, *mq.CodeMessage)
  12. UpdatePackage(msg *UpdatePackage) (*UpdatePackageResp, *mq.CodeMessage)
  13. DeletePackage(msg *DeletePackage) (*DeletePackageResp, *mq.CodeMessage)
  14. GetPackageCachedStorages(msg *GetPackageCachedStorages) (*GetPackageCachedStoragesResp, *mq.CodeMessage)
  15. GetPackageLoadedStorages(msg *GetPackageLoadedStorages) (*GetPackageLoadedStoragesResp, *mq.CodeMessage)
  16. }
  17. // 获取Package基本信息
  18. var _ = Register(Service.GetPackage)
  19. type GetPackage struct {
  20. mq.MessageBodyBase
  21. UserID cdssdk.UserID `json:"userID"`
  22. PackageID cdssdk.PackageID `json:"packageID"`
  23. }
  24. type GetPackageResp struct {
  25. mq.MessageBodyBase
  26. model.Package
  27. }
  28. func NewGetPackage(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackage {
  29. return &GetPackage{
  30. UserID: userID,
  31. PackageID: packageID,
  32. }
  33. }
  34. func NewGetPackageResp(pkg model.Package) *GetPackageResp {
  35. return &GetPackageResp{
  36. Package: pkg,
  37. }
  38. }
  39. func (client *Client) GetPackage(msg *GetPackage) (*GetPackageResp, error) {
  40. return mq.Request(Service.GetPackage, client.rabbitCli, msg)
  41. }
  42. // 根据名称获取Package
  43. var _ = Register(Service.GetPackageByName)
  44. type GetPackageByName struct {
  45. mq.MessageBodyBase
  46. UserID cdssdk.UserID `json:"userID"`
  47. BucketName string `json:"bucketName"`
  48. PackageName string `json:"packageName"`
  49. }
  50. type GetPackageByNameResp struct {
  51. mq.MessageBodyBase
  52. Package cdssdk.Package `json:"package"`
  53. }
  54. func ReqGetPackageByName(userID cdssdk.UserID, bucketName string, packageName string) *GetPackageByName {
  55. return &GetPackageByName{
  56. UserID: userID,
  57. BucketName: bucketName,
  58. PackageName: packageName,
  59. }
  60. }
  61. func NewGetPackageByNameResp(pkg cdssdk.Package) *GetPackageByNameResp {
  62. return &GetPackageByNameResp{
  63. Package: pkg,
  64. }
  65. }
  66. func (client *Client) GetPackageByName(msg *GetPackageByName) (*GetPackageByNameResp, error) {
  67. return mq.Request(Service.GetPackageByName, client.rabbitCli, msg)
  68. }
  69. // 创建一个Package
  70. var _ = Register(Service.CreatePackage)
  71. type CreatePackage struct {
  72. mq.MessageBodyBase
  73. UserID cdssdk.UserID `json:"userID"`
  74. BucketID cdssdk.BucketID `json:"bucketID"`
  75. Name string `json:"name"`
  76. }
  77. type CreatePackageResp struct {
  78. mq.MessageBodyBase
  79. Package cdssdk.Package `json:"package"`
  80. }
  81. func NewCreatePackage(userID cdssdk.UserID, bucketID cdssdk.BucketID, name string) *CreatePackage {
  82. return &CreatePackage{
  83. UserID: userID,
  84. BucketID: bucketID,
  85. Name: name,
  86. }
  87. }
  88. func NewCreatePackageResp(pkg cdssdk.Package) *CreatePackageResp {
  89. return &CreatePackageResp{
  90. Package: pkg,
  91. }
  92. }
  93. func (client *Client) CreatePackage(msg *CreatePackage) (*CreatePackageResp, error) {
  94. return mq.Request(Service.CreatePackage, client.rabbitCli, msg)
  95. }
  96. // 更新Package
  97. var _ = Register(Service.UpdatePackage)
  98. type UpdatePackage struct {
  99. mq.MessageBodyBase
  100. PackageID cdssdk.PackageID `json:"packageID"`
  101. Adds []AddObjectEntry `json:"adds"`
  102. Deletes []cdssdk.ObjectID `json:"deletes"`
  103. }
  104. type UpdatePackageResp struct {
  105. mq.MessageBodyBase
  106. Added []cdssdk.Object `json:"added"`
  107. }
  108. type AddObjectEntry struct {
  109. Path string `json:"path"`
  110. Size int64 `json:"size,string"`
  111. FileHash cdssdk.FileHash `json:"fileHash"`
  112. UploadTime time.Time `json:"uploadTime"` // 开始上传文件的时间
  113. StorageID cdssdk.StorageID `json:"storageID"`
  114. }
  115. func NewUpdatePackage(packageID cdssdk.PackageID, adds []AddObjectEntry, deletes []cdssdk.ObjectID) *UpdatePackage {
  116. return &UpdatePackage{
  117. PackageID: packageID,
  118. Adds: adds,
  119. Deletes: deletes,
  120. }
  121. }
  122. func NewUpdatePackageResp(added []cdssdk.Object) *UpdatePackageResp {
  123. return &UpdatePackageResp{
  124. Added: added,
  125. }
  126. }
  127. func NewAddObjectEntry(path string, size int64, fileHash cdssdk.FileHash, uploadTime time.Time, stgID cdssdk.StorageID) AddObjectEntry {
  128. return AddObjectEntry{
  129. Path: path,
  130. Size: size,
  131. FileHash: fileHash,
  132. UploadTime: uploadTime,
  133. StorageID: stgID,
  134. }
  135. }
  136. func (client *Client) UpdatePackage(msg *UpdatePackage) (*UpdatePackageResp, error) {
  137. return mq.Request(Service.UpdatePackage, client.rabbitCli, msg)
  138. }
  139. // 删除对象
  140. var _ = Register(Service.DeletePackage)
  141. type DeletePackage struct {
  142. mq.MessageBodyBase
  143. UserID cdssdk.UserID `json:"userID"`
  144. PackageID cdssdk.PackageID `json:"packageID"`
  145. }
  146. type DeletePackageResp struct {
  147. mq.MessageBodyBase
  148. }
  149. func NewDeletePackage(userID cdssdk.UserID, packageID cdssdk.PackageID) *DeletePackage {
  150. return &DeletePackage{
  151. UserID: userID,
  152. PackageID: packageID,
  153. }
  154. }
  155. func NewDeletePackageResp() *DeletePackageResp {
  156. return &DeletePackageResp{}
  157. }
  158. func (client *Client) DeletePackage(msg *DeletePackage) (*DeletePackageResp, error) {
  159. return mq.Request(Service.DeletePackage, client.rabbitCli, msg)
  160. }
  161. // 根据PackageID获取object分布情况
  162. var _ = Register(Service.GetPackageCachedStorages)
  163. type GetPackageCachedStorages struct {
  164. mq.MessageBodyBase
  165. UserID cdssdk.UserID `json:"userID"`
  166. PackageID cdssdk.PackageID `json:"packageID"`
  167. }
  168. type PackageCachedStorageInfo struct {
  169. StorageID int64 `json:"storageID"`
  170. FileSize int64 `json:"fileSize"`
  171. ObjectCount int64 `json:"objectCount"`
  172. }
  173. type GetPackageCachedStoragesResp struct {
  174. mq.MessageBodyBase
  175. cdssdk.PackageCachingInfo
  176. }
  177. func ReqGetPackageCachedStorages(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackageCachedStorages {
  178. return &GetPackageCachedStorages{
  179. UserID: userID,
  180. PackageID: packageID,
  181. }
  182. }
  183. func ReqGetPackageCachedStoragesResp(nodeInfos []cdssdk.StoragePackageCachingInfo, packageSize int64) *GetPackageCachedStoragesResp {
  184. return &GetPackageCachedStoragesResp{
  185. PackageCachingInfo: cdssdk.PackageCachingInfo{
  186. StorageInfos: nodeInfos,
  187. PackageSize: packageSize,
  188. },
  189. }
  190. }
  191. func (client *Client) GetPackageCachedStorages(msg *GetPackageCachedStorages) (*GetPackageCachedStoragesResp, error) {
  192. return mq.Request(Service.GetPackageCachedStorages, client.rabbitCli, msg)
  193. }
  194. // 根据PackageID获取storage分布情况
  195. var _ = Register(Service.GetPackageLoadedStorages)
  196. type GetPackageLoadedStorages struct {
  197. mq.MessageBodyBase
  198. UserID cdssdk.UserID `json:"userID"`
  199. PackageID cdssdk.PackageID `json:"packageID"`
  200. }
  201. type GetPackageLoadedStoragesResp struct {
  202. mq.MessageBodyBase
  203. StorageIDs []cdssdk.StorageID `json:"storageIDs"`
  204. }
  205. func ReqGetPackageLoadedStorages(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackageLoadedStorages {
  206. return &GetPackageLoadedStorages{
  207. UserID: userID,
  208. PackageID: packageID,
  209. }
  210. }
  211. func NewGetPackageLoadedStoragesResp(stgIDs []cdssdk.StorageID) *GetPackageLoadedStoragesResp {
  212. return &GetPackageLoadedStoragesResp{
  213. StorageIDs: stgIDs,
  214. }
  215. }
  216. func (client *Client) GetPackageLoadedStorages(msg *GetPackageLoadedStorages) (*GetPackageLoadedStoragesResp, error) {
  217. return mq.Request(Service.GetPackageLoadedStorages, client.rabbitCli, msg)
  218. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。