From 6bbd9bd94302e6a69ed14a0a3b803c1b3c35b7a5 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Mon, 7 Dec 2015 21:53:15 -0800 Subject: [PATCH] Bug in DynamicGraph. Was aborting when there were still running nodes. --- .../com/beust/kobalt/internal/DynamicGraph.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/internal/DynamicGraph.kt b/src/main/kotlin/com/beust/kobalt/internal/DynamicGraph.kt index 6089602f..055a2d08 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/DynamicGraph.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/DynamicGraph.kt @@ -49,24 +49,24 @@ public class DynamicGraphExecutor(val graph: DynamicGraph, public fun run() : Int { var lastResult = TaskResult() var gotError = false + var nodesRunning = 0 while (graph.freeNodes.size > 0 && ! gotError) { - log(3, "Current count: ${graph.nodeCount}") + log(3, "Current node count: ${graph.nodeCount}") synchronized(graph) { val freeNodes = graph.freeNodes freeNodes.forEach { graph.setStatus(it, DynamicGraph.Status.RUNNING)} - log(3, "submitting free nodes $freeNodes") + log(3, " ==> Submitting " + freeNodes) val callables : List> = factory.createWorkers(freeNodes) callables.forEach { completion.submit(it) } - var n = callables.size + nodesRunning += callables.size // When a callable ends, see if it freed a node. If not, keep looping - while (n > 0 && graph.freeNodes.size == 0 && ! gotError) { + while (graph.nodesRunning.size > 0 && graph.freeNodes.size == 0 && ! gotError) { try { val future = completion.take() val taskResult = future.get(2, TimeUnit.SECONDS) lastResult = taskResult - log(3, "Received task result $taskResult") - n-- + log(3, " <== Received task result $taskResult") graph.setStatus(taskResult.value, if (taskResult.success) { DynamicGraph.Status.FINISHED @@ -106,7 +106,7 @@ public class DynamicGraphExecutor(val graph: DynamicGraph, */ public class DynamicGraph { val nodesReady = linkedSetOf() - private val nodesRunning = linkedSetOf() + val nodesRunning = linkedSetOf() private val nodesFinished = linkedSetOf() private val nodesInError = linkedSetOf() private val nodesSkipped = linkedSetOf() @@ -171,7 +171,7 @@ public class DynamicGraph { // } // } - log(3, "freeNodes: $result") + log(3, " freeNodes: $result") return result } @@ -264,6 +264,7 @@ public class DynamicGraph { fun dump(nodes: Collection) : String { val result = StringBuffer() + result.append("************ Graph dump ***************\n") val free = arrayListOf() nodes.forEach { node -> val d = dependedUpon.get(node)