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

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

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