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

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

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