|
|
@ -129,9 +129,9 @@ func SoonestSignal(signals []QueuedSignal) (*QueuedSignal, <-chan time.Time) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func RunNode(ctx *Context, node *Node) {
|
|
|
|
func runNode(ctx *Context, node *Node) {
|
|
|
|
ctx.Log.Logf("node", "RUN_START: %s", node.ID)
|
|
|
|
ctx.Log.Logf("node", "RUN_START: %s", node.ID)
|
|
|
|
err := NodeLoop(ctx, node)
|
|
|
|
err := nodeLoop(ctx, node)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -144,7 +144,7 @@ type Msg struct {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Main Loop for Threads, starts a write context, so cannot be called from a write or read context
|
|
|
|
// Main Loop for Threads, starts a write context, so cannot be called from a write or read context
|
|
|
|
func NodeLoop(ctx *Context, node *Node) error {
|
|
|
|
func nodeLoop(ctx *Context, node *Node) error {
|
|
|
|
started := node.Active.CompareAndSwap(false, true)
|
|
|
|
started := node.Active.CompareAndSwap(false, true)
|
|
|
|
if started == false {
|
|
|
|
if started == false {
|
|
|
|
return fmt.Errorf("%s is already started, will not start again", node.ID)
|
|
|
|
return fmt.Errorf("%s is already started, will not start again", node.ID)
|
|
|
@ -302,7 +302,7 @@ func NewNode(ctx *Context, id NodeID, node_type NodeType, queued_signals []Queue
|
|
|
|
ctx.Nodes[id] = node
|
|
|
|
ctx.Nodes[id] = node
|
|
|
|
WriteNode(ctx, node)
|
|
|
|
WriteNode(ctx, node)
|
|
|
|
|
|
|
|
|
|
|
|
go RunNode(ctx, node)
|
|
|
|
go runNode(ctx, node)
|
|
|
|
|
|
|
|
|
|
|
|
return node
|
|
|
|
return node
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -557,7 +557,7 @@ func LoadNode(ctx * Context, id NodeID) (*Node, error) {
|
|
|
|
|
|
|
|
|
|
|
|
ctx.Log.Logf("db", "DB_NODE_LOADED: %s", id)
|
|
|
|
ctx.Log.Logf("db", "DB_NODE_LOADED: %s", id)
|
|
|
|
|
|
|
|
|
|
|
|
go RunNode(ctx, node)
|
|
|
|
go runNode(ctx, node)
|
|
|
|
|
|
|
|
|
|
|
|
return node, nil
|
|
|
|
return node, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -603,24 +603,6 @@ func ACLList(list []*Node, resources []string) ACLMap {
|
|
|
|
return reqs
|
|
|
|
return reqs
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type NodeType string
|
|
|
|
|
|
|
|
func (node NodeType) Hash() uint64 {
|
|
|
|
|
|
|
|
hash := sha512.Sum512([]byte(fmt.Sprintf("NODE: %s", string(node))))
|
|
|
|
|
|
|
|
return binary.BigEndian.Uint64(hash[(len(hash)-9):(len(hash)-1)])
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type PolicyType string
|
|
|
|
|
|
|
|
func (policy PolicyType) Hash() uint64 {
|
|
|
|
|
|
|
|
hash := sha512.Sum512([]byte(fmt.Sprintf("POLICY: %s", string(policy))))
|
|
|
|
|
|
|
|
return binary.BigEndian.Uint64(hash[(len(hash)-9):(len(hash)-1)])
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type ExtType string
|
|
|
|
|
|
|
|
func (ext ExtType) Hash() uint64 {
|
|
|
|
|
|
|
|
hash := sha512.Sum512([]byte(fmt.Sprintf("EXTENSION: %s", string(ext))))
|
|
|
|
|
|
|
|
return binary.BigEndian.Uint64(hash[(len(hash)-9):(len(hash)-1)])
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type NodeMap map[NodeID]*Node
|
|
|
|
type NodeMap map[NodeID]*Node
|
|
|
|
|
|
|
|
|
|
|
|
type ACLInfo struct {
|
|
|
|
type ACLInfo struct {
|
|
|
|