Merge branch 'master' into 4046-job-queue-position
[arvados.git] / sdk / cli / bin / arv-run-pipeline-instance
index 040a71db2c10ff4968dc378909cb312dd6ae4c22..c6ccf842a5c617422412f52dc549e132053e8939 100755 (executable)
@@ -652,8 +652,9 @@ class WhRunPipelineInstance
                 end
               end
             end
-          elsif c[:job][:state] == "Running"
-            # Job is still running
+          elsif ["Queued", "Running"].include? c[:job][:state]
+            # Job is running or queued to run, so indicate that pipeline
+            # should continue to run
             moretodo = true
           elsif c[:job][:state] == "Cancelled"
             debuglog "component #{cname} job #{c[:job][:uuid]} cancelled."
@@ -686,17 +687,12 @@ class WhRunPipelineInstance
       end
     end
 
-    ended = @components.map { |cname, c| 
-      if c[:job] and ["Complete", "Failed", "Cancelled"].include? c[:job][:state] then 1 else 0 end 
-    }.reduce(:+) || 0
-
-    succeeded = @components.map { |cname, c| 
-      if c[:job] and ["Complete"].include? c[:job][:state] then 1 else 0 end 
-    }.reduce(:+) || 0
-
-    failed = @components.map { |cname, c| 
-      if c[:job] and ["Failed", "Cancelled"].include? c[:job][:state] then 1 else 0  end 
-    }.reduce(:+) || 0
+    c_in_state = @components.values.group_by { |c|
+      c[:job] and c[:job][:state]
+    }
+    succeeded = c_in_state["Complete"].andand.count || 0
+    failed = (c_in_state["Failed"].andand.count || 0) + (c_in_state["Cancelled"].andand.count || 0)
+    ended = succeeded + failed
 
     success = (succeeded == @components.length)