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

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

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