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

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

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