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.

object.go 6.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. package coordinator
  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/db/model"
  7. )
  8. type ObjectService interface {
  9. GetPackageObjects(msg *GetPackageObjects) (*GetPackageObjectsResp, *mq.CodeMessage)
  10. GetPackageObjectDetails(msg *GetPackageObjectDetails) (*GetPackageObjectDetailsResp, *mq.CodeMessage)
  11. GetObjectDetails(msg *GetObjectDetails) (*GetObjectDetailsResp, *mq.CodeMessage)
  12. UpdateObjectRedundancy(msg *UpdateObjectRedundancy) (*UpdateObjectRedundancyResp, *mq.CodeMessage)
  13. UpdateObjectInfos(msg *UpdateObjectInfos) (*UpdateObjectInfosResp, *mq.CodeMessage)
  14. MoveObjects(msg *MoveObjects) (*MoveObjectsResp, *mq.CodeMessage)
  15. DeleteObjects(msg *DeleteObjects) (*DeleteObjectsResp, *mq.CodeMessage)
  16. }
  17. // 查询Package中的所有Object,返回的Objects会按照ObjectID升序
  18. var _ = Register(Service.GetPackageObjects)
  19. type GetPackageObjects struct {
  20. mq.MessageBodyBase
  21. UserID cdssdk.UserID `json:"userID"`
  22. PackageID cdssdk.PackageID `json:"packageID"`
  23. }
  24. type GetPackageObjectsResp struct {
  25. mq.MessageBodyBase
  26. Objects []model.Object `json:"objects"`
  27. }
  28. func NewGetPackageObjects(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackageObjects {
  29. return &GetPackageObjects{
  30. UserID: userID,
  31. PackageID: packageID,
  32. }
  33. }
  34. func NewGetPackageObjectsResp(objects []model.Object) *GetPackageObjectsResp {
  35. return &GetPackageObjectsResp{
  36. Objects: objects,
  37. }
  38. }
  39. func (client *Client) GetPackageObjects(msg *GetPackageObjects) (*GetPackageObjectsResp, error) {
  40. return mq.Request(Service.GetPackageObjects, client.rabbitCli, msg)
  41. }
  42. // 获取Package中所有Object以及它们的分块详细信息,返回的Objects会按照ObjectID升序
  43. var _ = Register(Service.GetPackageObjectDetails)
  44. type GetPackageObjectDetails struct {
  45. mq.MessageBodyBase
  46. PackageID cdssdk.PackageID `json:"packageID"`
  47. }
  48. type GetPackageObjectDetailsResp struct {
  49. mq.MessageBodyBase
  50. Objects []stgmod.ObjectDetail `json:"objects"`
  51. }
  52. func NewGetPackageObjectDetails(packageID cdssdk.PackageID) *GetPackageObjectDetails {
  53. return &GetPackageObjectDetails{
  54. PackageID: packageID,
  55. }
  56. }
  57. func NewGetPackageObjectDetailsResp(objects []stgmod.ObjectDetail) *GetPackageObjectDetailsResp {
  58. return &GetPackageObjectDetailsResp{
  59. Objects: objects,
  60. }
  61. }
  62. func (client *Client) GetPackageObjectDetails(msg *GetPackageObjectDetails) (*GetPackageObjectDetailsResp, error) {
  63. return mq.Request(Service.GetPackageObjectDetails, client.rabbitCli, msg)
  64. }
  65. // 获取多个Object以及它们的分块详细信息,返回的Objects会按照ObjectID升序。
  66. var _ = Register(Service.GetObjectDetails)
  67. type GetObjectDetails struct {
  68. mq.MessageBodyBase
  69. ObjectIDs []cdssdk.ObjectID `json:"objectIDs"`
  70. }
  71. type GetObjectDetailsResp struct {
  72. mq.MessageBodyBase
  73. Objects []*stgmod.ObjectDetail `json:"objects"` // 如果没有查询到某个ID对应的信息,则此数组对应位置为nil
  74. }
  75. func ReqGetObjectDetails(objectIDs []cdssdk.ObjectID) *GetObjectDetails {
  76. return &GetObjectDetails{
  77. ObjectIDs: objectIDs,
  78. }
  79. }
  80. func RespGetObjectDetails(objects []*stgmod.ObjectDetail) *GetObjectDetailsResp {
  81. return &GetObjectDetailsResp{
  82. Objects: objects,
  83. }
  84. }
  85. func (client *Client) GetObjectDetails(msg *GetObjectDetails) (*GetObjectDetailsResp, error) {
  86. return mq.Request(Service.GetObjectDetails, client.rabbitCli, msg)
  87. }
  88. // 更新Object的冗余方式
  89. var _ = Register(Service.UpdateObjectRedundancy)
  90. type UpdateObjectRedundancy struct {
  91. mq.MessageBodyBase
  92. Updatings []UpdatingObjectRedundancy `json:"updatings"`
  93. }
  94. type UpdateObjectRedundancyResp struct {
  95. mq.MessageBodyBase
  96. }
  97. type UpdatingObjectRedundancy struct {
  98. ObjectID cdssdk.ObjectID `json:"objectID" db:"ObjectID"`
  99. Redundancy cdssdk.Redundancy `json:"redundancy" db:"Redundancy"`
  100. PinnedAt []cdssdk.NodeID `json:"pinnedAt"`
  101. Blocks []stgmod.ObjectBlock `json:"blocks"`
  102. }
  103. func ReqUpdateObjectRedundancy(updatings []UpdatingObjectRedundancy) *UpdateObjectRedundancy {
  104. return &UpdateObjectRedundancy{
  105. Updatings: updatings,
  106. }
  107. }
  108. func RespUpdateObjectRedundancy() *UpdateObjectRedundancyResp {
  109. return &UpdateObjectRedundancyResp{}
  110. }
  111. func (client *Client) UpdateObjectRedundancy(msg *UpdateObjectRedundancy) (*UpdateObjectRedundancyResp, error) {
  112. return mq.Request(Service.UpdateObjectRedundancy, client.rabbitCli, msg)
  113. }
  114. // 更新Object元数据
  115. var _ = Register(Service.UpdateObjectInfos)
  116. type UpdateObjectInfos struct {
  117. mq.MessageBodyBase
  118. UserID cdssdk.UserID `json:"userID"`
  119. Updatings []cdssdk.UpdatingObject `json:"updatings"`
  120. }
  121. type UpdateObjectInfosResp struct {
  122. mq.MessageBodyBase
  123. Successes []cdssdk.ObjectID `json:"successes"`
  124. }
  125. func ReqUpdateObjectInfos(userID cdssdk.UserID, updatings []cdssdk.UpdatingObject) *UpdateObjectInfos {
  126. return &UpdateObjectInfos{
  127. UserID: userID,
  128. Updatings: updatings,
  129. }
  130. }
  131. func RespUpdateObjectInfos(successes []cdssdk.ObjectID) *UpdateObjectInfosResp {
  132. return &UpdateObjectInfosResp{
  133. Successes: successes,
  134. }
  135. }
  136. func (client *Client) UpdateObjectInfos(msg *UpdateObjectInfos) (*UpdateObjectInfosResp, error) {
  137. return mq.Request(Service.UpdateObjectInfos, client.rabbitCli, msg)
  138. }
  139. // 移动Object
  140. var _ = Register(Service.MoveObjects)
  141. type MoveObjects struct {
  142. mq.MessageBodyBase
  143. UserID cdssdk.UserID `json:"userID"`
  144. Movings []cdssdk.MovingObject `json:"movings"`
  145. }
  146. type MoveObjectsResp struct {
  147. mq.MessageBodyBase
  148. Successes []cdssdk.ObjectID `json:"successes"`
  149. }
  150. func ReqMoveObjects(userID cdssdk.UserID, movings []cdssdk.MovingObject) *MoveObjects {
  151. return &MoveObjects{
  152. UserID: userID,
  153. Movings: movings,
  154. }
  155. }
  156. func RespMoveObjects(successes []cdssdk.ObjectID) *MoveObjectsResp {
  157. return &MoveObjectsResp{
  158. Successes: successes,
  159. }
  160. }
  161. func (client *Client) MoveObjects(msg *MoveObjects) (*MoveObjectsResp, error) {
  162. return mq.Request(Service.MoveObjects, client.rabbitCli, msg)
  163. }
  164. // 删除Object
  165. var _ = Register(Service.DeleteObjects)
  166. type DeleteObjects struct {
  167. mq.MessageBodyBase
  168. UserID cdssdk.UserID `json:"userID"`
  169. ObjectIDs []cdssdk.ObjectID `json:"objectIDs"`
  170. }
  171. type DeleteObjectsResp struct {
  172. mq.MessageBodyBase
  173. }
  174. func ReqDeleteObjects(userID cdssdk.UserID, objectIDs []cdssdk.ObjectID) *DeleteObjects {
  175. return &DeleteObjects{
  176. UserID: userID,
  177. ObjectIDs: objectIDs,
  178. }
  179. }
  180. func RespDeleteObjects() *DeleteObjectsResp {
  181. return &DeleteObjectsResp{}
  182. }
  183. func (client *Client) DeleteObjects(msg *DeleteObjects) (*DeleteObjectsResp, error) {
  184. return mq.Request(Service.DeleteObjects, client.rabbitCli, msg)
  185. }

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