Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Graph ¶
type Graph struct { Name string // Name of the graph Source *Node // The single source node of the graph Sink *Node // The single sink node of the graph // Nodes are keyed on node id, which is a string Nodes map[string]*Node // All nodes Edges map[string][]string // All edges RevEdges map[string][]string // All reverse edges (sink -> source) Order []*Node // Topological ordering of nodes (only used in sequence graphs) }
Graph is a DAG where nodes are node specs (if a sequence graph) or jobs (if a request graph), and a directed edge (u, v) exists iff u is a dependency of v. It has one source and one sink node.
func (*Graph) InsertComponentBetween ¶
InsertComponentBetween takes a Graph as input and inserts it between the given prev and next nodes. Preconditions:
component and g are connected and acyclic prev and next both are present in g next "comes after" prev in the graph, when traversing from the source node
func (*Graph) IsValidGraph ¶
IsValidGraph asserts that g is a valid graph by ensuring that g is acyclic and connected (not fully connected), and that the edge map matches the reverse edge map.
func (*Graph) PrintDot ¶
func (g *Graph) PrintDot()
PrintDot prints out g in DOT graph format. Copy and paste output into http://www.webgraphviz.com/ It's not used anywhere in the code, but it is a very useful debugging tool.
type Grapher ¶
type Grapher struct {
// contains filtered or unexported fields
}
Grapher builds sequence graphs. A single node in a sequence graph represents a node spec, and edges indicate dependencies between nodes in the spec. Each sequence graphs describes a single sequence spec. Sequence, conditional, and expandable sequence nodes correspond to a single node in a sequence graph, and are later resolved into a request subgraph consisting of only job nodes by the Resolver.
func NewGrapher ¶
func NewGrapher(specs spec.Specs, idGenFactory id.GeneratorFactory) *Grapher
TODO: Grapher may soon have fields that need to be initialized, e.g. it might store the sequence graph map, and we want it to start off non-nil.
func (*Grapher) CheckSequences ¶
func (gr *Grapher) CheckSequences() (map[string]*Graph, *spec.CheckResults)
CheckSequences performs graph checks for all sequences and returns a map of sequence name -> sequence graph and a map of sequence name --> error. If any error occurs, the sequence graph map is nil.
type Node ¶
type Node struct { // Always valid Id string // UID within graph Name string // Descriptive name for debugging and visualizing graph // Used when node represents a node spec Spec *spec.Node // Node spec that this graph node represents // Used when node represents a job JobBytes []byte // return value of Job.Serialize method Args map[string]interface{} // The args the node was created with Retry uint // The number of times to retry a node RetryWait string // The time to sleep between retries SequenceId string // ID for first node in sequence SequenceRetry uint // Number of times to retry a sequence. Only set for first node in sequence. SequenceRetryWait string // The time to sleep between sequence retries }
Node represents a node spec (if a sequence graph) or a job (if a request graph). Validity of fields depends on use case.
type Resolver ¶
type Resolver interface { // Convert job args map to a list of proto.RequestArgs. RequestArgs(jobArgs map[string]interface{}) ([]proto.RequestArg, error) // Build the request graph. Returns an error if any error occurs. BuildRequestGraph(jobArgs map[string]interface{}) (*Graph, error) }
Resolver builds a request graph for a specific request.
type ResolverFactory ¶
type ResolverFactory interface { // Make makes a Resolver. A new resolver should be made for every request. Make(proto.Request) Resolver }
ResolverFactory returns Resolvers tailored to create request graphs for a specific input request.
func NewResolverFactory ¶
func NewResolverFactory(jf job.Factory, seqSpecs map[string]*spec.Sequence, seqGraphs map[string]*Graph, idf id.GeneratorFactory) ResolverFactory