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.

driver.go 1.6 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package ops2
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/dag"
  4. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
  5. "gitlink.org.cn/cloudream/storage/common/pkgs/ioswitch2"
  6. )
  7. // TODO 想办法直接使用ops里的Node,而不是重新实现一遍
  8. type FromDriverNode struct {
  9. dag.NodeBase
  10. From ioswitch2.From
  11. Handle *exec.DriverWriteStream
  12. }
  13. func (b *GraphNodeBuilder) NewFromDriver(fr ioswitch2.From, handle *exec.DriverWriteStream) *FromDriverNode {
  14. node := &FromDriverNode{
  15. From: fr,
  16. Handle: handle,
  17. }
  18. b.AddNode(node)
  19. node.OutputStreams().Init(node, 1)
  20. return node
  21. }
  22. func (f *FromDriverNode) GetFrom() ioswitch2.From {
  23. return f.From
  24. }
  25. func (t *FromDriverNode) Output() dag.StreamSlot {
  26. return dag.StreamSlot{
  27. Var: t.OutputStreams().Get(0),
  28. Index: 0,
  29. }
  30. }
  31. func (t *FromDriverNode) GenerateOp() (exec.Op, error) {
  32. t.Handle.ID = t.OutputStreams().Get(0).VarID
  33. return nil, nil
  34. }
  35. type ToDriverNode struct {
  36. dag.NodeBase
  37. To ioswitch2.To
  38. Handle *exec.DriverReadStream
  39. Range exec.Range
  40. }
  41. func (b *GraphNodeBuilder) NewToDriver(to ioswitch2.To, handle *exec.DriverReadStream) *ToDriverNode {
  42. node := &ToDriverNode{
  43. To: to,
  44. Handle: handle,
  45. }
  46. b.AddNode(node)
  47. node.InputStreams().Init(1)
  48. return node
  49. }
  50. func (t *ToDriverNode) GetTo() ioswitch2.To {
  51. return t.To
  52. }
  53. func (t *ToDriverNode) SetInput(v *dag.StreamVar) {
  54. v.To(t, 0)
  55. }
  56. func (t *ToDriverNode) Input() dag.StreamSlot {
  57. return dag.StreamSlot{
  58. Var: t.InputStreams().Get(0),
  59. Index: 0,
  60. }
  61. }
  62. func (t *ToDriverNode) GenerateOp() (exec.Op, error) {
  63. t.Handle.ID = t.InputStreams().Get(0).VarID
  64. return nil, nil
  65. }

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