From 6d9cc3e81593283f4443cd5f4c789ff61ed0c873 Mon Sep 17 00:00:00 2001 From: Florian Gerlinghoff Date: Sun, 12 Dec 2021 20:57:15 +0100 Subject: fix(trace): Read dependencies from .gwf trace file (#50) Tasks from a .gwf trace file did not have dependencies because this property was not assigned after being read in the GwfTaskTableReader. I removed the conversion from String to Long in parseParents because it seems like other readers (the Parquet reader in particular) return Strings as well, which is why they are converted to Long in line 75 of TraceHelpers.kt. Co-authored-by: Fabian Mastenbroek --- .../kotlin/org/opendc/trace/gwf/GwfTaskTableReader.kt | 10 +++++----- .../kotlin/org/opendc/trace/gwf/GwfTraceFormatTest.kt | 19 +++++++++++++++++++ .../opendc/workflow/service/WorkflowServiceTest.kt | 2 +- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/opendc-trace/opendc-trace-gwf/src/main/kotlin/org/opendc/trace/gwf/GwfTaskTableReader.kt b/opendc-trace/opendc-trace-gwf/src/main/kotlin/org/opendc/trace/gwf/GwfTaskTableReader.kt index aa4c543b..7f01ef2b 100644 --- a/opendc-trace/opendc-trace-gwf/src/main/kotlin/org/opendc/trace/gwf/GwfTaskTableReader.kt +++ b/opendc-trace/opendc-trace-gwf/src/main/kotlin/org/opendc/trace/gwf/GwfTaskTableReader.kt @@ -60,7 +60,7 @@ internal class GwfTaskTableReader(private val parser: CsvParser) : TableReader { "RunTime" -> runtime = Duration.ofSeconds(parser.longValue) "NProcs" -> nProcs = parser.intValue "ReqNProcs" -> reqNProcs = parser.intValue - "Dependencies" -> parseParents(parser.valueAsString) + "Dependencies" -> dependencies = parseParents(parser.valueAsString) } } @@ -119,8 +119,8 @@ internal class GwfTaskTableReader(private val parser: CsvParser) : TableReader { /** * Parse the parents into a set of longs. */ - private fun parseParents(value: String): Set { - val result = mutableSetOf() + private fun parseParents(value: String): Set { + val result = mutableSetOf() val deps = value.split(pattern) for (dep in deps) { @@ -128,7 +128,7 @@ internal class GwfTaskTableReader(private val parser: CsvParser) : TableReader { continue } - result.add(dep.toLong(10)) + result.add(dep) } return result @@ -156,7 +156,7 @@ internal class GwfTaskTableReader(private val parser: CsvParser) : TableReader { private var runtime: Duration? = null private var nProcs = -1 private var reqNProcs = -1 - private var dependencies = emptySet() + private var dependencies = emptySet() /** * Reset the state. diff --git a/opendc-trace/opendc-trace-gwf/src/test/kotlin/org/opendc/trace/gwf/GwfTraceFormatTest.kt b/opendc-trace/opendc-trace-gwf/src/test/kotlin/org/opendc/trace/gwf/GwfTraceFormatTest.kt index 7fe403b2..5dfd02a1 100644 --- a/opendc-trace/opendc-trace-gwf/src/test/kotlin/org/opendc/trace/gwf/GwfTraceFormatTest.kt +++ b/opendc-trace/opendc-trace-gwf/src/test/kotlin/org/opendc/trace/gwf/GwfTraceFormatTest.kt @@ -69,4 +69,23 @@ internal class GwfTraceFormatTest { { assertEquals(emptySet(), reader.get(TASK_PARENTS)) }, ) } + + @Test + fun testReadingRowWithDependencies() { + val path = Paths.get(checkNotNull(GwfTraceFormatTest::class.java.getResource("/trace.gwf")).toURI()) + val reader = format.newReader(path, TABLE_TASKS) + + // Move to row 7 + for (x in 1..6) + reader.nextRow() + + assertAll( + { assertTrue(reader.nextRow()) }, + { assertEquals("0", reader.get(TASK_WORKFLOW_ID)) }, + { assertEquals("7", reader.get(TASK_ID)) }, + { assertEquals(Instant.ofEpochSecond(87), reader.get(TASK_SUBMIT_TIME)) }, + { assertEquals(Duration.ofSeconds(11), reader.get(TASK_RUNTIME)) }, + { assertEquals(setOf("4", "5", "6"), reader.get(TASK_PARENTS)) }, + ) + } } diff --git a/opendc-workflow/opendc-workflow-service/src/test/kotlin/org/opendc/workflow/service/WorkflowServiceTest.kt b/opendc-workflow/opendc-workflow-service/src/test/kotlin/org/opendc/workflow/service/WorkflowServiceTest.kt index 066e9685..214d5135 100644 --- a/opendc-workflow/opendc-workflow-service/src/test/kotlin/org/opendc/workflow/service/WorkflowServiceTest.kt +++ b/opendc-workflow/opendc-workflow-service/src/test/kotlin/org/opendc/workflow/service/WorkflowServiceTest.kt @@ -104,7 +104,7 @@ internal class WorkflowServiceTest { { assertEquals(metrics.jobsSubmitted, metrics.jobsFinished, "Not all started jobs finished") }, { assertEquals(0, metrics.tasksActive, "Not all started tasks finished") }, { assertEquals(metrics.tasksSubmitted, metrics.tasksFinished, "Not all started tasks finished") }, - { assertEquals(33214236L, clock.millis()) { "Total duration incorrect" } } + { assertEquals(32649883L, clock.millis()) { "Total duration incorrect" } } ) } -- cgit v1.2.3