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.

storage.go 7.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package agent
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/mq"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  6. "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model"
  7. )
  8. type StorageService interface {
  9. StartStorageLoadPackage(msg *StartStorageLoadPackage) (*StartStorageLoadPackageResp, *mq.CodeMessage)
  10. WaitStorageLoadPackage(msg *WaitStorageLoadPackage) (*WaitStorageLoadPackageResp, *mq.CodeMessage)
  11. StorageCheck(msg *StorageCheck) (*StorageCheckResp, *mq.CodeMessage)
  12. StorageGC(msg *StorageGC) (*StorageGCResp, *mq.CodeMessage)
  13. StartStorageCreatePackage(msg *StartStorageCreatePackage) (*StartStorageCreatePackageResp, *mq.CodeMessage)
  14. WaitStorageCreatePackage(msg *WaitStorageCreatePackage) (*WaitStorageCreatePackageResp, *mq.CodeMessage)
  15. }
  16. // 启动调度Package的任务
  17. var _ = Register(Service.StartStorageLoadPackage)
  18. type StartStorageLoadPackage struct {
  19. mq.MessageBodyBase
  20. UserID cdssdk.UserID `json:"userID"`
  21. PackageID cdssdk.PackageID `json:"packageID"`
  22. StorageID cdssdk.StorageID `json:"storageID"`
  23. }
  24. type StartStorageLoadPackageResp struct {
  25. mq.MessageBodyBase
  26. TaskID string `json:"taskID"`
  27. }
  28. func NewStartStorageLoadPackage(userID cdssdk.UserID, packageID cdssdk.PackageID, storageID cdssdk.StorageID) *StartStorageLoadPackage {
  29. return &StartStorageLoadPackage{
  30. UserID: userID,
  31. PackageID: packageID,
  32. StorageID: storageID,
  33. }
  34. }
  35. func NewStartStorageLoadPackageResp(taskID string) *StartStorageLoadPackageResp {
  36. return &StartStorageLoadPackageResp{
  37. TaskID: taskID,
  38. }
  39. }
  40. func (client *Client) StartStorageLoadPackage(msg *StartStorageLoadPackage, opts ...mq.RequestOption) (*StartStorageLoadPackageResp, error) {
  41. return mq.Request(Service.StartStorageLoadPackage, client.rabbitCli, msg, opts...)
  42. }
  43. // 等待调度Package的任务
  44. var _ = Register(Service.WaitStorageLoadPackage)
  45. type WaitStorageLoadPackage struct {
  46. mq.MessageBodyBase
  47. TaskID string `json:"taskID"`
  48. WaitTimeoutMs int64 `json:"waitTimeout"`
  49. }
  50. type WaitStorageLoadPackageResp struct {
  51. mq.MessageBodyBase
  52. IsComplete bool `json:"isComplete"`
  53. Error string `json:"error"`
  54. PackagePath string `json:"packagePath"` // 加载后的Package的路径,相对于数据库中配置的Directory
  55. LocalBase string `json:"localBase"` // 存储服务本地的目录,LocalBase + PackagePath = Package在代理节点上的完整路径
  56. RemoteBase string `json:"remoteBase"` // 存储服务远程的目录,RemoteBase + PackagePath = Package在存储服务中的完整路径
  57. }
  58. func NewWaitStorageLoadPackage(taskID string, waitTimeoutMs int64) *WaitStorageLoadPackage {
  59. return &WaitStorageLoadPackage{
  60. TaskID: taskID,
  61. WaitTimeoutMs: waitTimeoutMs,
  62. }
  63. }
  64. func NewWaitStorageLoadPackageResp(isComplete bool, err string, packagePath string, localBase string, remoteBase string) *WaitStorageLoadPackageResp {
  65. return &WaitStorageLoadPackageResp{
  66. IsComplete: isComplete,
  67. Error: err,
  68. PackagePath: packagePath,
  69. LocalBase: localBase,
  70. RemoteBase: remoteBase,
  71. }
  72. }
  73. func (client *Client) WaitStorageLoadPackage(msg *WaitStorageLoadPackage, opts ...mq.RequestOption) (*WaitStorageLoadPackageResp, error) {
  74. return mq.Request(Service.WaitStorageLoadPackage, client.rabbitCli, msg, opts...)
  75. }
  76. // 检查Storage
  77. var _ = Register(Service.StorageCheck)
  78. type StorageCheck struct {
  79. mq.MessageBodyBase
  80. StorageID cdssdk.StorageID `json:"storageID"`
  81. }
  82. type StorageCheckResp struct {
  83. mq.MessageBodyBase
  84. Packages []stgmod.LoadedPackageID `json:"packages"`
  85. }
  86. func NewStorageCheck(storageID cdssdk.StorageID) *StorageCheck {
  87. return &StorageCheck{
  88. StorageID: storageID,
  89. }
  90. }
  91. func NewStorageCheckResp(packages []stgmod.LoadedPackageID) *StorageCheckResp {
  92. return &StorageCheckResp{
  93. Packages: packages,
  94. }
  95. }
  96. func (client *Client) StorageCheck(msg *StorageCheck, opts ...mq.RequestOption) (*StorageCheckResp, error) {
  97. return mq.Request(Service.StorageCheck, client.rabbitCli, msg, opts...)
  98. }
  99. // 清理Cache中不用的文件
  100. var _ = Register(Service.StorageGC)
  101. type StorageGC struct {
  102. mq.MessageBodyBase
  103. StorageID cdssdk.StorageID `json:"storageID"`
  104. Packages []model.StoragePackage `json:"packages"`
  105. }
  106. type StorageGCResp struct {
  107. mq.MessageBodyBase
  108. }
  109. func ReqStorageGC(storageID cdssdk.StorageID, packages []model.StoragePackage) *StorageGC {
  110. return &StorageGC{
  111. StorageID: storageID,
  112. Packages: packages,
  113. }
  114. }
  115. func RespStorageGC() *StorageGCResp {
  116. return &StorageGCResp{}
  117. }
  118. func (client *Client) StorageGC(msg *StorageGC, opts ...mq.RequestOption) (*StorageGCResp, error) {
  119. return mq.Request(Service.StorageGC, client.rabbitCli, msg, opts...)
  120. }
  121. // 启动从Storage上传Package的任务
  122. var _ = Register(Service.StartStorageCreatePackage)
  123. type StartStorageCreatePackage struct {
  124. mq.MessageBodyBase
  125. UserID cdssdk.UserID `json:"userID"`
  126. BucketID cdssdk.BucketID `json:"bucketID"`
  127. Name string `json:"name"`
  128. StorageID cdssdk.StorageID `json:"storageID"`
  129. Path string `json:"path"`
  130. StorageAffinity cdssdk.StorageID `json:"storageAffinity"`
  131. }
  132. type StartStorageCreatePackageResp struct {
  133. mq.MessageBodyBase
  134. TaskID string `json:"taskID"`
  135. }
  136. func NewStartStorageCreatePackage(userID cdssdk.UserID, bucketID cdssdk.BucketID, name string, storageID cdssdk.StorageID, path string, stgAffinity cdssdk.StorageID) *StartStorageCreatePackage {
  137. return &StartStorageCreatePackage{
  138. UserID: userID,
  139. BucketID: bucketID,
  140. Name: name,
  141. StorageID: storageID,
  142. Path: path,
  143. StorageAffinity: stgAffinity,
  144. }
  145. }
  146. func NewStartStorageCreatePackageResp(taskID string) *StartStorageCreatePackageResp {
  147. return &StartStorageCreatePackageResp{
  148. TaskID: taskID,
  149. }
  150. }
  151. func (client *Client) StartStorageCreatePackage(msg *StartStorageCreatePackage, opts ...mq.RequestOption) (*StartStorageCreatePackageResp, error) {
  152. return mq.Request(Service.StartStorageCreatePackage, client.rabbitCli, msg, opts...)
  153. }
  154. // 等待从Storage上传Package的任务
  155. var _ = Register(Service.WaitStorageCreatePackage)
  156. type WaitStorageCreatePackage struct {
  157. mq.MessageBodyBase
  158. TaskID string `json:"taskID"`
  159. WaitTimeoutMs int64 `json:"waitTimeout"`
  160. }
  161. type WaitStorageCreatePackageResp struct {
  162. mq.MessageBodyBase
  163. IsComplete bool `json:"isComplete"`
  164. Error string `json:"error"`
  165. PackageID cdssdk.PackageID `json:"packageID"`
  166. }
  167. func NewWaitStorageCreatePackage(taskID string, waitTimeoutMs int64) *WaitStorageCreatePackage {
  168. return &WaitStorageCreatePackage{
  169. TaskID: taskID,
  170. WaitTimeoutMs: waitTimeoutMs,
  171. }
  172. }
  173. func NewWaitStorageCreatePackageResp(isComplete bool, err string, packageID cdssdk.PackageID) *WaitStorageCreatePackageResp {
  174. return &WaitStorageCreatePackageResp{
  175. IsComplete: isComplete,
  176. Error: err,
  177. PackageID: packageID,
  178. }
  179. }
  180. func (client *Client) WaitStorageCreatePackage(msg *WaitStorageCreatePackage, opts ...mq.RequestOption) (*WaitStorageCreatePackageResp, error) {
  181. return mq.Request(Service.WaitStorageCreatePackage, client.rabbitCli, msg, opts...)
  182. }

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