MCPcopy Create free account
hub / github.com/astercloud/aster / executeNode

Method executeNode

pkg/workflow/engine.go:516–603  ·  view source on GitHub ↗

executeNode 执行单个节点

(execution *WorkflowExecution, nodeID string)

Source from the content-addressed store, hash-verified

514
515// executeNode 执行单个节点
516func (e *Engine) executeNode(execution *WorkflowExecution, nodeID string) bool {
517 node := e.findNode(execution.Definition, nodeID)
518 if node == nil {
519 e.markExecutionFailed(execution, fmt.Errorf("node not found: %s", nodeID))
520 return false
521 }
522
523 // 检查节点是否已完成
524 if execution.CompletedNodes[nodeID] {
525 return true
526 }
527
528 // 检查节点是否失败
529 if _, failed := execution.FailedNodes[nodeID]; failed {
530 return false
531 }
532
533 // 创建节点结果
534 result := &NodeResult{
535 NodeID: nodeID,
536 NodeName: node.Name,
537 NodeType: node.Type,
538 Status: StatusRunning,
539 StartTime: time.Now(),
540 Inputs: make(map[string]any),
541 Outputs: make(map[string]any),
542 Metadata: make(map[string]any),
543 }
544
545 // 执行节点
546 var err error
547 switch node.Type {
548 case NodeTypeStart:
549 err = e.executeStartNode(execution, node, result)
550 case NodeTypeEnd:
551 err = e.executeEndNode(execution, node, result)
552 case NodeTypeTask:
553 err = e.executeTaskNode(execution, node, result)
554 case NodeTypeCondition:
555 err = e.executeConditionNode(execution, node, result)
556 case NodeTypeLoop:
557 err = e.executeLoopNode(execution, node, result)
558 case NodeTypeParallel:
559 err = e.executeParallelNode(execution, node, result)
560 case NodeTypeMerge:
561 err = e.executeMergeNode(execution, node, result)
562 default:
563 err = fmt.Errorf("unsupported node type: %s", node.Type)
564 }
565
566 // 更新结果
567 result.EndTime = time.Now()
568 result.Duration = result.EndTime.Sub(result.StartTime)
569
570 if err != nil {
571 result.Status = StatusFailed
572 result.Error = err.Error()
573 execution.FailedNodes[nodeID] = err

Callers 2

executeNodesMethod · 0.95
executeNodesMethod · 0.80

Calls 11

findNodeMethod · 0.95
markExecutionFailedMethod · 0.95
executeStartNodeMethod · 0.95
executeEndNodeMethod · 0.95
executeTaskNodeMethod · 0.95
executeConditionNodeMethod · 0.95
executeLoopNodeMethod · 0.95
executeParallelNodeMethod · 0.95
executeMergeNodeMethod · 0.95
PublishMethod · 0.80
ErrorMethod · 0.65

Tested by

no test coverage detected