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

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

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