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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  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. }
  233. func ReqDeleteObjects(userID cdssdk.UserID, objectIDs []cdssdk.ObjectID) *DeleteObjects {
  234. return &DeleteObjects{
  235. UserID: userID,
  236. ObjectIDs: objectIDs,
  237. }
  238. }
  239. func RespDeleteObjects() *DeleteObjectsResp {
  240. return &DeleteObjectsResp{}
  241. }
  242. func (client *Client) DeleteObjects(msg *DeleteObjects) (*DeleteObjectsResp, error) {
  243. return mq.Request(Service.DeleteObjects, client.rabbitCli, msg)
  244. }
  245. // 克隆Object
  246. var _ = Register(Service.CloneObjects)
  247. type CloneObjects struct {
  248. mq.MessageBodyBase
  249. UserID cdssdk.UserID `json:"userID"`
  250. Clonings []cdsapi.CloningObject `json:"clonings"`
  251. }
  252. type CloneObjectsResp struct {
  253. mq.MessageBodyBase
  254. Objects []*cdssdk.Object `json:"objects"`
  255. }
  256. func ReqCloneObjects(userID cdssdk.UserID, clonings []cdsapi.CloningObject) *CloneObjects {
  257. return &CloneObjects{
  258. UserID: userID,
  259. Clonings: clonings,
  260. }
  261. }
  262. func RespCloneObjects(objects []*cdssdk.Object) *CloneObjectsResp {
  263. return &CloneObjectsResp{
  264. Objects: objects,
  265. }
  266. }
  267. func (client *Client) CloneObjects(msg *CloneObjects) (*CloneObjectsResp, error) {
  268. return mq.Request(Service.CloneObjects, client.rabbitCli, msg)
  269. }
  270. // 增加访问计数
  271. var _ = RegisterNoReply(Service.AddAccessStat)
  272. type AddAccessStat struct {
  273. mq.MessageBodyBase
  274. Entries []AddAccessStatEntry `json:"entries"`
  275. }
  276. type AddAccessStatEntry struct {
  277. ObjectID cdssdk.ObjectID `json:"objectID"`
  278. PackageID cdssdk.PackageID `json:"packageID"`
  279. StorageID cdssdk.StorageID `json:"storageID"`
  280. Counter float64 `json:"counter"`
  281. }
  282. func ReqAddAccessStat(entries []AddAccessStatEntry) *AddAccessStat {
  283. return &AddAccessStat{
  284. Entries: entries,
  285. }
  286. }
  287. func (client *Client) AddAccessStat(msg *AddAccessStat) error {
  288. return mq.Send(Service.AddAccessStat, client.rabbitCli, msg)
  289. }

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