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

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. package coordinator
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/mq"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. "gitlink.org.cn/cloudream/storage/common/pkgs/db/model"
  6. )
  7. type PackageService interface {
  8. GetPackage(msg *GetPackage) (*GetPackageResp, *mq.CodeMessage)
  9. CreatePackage(msg *CreatePackage) (*CreatePackageResp, *mq.CodeMessage)
  10. UpdateRepPackage(msg *UpdateRepPackage) (*UpdateRepPackageResp, *mq.CodeMessage)
  11. UpdateECPackage(msg *UpdateECPackage) (*UpdateECPackageResp, *mq.CodeMessage)
  12. DeletePackage(msg *DeletePackage) (*DeletePackageResp, *mq.CodeMessage)
  13. GetPackageCachedNodes(msg *GetPackageCachedNodes) (*GetPackageCachedNodesResp, *mq.CodeMessage)
  14. GetPackageLoadedNodes(msg *GetPackageLoadedNodes) (*GetPackageLoadedNodesResp, *mq.CodeMessage)
  15. }
  16. // 获取Package基本信息
  17. var _ = Register(Service.GetPackage)
  18. type GetPackage struct {
  19. mq.MessageBodyBase
  20. UserID int64 `json:"userID"`
  21. PackageID int64 `json:"packageID"`
  22. }
  23. type GetPackageResp struct {
  24. mq.MessageBodyBase
  25. model.Package
  26. }
  27. func NewGetPackage(userID int64, packageID int64) *GetPackage {
  28. return &GetPackage{
  29. UserID: userID,
  30. PackageID: packageID,
  31. }
  32. }
  33. func NewGetPackageResp(pkg model.Package) *GetPackageResp {
  34. return &GetPackageResp{
  35. Package: pkg,
  36. }
  37. }
  38. func (client *Client) GetPackage(msg *GetPackage) (*GetPackageResp, error) {
  39. return mq.Request(Service.GetPackage, client.rabbitCli, msg)
  40. }
  41. // 创建一个Package
  42. var _ = Register(Service.CreatePackage)
  43. type CreatePackage struct {
  44. mq.MessageBodyBase
  45. UserID int64 `json:"userID"`
  46. BucketID int64 `json:"bucketID"`
  47. Name string `json:"name"`
  48. Redundancy cdssdk.TypedRedundancyInfo `json:"redundancy"`
  49. }
  50. type CreatePackageResp struct {
  51. mq.MessageBodyBase
  52. PackageID int64 `json:"packageID"`
  53. }
  54. func NewCreatePackage(userID int64, bucketID int64, name string, redundancy cdssdk.TypedRedundancyInfo) *CreatePackage {
  55. return &CreatePackage{
  56. UserID: userID,
  57. BucketID: bucketID,
  58. Name: name,
  59. Redundancy: redundancy,
  60. }
  61. }
  62. func NewCreatePackageResp(packageID int64) *CreatePackageResp {
  63. return &CreatePackageResp{
  64. PackageID: packageID,
  65. }
  66. }
  67. func (client *Client) CreatePackage(msg *CreatePackage) (*CreatePackageResp, error) {
  68. return mq.Request(Service.CreatePackage, client.rabbitCli, msg)
  69. }
  70. // 更新Rep备份模式的Package
  71. var _ = Register(Service.UpdateRepPackage)
  72. type UpdateRepPackage struct {
  73. mq.MessageBodyBase
  74. PackageID int64 `json:"packageID"`
  75. Adds []AddRepObjectInfo `json:"objects"`
  76. Deletes []int64 `json:"deletes"`
  77. }
  78. type UpdateRepPackageResp struct {
  79. mq.MessageBodyBase
  80. }
  81. type AddRepObjectInfo struct {
  82. Path string `json:"path"`
  83. Size int64 `json:"size,string"`
  84. FileHash string `json:"fileHash"`
  85. NodeIDs []int64 `json:"nodeIDs"`
  86. }
  87. func NewUpdateRepPackage(packageID int64, adds []AddRepObjectInfo, deletes []int64) *UpdateRepPackage {
  88. return &UpdateRepPackage{
  89. PackageID: packageID,
  90. Adds: adds,
  91. Deletes: deletes,
  92. }
  93. }
  94. func NewUpdateRepPackageResp() *UpdateRepPackageResp {
  95. return &UpdateRepPackageResp{}
  96. }
  97. func NewAddRepObjectInfo(path string, size int64, fileHash string, nodeIDs []int64) AddRepObjectInfo {
  98. return AddRepObjectInfo{
  99. Path: path,
  100. Size: size,
  101. FileHash: fileHash,
  102. NodeIDs: nodeIDs,
  103. }
  104. }
  105. func (client *Client) UpdateRepPackage(msg *UpdateRepPackage) (*UpdateRepPackageResp, error) {
  106. return mq.Request(Service.UpdateRepPackage, client.rabbitCli, msg)
  107. }
  108. // 更新EC备份模式的Package
  109. var _ = Register(Service.UpdateECPackage)
  110. type UpdateECPackage struct {
  111. mq.MessageBodyBase
  112. PackageID int64 `json:"packageID"`
  113. Adds []AddECObjectInfo `json:"objects"`
  114. Deletes []int64 `json:"deletes"`
  115. }
  116. type UpdateECPackageResp struct {
  117. mq.MessageBodyBase
  118. }
  119. type AddECObjectInfo struct {
  120. Path string `json:"path"`
  121. Size int64 `json:"size,string"`
  122. FileHashes []string `json:"fileHashes"`
  123. NodeIDs []int64 `json:"nodeIDs"`
  124. }
  125. func NewUpdateECPackage(packageID int64, adds []AddECObjectInfo, deletes []int64) *UpdateECPackage {
  126. return &UpdateECPackage{
  127. PackageID: packageID,
  128. Adds: adds,
  129. Deletes: deletes,
  130. }
  131. }
  132. func NewUpdateECPackageResp() *UpdateECPackageResp {
  133. return &UpdateECPackageResp{}
  134. }
  135. func NewAddECObjectInfo(path string, size int64, fileHashes []string, nodeIDs []int64) AddECObjectInfo {
  136. return AddECObjectInfo{
  137. Path: path,
  138. Size: size,
  139. FileHashes: fileHashes,
  140. NodeIDs: nodeIDs,
  141. }
  142. }
  143. func (client *Client) UpdateECPackage(msg *UpdateECPackage) (*UpdateECPackageResp, error) {
  144. return mq.Request(Service.UpdateECPackage, client.rabbitCli, msg)
  145. }
  146. // 删除对象
  147. var _ = Register(Service.DeletePackage)
  148. type DeletePackage struct {
  149. mq.MessageBodyBase
  150. UserID int64 `db:"userID"`
  151. PackageID int64 `db:"packageID"`
  152. }
  153. type DeletePackageResp struct {
  154. mq.MessageBodyBase
  155. }
  156. func NewDeletePackage(userID int64, packageID int64) *DeletePackage {
  157. return &DeletePackage{
  158. UserID: userID,
  159. PackageID: packageID,
  160. }
  161. }
  162. func NewDeletePackageResp() *DeletePackageResp {
  163. return &DeletePackageResp{}
  164. }
  165. func (client *Client) DeletePackage(msg *DeletePackage) (*DeletePackageResp, error) {
  166. return mq.Request(Service.DeletePackage, client.rabbitCli, msg)
  167. }
  168. // 根据PackageID获取object分布情况
  169. var _ = Register(Service.GetPackageCachedNodes)
  170. type GetPackageCachedNodes struct {
  171. mq.MessageBodyBase
  172. UserID int64 `json:"userID"`
  173. PackageID int64 `json:"packageID"`
  174. }
  175. type PackageCachedNodeInfo struct {
  176. NodeID int64 `json:"nodeID"`
  177. FileSize int64 `json:"fileSize"`
  178. ObjectCount int64 `json:"objectCount"`
  179. }
  180. type GetPackageCachedNodesResp struct {
  181. mq.MessageBodyBase
  182. cdssdk.PackageCachingInfo
  183. }
  184. func NewGetPackageCachedNodes(userID int64, packageID int64) *GetPackageCachedNodes {
  185. return &GetPackageCachedNodes{
  186. UserID: userID,
  187. PackageID: packageID,
  188. }
  189. }
  190. func NewGetPackageCachedNodesResp(nodeInfos []cdssdk.NodePackageCachingInfo, packageSize int64, redunancyType string) *GetPackageCachedNodesResp {
  191. return &GetPackageCachedNodesResp{
  192. PackageCachingInfo: cdssdk.PackageCachingInfo{
  193. NodeInfos: nodeInfos,
  194. PackageSize: packageSize,
  195. RedunancyType: redunancyType,
  196. },
  197. }
  198. }
  199. func (client *Client) GetPackageCachedNodes(msg *GetPackageCachedNodes) (*GetPackageCachedNodesResp, error) {
  200. return mq.Request(Service.GetPackageCachedNodes, client.rabbitCli, msg)
  201. }
  202. // 根据PackageID获取storage分布情况
  203. var _ = Register(Service.GetPackageLoadedNodes)
  204. type GetPackageLoadedNodes struct {
  205. mq.MessageBodyBase
  206. UserID int64 `json:"userID"`
  207. PackageID int64 `json:"packageID"`
  208. }
  209. type GetPackageLoadedNodesResp struct {
  210. mq.MessageBodyBase
  211. NodeIDs []int64 `json:"nodeIDs"`
  212. }
  213. func NewGetPackageLoadedNodes(userID int64, packageID int64) *GetPackageLoadedNodes {
  214. return &GetPackageLoadedNodes{
  215. UserID: userID,
  216. PackageID: packageID,
  217. }
  218. }
  219. func NewGetPackageLoadedNodesResp(nodeIDs []int64) *GetPackageLoadedNodesResp {
  220. return &GetPackageLoadedNodesResp{
  221. NodeIDs: nodeIDs,
  222. }
  223. }
  224. func (client *Client) GetPackageLoadedNodes(msg *GetPackageLoadedNodes) (*GetPackageLoadedNodesResp, error) {
  225. return mq.Request(Service.GetPackageLoadedNodes, client.rabbitCli, msg)
  226. }

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