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

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

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