Skip to content

Commit

Permalink
fix(task-gtaph): emit taskCancelled events
Browse files Browse the repository at this point in the history
Emit taskCancelled events when dependants of failed tasks are cancelled.

This is a new event type.
  • Loading branch information
thsig committed Jul 10, 2019
1 parent 1ceb71b commit b6d8846
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
6 changes: 6 additions & 0 deletions garden-service/src/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,12 @@ export interface Events {
key: string,
version: ModuleVersion,
},
taskCancelled: {
cancelledAt: Date,
type: string
key: string,
name: string,
},
taskComplete: TaskResult,
taskError: TaskResult,
taskGraphProcessing: {
Expand Down
7 changes: 7 additions & 0 deletions garden-service/src/task-graph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,15 @@ export class TaskGraph {

// Recursively remove node's dependants, without removing node.
private cancelDependants(node: TaskNode) {
const cancelledAt = new Date()
for (const dependant of this.getDependants(node)) {
this.logTaskComplete(dependant, false)
this.garden.events.emit("taskCancelled", {
cancelledAt,
key: dependant.getKey(),
name: dependant.task.getName(),
type: dependant.getType(),
})
this.remove(dependant)
}
this.rebuild()
Expand Down
34 changes: 34 additions & 0 deletions garden-service/test/unit/src/task-graph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { BaseTask, TaskType } from "../../../src/tasks/base"
import { TaskGraph, TaskResult, TaskResults } from "../../../src/task-graph"
import { makeTestGarden, freezeTime, dataDir, defer } from "../../helpers"
import { Garden } from "../../../src/garden"
import { deepFilter } from "../../../src/util/util"

const projectRoot = join(dataDir, "test-project-empty")

Expand All @@ -18,6 +19,12 @@ interface TestTaskOptions {
throwError?: boolean
}

const testTaskVersion = {
versionString: "12345-6789",
dependencyVersions: {},
files: [],
}

class TestTask extends BaseTask {
type: TaskType = "test"
name: string
Expand Down Expand Up @@ -381,9 +388,36 @@ describe("task-graph", () => {
dependencyResults: {},
}

const filteredKeys: Set<string | number> = new Set([
"version", "error", "addedAt", "startedAt", "cancelledAt", "completedAt"])

const filteredEventLog = garden.events.eventLog.map(e => {
return deepFilter(e, (_, key) => !filteredKeys.has(key))
})

expect(results.a).to.eql(resultA)
expect(results.b).to.have.property("error")
expect(resultOrder).to.eql(["a", "b"])
expect(filteredEventLog).to.eql([
{ name: "taskPending", payload: { key: "a" } },
{ name: "taskPending", payload: { key: "b" } },
{ name: "taskPending", payload: { key: "c" } },
{ name: "taskPending", payload: { key: "d" } },
{ name: "taskGraphProcessing", payload: {} },
{ name: "taskProcessing", payload: { key: "a" } },
{
name: "taskComplete", payload: {
dependencyResults: {}, description: "a", key: "a", name: "a",
output: { dependencyResults: {}, result: "result-a" }, type: "test",
},
},
{ name: "taskProcessing", payload: { key: "b" } },
{ name: "taskError", payload: { description: "b", key: "b", name: "b", type: "test" } },
{ name: "taskCancelled", payload: { key: "c", name: "c", type: "test" } },
{ name: "taskCancelled", payload: { key: "d", name: "d", type: "test" } },
{ name: "taskCancelled", payload: { key: "d", name: "d", type: "test" } },
{ name: "taskGraphComplete", payload: {} },
])
})

})
Expand Down

0 comments on commit b6d8846

Please sign in to comment.