engine: graph: Pass through the graph struct

We want to use it in the resources.
This commit is contained in:
James Shubin
2019-10-25 09:31:08 -04:00
parent dea8e63df2
commit 325ca03a13
3 changed files with 26 additions and 10 deletions

View File

@@ -191,7 +191,7 @@ func (obj *Engine) Commit() error {
obj.waits[vertex] = &sync.WaitGroup{} obj.waits[vertex] = &sync.WaitGroup{}
obj.state[vertex] = &State{ obj.state[vertex] = &State{
//Graph: obj.graph, // TODO: what happens if we swap the graph? Graph: obj.graph, // Update if we swap the graph!
Vertex: vertex, Vertex: vertex,
Program: obj.Program, Program: obj.Program,
@@ -329,14 +329,14 @@ func (obj *Engine) Commit() error {
// the changes that we'd made to the previously primary graph. This is // the changes that we'd made to the previously primary graph. This is
// because this function is meant to atomically swap the graphs safely. // because this function is meant to atomically swap the graphs safely.
// TODO: update all the `State` structs with the new Graph pointer // Update all the `State` structs with the new Graph pointer.
//for _, vertex := range obj.graph.Vertices() { for _, vertex := range obj.graph.Vertices() {
// state, exists := obj.state[vertex] state, exists := obj.state[vertex]
// if !exists { if !exists {
// continue continue
// } }
// state.Graph = obj.graph // update pointer to graph state.Graph = obj.graph // update pointer to graph
//} }
return nil return nil
} }

View File

@@ -32,7 +32,7 @@ import (
// State stores some state about the resource it is mapped to. // State stores some state about the resource it is mapped to.
type State struct { type State struct {
// Graph is a pointer to the graph that this vertex is part of. // Graph is a pointer to the graph that this vertex is part of.
//Graph pgraph.Graph Graph *pgraph.Graph
// Vertex is the pointer in the graph that this state corresponds to. It // Vertex is the pointer in the graph that this state corresponds to. It
// can be converted to a `Res` if necessary. // can be converted to a `Res` if necessary.
@@ -190,6 +190,16 @@ func (obj *State) Init() error {
return res.Recv() return res.Recv()
}, },
// FIXME: pass in a safe, limited query func instead?
// TODO: not implemented, use FilteredGraph
//Graph: func() *pgraph.Graph {
// _, ok := obj.Vertex.(engine.CanGraphQueryRes)
// if !ok {
// panic("res does not support the GraphQuery trait")
// }
// return obj.Graph // we return in a func so it's fresh!
//},
World: obj.World, World: obj.World,
VarDir: obj.varDir, VarDir: obj.varDir,

View File

@@ -120,6 +120,12 @@ type Init struct {
// Other functionality: // Other functionality:
// Graph is a function that returns the current graph. The returned
// value won't be valid after a graphsync so make sure to call this when
// you are about to use it, and discard it right after.
// FIXME: it might be better to offer a safer, more limited, GraphQuery?
//Graph func() *pgraph.Graph // TODO: not implemented, use FilteredGraph
// World provides a connection to the outside world. This is most often // World provides a connection to the outside world. This is most often
// used for communicating with the distributed database. // used for communicating with the distributed database.
World World World World