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

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

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