func TestBuildMarkStarted(t *testing.T) { Convey("With a build", t, func() { testutil.HandleTestingErr(db.Clear(build.Collection), t, "Error clearing"+ " '%v' collection", build.Collection) b := &build.Build{ Id: "build", Status: evergreen.BuildCreated, } So(b.Insert(), ShouldBeNil) Convey("marking it as started should update the status and"+ " start time, both in memory and in the database", func() { startTime := time.Now() So(build.TryMarkStarted(b.Id, startTime), ShouldBeNil) // refresh from db and check again b, err := build.FindOne(build.ById(b.Id)) So(err, ShouldBeNil) So(b.Status, ShouldEqual, evergreen.BuildStarted) So(b.StartTime.Round(time.Second).Equal( startTime.Round(time.Second)), ShouldBeTrue) }) }) }
// MarkStart updates the task, build, version and if necessary, patch documents with the task start time func MarkStart(taskId string) error { t, err := task.FindOne(task.ById(taskId)) if err != nil { return err } startTime := time.Now() if err = t.MarkStart(startTime); err != nil { return err } event.LogTaskStarted(t.Id) // ensure the appropriate build is marked as started if necessary if err = build.TryMarkStarted(t.BuildId, startTime); err != nil { return err } // ensure the appropriate version is marked as started if necessary if err = MarkVersionStarted(t.Version, startTime); err != nil { return err } // if it's a patch, mark the patch as started if necessary if t.Requester == evergreen.PatchVersionRequester { if err = patch.TryMarkStarted(t.Version, startTime); err != nil { return err } } // update the cached version of the task, in its build document return build.SetCachedTaskStarted(t.BuildId, t.Id, startTime) }
func (t *Task) MarkStart() error { // record the start time in the in-memory task startTime := time.Now() t.StartTime = startTime t.Status = evergreen.TaskStarted err := UpdateOneTask( bson.M{ TaskIdKey: t.Id, }, bson.M{ "$set": bson.M{ TaskStatusKey: evergreen.TaskStarted, TaskStartTimeKey: startTime, }, }, ) if err != nil { return err } event.LogTaskStarted(t.Id) // ensure the appropriate build is marked as started if necessary if err = build.TryMarkStarted(t.BuildId, startTime); err != nil { return err } // ensure the appropriate version is marked as started if necessary if err = MarkVersionStarted(t.Version, startTime); err != nil { return err } // if it's a patch, mark the patch as started if necessary if t.Requester == evergreen.PatchVersionRequester { if err = patch.TryMarkStarted(t.Version, startTime); err != nil { return err } } // update the cached version of the task, in its build document return build.SetCachedTaskStarted(t.BuildId, t.Id, startTime) }