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.

node.go 1.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package dag
  2. import (
  3. "fmt"
  4. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
  5. )
  6. type NodeType interface {
  7. InitNode(node *Node)
  8. String(node *Node) string
  9. GenerateOp(node *Node) (exec.Op, error)
  10. }
  11. type NodeEnvType string
  12. const (
  13. EnvUnknown NodeEnvType = ""
  14. EnvDriver NodeEnvType = "Driver"
  15. EnvWorker NodeEnvType = "Worker"
  16. )
  17. type NodeEnv struct {
  18. Type NodeEnvType
  19. Worker exec.WorkerInfo
  20. Pinned bool // 如果为true,则不应该改变这个节点的执行环境
  21. }
  22. func (e *NodeEnv) ToEnvUnknown() {
  23. e.Type = EnvUnknown
  24. e.Worker = nil
  25. }
  26. func (e *NodeEnv) ToEnvDriver() {
  27. e.Type = EnvDriver
  28. e.Worker = nil
  29. }
  30. func (e *NodeEnv) ToEnvWorker(worker exec.WorkerInfo) {
  31. e.Type = EnvWorker
  32. e.Worker = worker
  33. }
  34. func (e *NodeEnv) Equals(other NodeEnv) bool {
  35. if e.Type != other.Type {
  36. return false
  37. }
  38. if e.Type != EnvWorker {
  39. return true
  40. }
  41. return e.Worker.Equals(other.Worker)
  42. }
  43. type Node struct {
  44. Type NodeType
  45. Env NodeEnv
  46. Props any
  47. InputStreams []*StreamVar
  48. OutputStreams []*StreamVar
  49. InputValues []*ValueVar
  50. OutputValues []*ValueVar
  51. Graph *Graph
  52. }
  53. func (n *Node) String() string {
  54. return fmt.Sprintf("%v", n.Type.String(n))
  55. }