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.

models.go 1.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package stgmod
  2. import (
  3. "github.com/samber/lo"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. "gitlink.org.cn/cloudream/common/utils/sort2"
  6. )
  7. type ObjectBlock struct {
  8. ObjectID cdssdk.ObjectID `db:"ObjectID" json:"objectID"`
  9. Index int `db:"Index" json:"index"`
  10. NodeID cdssdk.NodeID `db:"NodeID" json:"nodeID"` // 这个块应该在哪个节点上
  11. FileHash string `db:"FileHash" json:"fileHash"`
  12. }
  13. type ObjectDetail struct {
  14. Object cdssdk.Object `json:"object"`
  15. PinnedAt []cdssdk.NodeID `json:"pinnedAt"`
  16. Blocks []ObjectBlock `json:"blocks"`
  17. }
  18. func NewObjectDetail(object cdssdk.Object, pinnedAt []cdssdk.NodeID, blocks []ObjectBlock) ObjectDetail {
  19. return ObjectDetail{
  20. Object: object,
  21. PinnedAt: pinnedAt,
  22. Blocks: blocks,
  23. }
  24. }
  25. type GrouppedObjectBlock struct {
  26. ObjectID cdssdk.ObjectID
  27. Index int
  28. FileHash string
  29. NodeIDs []cdssdk.NodeID
  30. }
  31. func (o *ObjectDetail) GroupBlocks() []GrouppedObjectBlock {
  32. grps := make(map[int]GrouppedObjectBlock)
  33. for _, block := range o.Blocks {
  34. grp, ok := grps[block.Index]
  35. if !ok {
  36. grp = GrouppedObjectBlock{
  37. ObjectID: block.ObjectID,
  38. Index: block.Index,
  39. FileHash: block.FileHash,
  40. }
  41. }
  42. grp.NodeIDs = append(grp.NodeIDs, block.NodeID)
  43. grps[block.Index] = grp
  44. }
  45. return sort2.Sort(lo.Values(grps), func(l, r GrouppedObjectBlock) int { return l.Index - r.Index })
  46. }
  47. type LocalMachineInfo struct {
  48. NodeID *cdssdk.NodeID `json:"nodeID"`
  49. ExternalIP string `json:"externalIP"`
  50. LocalIP string `json:"localIP"`
  51. LocationID cdssdk.LocationID `json:"locationID"`
  52. }

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