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.

fromto.go 3.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package ioswitch2
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. "gitlink.org.cn/cloudream/storage/common/pkgs/storage/shard/types"
  6. )
  7. type From interface {
  8. GetDataIndex() int
  9. }
  10. type To interface {
  11. // To所需要的文件流的范围。具体含义与DataIndex有关系:
  12. // 如果DataIndex == -1,则表示在整个文件的范围。
  13. // 如果DataIndex >= 0,则表示在文件的某个分片的范围。
  14. GetRange() exec.Range
  15. GetDataIndex() int
  16. }
  17. type FromTos []FromTo
  18. type FromTo struct {
  19. Froms []From
  20. Toes []To
  21. }
  22. func NewFromTo() FromTo {
  23. return FromTo{}
  24. }
  25. func (ft *FromTo) AddFrom(from From) *FromTo {
  26. ft.Froms = append(ft.Froms, from)
  27. return ft
  28. }
  29. func (ft *FromTo) AddTo(to To) *FromTo {
  30. ft.Toes = append(ft.Toes, to)
  31. return ft
  32. }
  33. type FromDriver struct {
  34. Handle *exec.DriverWriteStream
  35. DataIndex int
  36. }
  37. func NewFromDriver(dataIndex int) (*FromDriver, *exec.DriverWriteStream) {
  38. handle := &exec.DriverWriteStream{
  39. RangeHint: &exec.Range{},
  40. }
  41. return &FromDriver{
  42. Handle: handle,
  43. DataIndex: dataIndex,
  44. }, handle
  45. }
  46. func (f *FromDriver) GetDataIndex() int {
  47. return f.DataIndex
  48. }
  49. type FromNode struct {
  50. FileHash types.FileHash
  51. Node cdssdk.Node
  52. Storage cdssdk.Storage
  53. DataIndex int
  54. }
  55. func NewFromNode(fileHash types.FileHash, node cdssdk.Node, storage cdssdk.Storage, dataIndex int) *FromNode {
  56. return &FromNode{
  57. FileHash: fileHash,
  58. Node: node,
  59. DataIndex: dataIndex,
  60. }
  61. }
  62. func (f *FromNode) GetDataIndex() int {
  63. return f.DataIndex
  64. }
  65. type ToDriver struct {
  66. Handle *exec.DriverReadStream
  67. DataIndex int
  68. Range exec.Range
  69. }
  70. func NewToDriver(dataIndex int) (*ToDriver, *exec.DriverReadStream) {
  71. str := exec.DriverReadStream{}
  72. return &ToDriver{
  73. Handle: &str,
  74. DataIndex: dataIndex,
  75. }, &str
  76. }
  77. func NewToDriverWithRange(dataIndex int, rng exec.Range) (*ToDriver, *exec.DriverReadStream) {
  78. str := exec.DriverReadStream{}
  79. return &ToDriver{
  80. Handle: &str,
  81. DataIndex: dataIndex,
  82. Range: rng,
  83. }, &str
  84. }
  85. func (t *ToDriver) GetDataIndex() int {
  86. return t.DataIndex
  87. }
  88. func (t *ToDriver) GetRange() exec.Range {
  89. return t.Range
  90. }
  91. type ToNode struct {
  92. Node cdssdk.Node
  93. DataIndex int
  94. Range exec.Range
  95. FileHashStoreKey string
  96. }
  97. func NewToNode(node cdssdk.Node, dataIndex int, fileHashStoreKey string) *ToNode {
  98. return &ToNode{
  99. Node: node,
  100. DataIndex: dataIndex,
  101. FileHashStoreKey: fileHashStoreKey,
  102. }
  103. }
  104. func NewToNodeWithRange(node cdssdk.Node, dataIndex int, fileHashStoreKey string, rng exec.Range) *ToNode {
  105. return &ToNode{
  106. Node: node,
  107. DataIndex: dataIndex,
  108. FileHashStoreKey: fileHashStoreKey,
  109. Range: rng,
  110. }
  111. }
  112. func (t *ToNode) GetDataIndex() int {
  113. return t.DataIndex
  114. }
  115. func (t *ToNode) GetRange() exec.Range {
  116. return t.Range
  117. }
  118. // type ToStorage struct {
  119. // Storage cdssdk.Storage
  120. // DataIndex int
  121. // }
  122. // func NewToStorage(storage cdssdk.Storage, dataIndex int) *ToStorage {
  123. // return &ToStorage{
  124. // Storage: storage,
  125. // DataIndex: dataIndex,
  126. // }
  127. // }
  128. // func (t *ToStorage) GetDataIndex() int {
  129. // return t.DataIndex
  130. // }

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