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 6.8 kB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  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. StartStorageCreatePackage(msg *StartStorageCreatePackage) (*StartStorageCreatePackageResp, *mq.CodeMessage)
  12. WaitStorageCreatePackage(msg *WaitStorageCreatePackage) (*WaitStorageCreatePackageResp, *mq.CodeMessage)
  13. }
  14. // 启动调度Package的任务
  15. var _ = Register(Service.StartStorageLoadPackage)
  16. type StartStorageLoadPackage struct {
  17. mq.MessageBodyBase
  18. UserID int64 `json:"userID"`
  19. PackageID int64 `json:"packageID"`
  20. StorageID int64 `json:"storageID"`
  21. }
  22. type StartStorageLoadPackageResp struct {
  23. mq.MessageBodyBase
  24. TaskID string `json:"taskID"`
  25. }
  26. func NewStartStorageLoadPackage(userID int64, packageID int64, storageID int64) *StartStorageLoadPackage {
  27. return &StartStorageLoadPackage{
  28. UserID: userID,
  29. PackageID: packageID,
  30. StorageID: storageID,
  31. }
  32. }
  33. func NewStartStorageLoadPackageResp(taskID string) *StartStorageLoadPackageResp {
  34. return &StartStorageLoadPackageResp{
  35. TaskID: taskID,
  36. }
  37. }
  38. func (client *Client) StartStorageLoadPackage(msg *StartStorageLoadPackage, opts ...mq.RequestOption) (*StartStorageLoadPackageResp, error) {
  39. return mq.Request(Service.StartStorageLoadPackage, client.rabbitCli, msg, opts...)
  40. }
  41. // 等待调度Package的任务
  42. var _ = Register(Service.WaitStorageLoadPackage)
  43. type WaitStorageLoadPackage struct {
  44. mq.MessageBodyBase
  45. TaskID string `json:"taskID"`
  46. WaitTimeoutMs int64 `json:"waitTimeout"`
  47. }
  48. type WaitStorageLoadPackageResp struct {
  49. mq.MessageBodyBase
  50. IsComplete bool `json:"isComplete"`
  51. Error string `json:"error"`
  52. FullPath string `json:"fullPath"`
  53. }
  54. func NewWaitStorageLoadPackage(taskID string, waitTimeoutMs int64) *WaitStorageLoadPackage {
  55. return &WaitStorageLoadPackage{
  56. TaskID: taskID,
  57. WaitTimeoutMs: waitTimeoutMs,
  58. }
  59. }
  60. func NewWaitStorageLoadPackageResp(isComplete bool, err string, fullPath string) *WaitStorageLoadPackageResp {
  61. return &WaitStorageLoadPackageResp{
  62. IsComplete: isComplete,
  63. Error: err,
  64. FullPath: fullPath,
  65. }
  66. }
  67. func (client *Client) WaitStorageLoadPackage(msg *WaitStorageLoadPackage, opts ...mq.RequestOption) (*WaitStorageLoadPackageResp, error) {
  68. return mq.Request(Service.WaitStorageLoadPackage, client.rabbitCli, msg, opts...)
  69. }
  70. // 检查Storage
  71. var _ = Register(Service.StorageCheck)
  72. const (
  73. CHECK_STORAGE_RESP_OP_DELETE = "Delete"
  74. CHECK_STORAGE_RESP_OP_SET_NORMAL = "SetNormal"
  75. )
  76. type StorageCheck struct {
  77. mq.MessageBodyBase
  78. StorageID int64 `json:"storageID"`
  79. Directory string `json:"directory"`
  80. IsComplete bool `json:"isComplete"`
  81. Packages []model.StoragePackage `json:"packages"`
  82. }
  83. type StorageCheckResp struct {
  84. mq.MessageBodyBase
  85. DirectoryState string `json:"directoryState"`
  86. Entries []StorageCheckRespEntry `json:"entries"`
  87. }
  88. type StorageCheckRespEntry struct {
  89. PackageID int64 `json:"packageID"`
  90. UserID int64 `json:"userID"`
  91. Operation string `json:"operation"`
  92. }
  93. func NewStorageCheck(storageID int64, directory string, isComplete bool, packages []model.StoragePackage) *StorageCheck {
  94. return &StorageCheck{
  95. StorageID: storageID,
  96. Directory: directory,
  97. IsComplete: isComplete,
  98. Packages: packages,
  99. }
  100. }
  101. func NewStorageCheckResp(dirState string, entries []StorageCheckRespEntry) *StorageCheckResp {
  102. return &StorageCheckResp{
  103. DirectoryState: dirState,
  104. Entries: entries,
  105. }
  106. }
  107. func NewStorageCheckRespEntry(packageID int64, userID int64, op string) StorageCheckRespEntry {
  108. return StorageCheckRespEntry{
  109. PackageID: packageID,
  110. UserID: userID,
  111. Operation: op,
  112. }
  113. }
  114. func (client *Client) StorageCheck(msg *StorageCheck, opts ...mq.RequestOption) (*StorageCheckResp, error) {
  115. return mq.Request(Service.StorageCheck, client.rabbitCli, msg, opts...)
  116. }
  117. // 启动从Storage上传Package的任务
  118. var _ = Register(Service.StartStorageCreatePackage)
  119. type StartStorageCreatePackage struct {
  120. mq.MessageBodyBase
  121. UserID int64 `json:"userID"`
  122. BucketID int64 `json:"bucketID"`
  123. Name string `json:"name"`
  124. StorageID int64 `json:"storageID"`
  125. Path string `json:"path"`
  126. Redundancy cdssdk.TypedRedundancyInfo `json:"redundancy"`
  127. NodeAffinity *int64 `json:"nodeAffinity"`
  128. }
  129. type StartStorageCreatePackageResp struct {
  130. mq.MessageBodyBase
  131. TaskID string `json:"taskID"`
  132. }
  133. func NewStartStorageCreatePackage(userID int64, bucketID int64, name string, storageID int64, path string, redundancy cdssdk.TypedRedundancyInfo, nodeAffinity *int64) *StartStorageCreatePackage {
  134. return &StartStorageCreatePackage{
  135. UserID: userID,
  136. BucketID: bucketID,
  137. Name: name,
  138. StorageID: storageID,
  139. Path: path,
  140. Redundancy: redundancy,
  141. NodeAffinity: nodeAffinity,
  142. }
  143. }
  144. func NewStartStorageCreatePackageResp(taskID string) *StartStorageCreatePackageResp {
  145. return &StartStorageCreatePackageResp{
  146. TaskID: taskID,
  147. }
  148. }
  149. func (client *Client) StartStorageCreatePackage(msg *StartStorageCreatePackage, opts ...mq.RequestOption) (*StartStorageCreatePackageResp, error) {
  150. return mq.Request(Service.StartStorageCreatePackage, client.rabbitCli, msg, opts...)
  151. }
  152. // 等待从Storage上传Package的任务
  153. var _ = Register(Service.WaitStorageCreatePackage)
  154. type WaitStorageCreatePackage struct {
  155. mq.MessageBodyBase
  156. TaskID string `json:"taskID"`
  157. WaitTimeoutMs int64 `json:"waitTimeout"`
  158. }
  159. type WaitStorageCreatePackageResp struct {
  160. mq.MessageBodyBase
  161. IsComplete bool `json:"isComplete"`
  162. Error string `json:"error"`
  163. PackageID int64 `json:"packageID"`
  164. }
  165. func NewWaitStorageCreatePackage(taskID string, waitTimeoutMs int64) *WaitStorageCreatePackage {
  166. return &WaitStorageCreatePackage{
  167. TaskID: taskID,
  168. WaitTimeoutMs: waitTimeoutMs,
  169. }
  170. }
  171. func NewWaitStorageCreatePackageResp(isComplete bool, err string, packageID int64) *WaitStorageCreatePackageResp {
  172. return &WaitStorageCreatePackageResp{
  173. IsComplete: isComplete,
  174. Error: err,
  175. PackageID: packageID,
  176. }
  177. }
  178. func (client *Client) WaitStorageCreatePackage(msg *WaitStorageCreatePackage, opts ...mq.RequestOption) (*WaitStorageCreatePackageResp, error) {
  179. return mq.Request(Service.WaitStorageCreatePackage, client.rabbitCli, msg, opts...)
  180. }

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