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

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

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