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.5 kB

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

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