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

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

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