ソースを参照

fix: Incorrect iteration log display in workflow with multiple parallel mode iteartaion nodes (#11158)

Co-authored-by: Novice Lee <novicelee@NovicedeMacBook-Pro.local>
Novice 4 ヶ月 前
コミット
baef18cedd
共有3 個のファイルを変更した25 個の追加10 個の削除を含む
  1. 13 6
      web/app/components/workflow/hooks/use-workflow-run.ts
  2. 9 1
      web/app/components/workflow/run/index.tsx
  3. 3 3
      web/app/components/workflow/store.ts

+ 13 - 6
web/app/components/workflow/hooks/use-workflow-run.ts

@@ -271,13 +271,18 @@ export const useWorkflowRun = () => {
                 } as any)
               }
               else {
-                if (!iterParallelLogMap.has(data.parallel_run_id))
-                  iterParallelLogMap.set(data.parallel_run_id, [{ ...data, status: NodeRunningStatus.Running } as any])
+                const nodeId = iterations?.node_id as string
+                if (!iterParallelLogMap.has(nodeId as string))
+                  iterParallelLogMap.set(iterations?.node_id as string, new Map())
+
+                const currentIterLogMap = iterParallelLogMap.get(nodeId)!
+                if (!currentIterLogMap.has(data.parallel_run_id))
+                  currentIterLogMap.set(data.parallel_run_id, [{ ...data, status: NodeRunningStatus.Running } as any])
                 else
-                  iterParallelLogMap.get(data.parallel_run_id)!.push({ ...data, status: NodeRunningStatus.Running } as any)
+                  currentIterLogMap.get(data.parallel_run_id)!.push({ ...data, status: NodeRunningStatus.Running } as any)
                 setIterParallelLogMap(iterParallelLogMap)
                 if (iterations)
-                  iterations.details = Array.from(iterParallelLogMap.values())
+                  iterations.details = Array.from(currentIterLogMap.values())
               }
             }))
           }
@@ -373,7 +378,7 @@ export const useWorkflowRun = () => {
                 if (iterations && iterations.details) {
                   const iterRunID = data.execution_metadata?.parallel_mode_run_id
 
-                  const currIteration = iterParallelLogMap.get(iterRunID)
+                  const currIteration = iterParallelLogMap.get(iterations.node_id)?.get(iterRunID)
                   const nodeIndex = currIteration?.findIndex(node =>
                     node.node_id === data.node_id && (
                       node?.parallel_run_id === data.execution_metadata?.parallel_mode_run_id),
@@ -392,7 +397,9 @@ export const useWorkflowRun = () => {
                     }
                   }
                   setIterParallelLogMap(iterParallelLogMap)
-                  iterations.details = Array.from(iterParallelLogMap.values())
+                  const iterLogMap = iterParallelLogMap.get(iterations.node_id)
+                  if (iterLogMap)
+                    iterations.details = Array.from(iterLogMap.values())
                 }
               }))
             }

+ 9 - 1
web/app/components/workflow/run/index.tsx

@@ -62,7 +62,7 @@ const RunPanel: FC<RunProps> = ({ hideResult, activeTab = 'RESULT', runID, getRe
   const formatNodeList = useCallback((list: NodeTracing[]) => {
     const allItems = [...list].reverse()
     const result: NodeTracing[] = []
-    const groupMap = new Map<string, NodeTracing[]>()
+    const nodeGroupMap = new Map<string, Map<string, NodeTracing[]>>()
 
     const processIterationNode = (item: NodeTracing) => {
       result.push({
@@ -70,11 +70,19 @@ const RunPanel: FC<RunProps> = ({ hideResult, activeTab = 'RESULT', runID, getRe
         details: [],
       })
     }
+
     const updateParallelModeGroup = (runId: string, item: NodeTracing, iterationNode: NodeTracing) => {
+      if (!nodeGroupMap.has(iterationNode.node_id))
+        nodeGroupMap.set(iterationNode.node_id, new Map())
+
+      const groupMap = nodeGroupMap.get(iterationNode.node_id)!
+
       if (!groupMap.has(runId))
         groupMap.set(runId, [item])
+
       else
         groupMap.get(runId)!.push(item)
+
       if (item.status === 'failed') {
         iterationNode.status = 'failed'
         iterationNode.error = item.error

+ 3 - 3
web/app/components/workflow/store.ts

@@ -169,8 +169,8 @@ type Shape = {
   setShowTips: (showTips: string) => void
   iterTimes: number
   setIterTimes: (iterTimes: number) => void
-  iterParallelLogMap: Map<string, NodeTracing[]>
-  setIterParallelLogMap: (iterParallelLogMap: Map<string, NodeTracing[]>) => void
+  iterParallelLogMap: Map<string, Map<string, NodeTracing[]>>
+  setIterParallelLogMap: (iterParallelLogMap: Map<string, Map<string, NodeTracing[]>>) => void
 }
 
 export const createWorkflowStore = () => {
@@ -288,7 +288,7 @@ export const createWorkflowStore = () => {
     setShowTips: showTips => set(() => ({ showTips })),
     iterTimes: 1,
     setIterTimes: iterTimes => set(() => ({ iterTimes })),
-    iterParallelLogMap: new Map<string, NodeTracing[]>(),
+    iterParallelLogMap: new Map<string, Map<string, NodeTracing[]>>(),
     setIterParallelLogMap: iterParallelLogMap => set(() => ({ iterParallelLogMap })),
 
   }))