func (engine *DockerTaskEngine) AddTask(task *apitask.Task) {
	defer metrics.MetricsEngineGlobal.RecordTaskEngineMetric("ADD_TASK")()
	err := task.PostUnmarshalTask(engine.cfg, engine.credentialsManager,
		engine.resourceFields, engine.client, engine.ctx)
	if err != nil {
		seelog.Errorf("Task engine [%s]: unable to add task to the engine: %v", task.Arn, err)
		task.SetKnownStatus(apitaskstatus.TaskStopped)
		task.SetDesiredStatus(apitaskstatus.TaskStopped)
		engine.emitTaskEvent(task, err.Error())
		return
	}

	engine.tasksLock.Lock()
	defer engine.tasksLock.Unlock()

	existingTask, exists := engine.state.TaskByArn(task.Arn)
	if !exists {
		// This will update the container desired status
		task.UpdateDesiredStatus()

		engine.state.AddTask(task)
		if dependencygraph.ValidDependencies(task) {
			engine.startTask(task)
		} else {
			seelog.Errorf("Task engine [%s]: unable to progress task with circular dependencies", task.Arn)
			task.SetKnownStatus(apitaskstatus.TaskStopped)
			task.SetDesiredStatus(apitaskstatus.TaskStopped)
			err := TaskDependencyError{task.Arn}
			engine.emitTaskEvent(task, err.Error())
		}
		return
	}

	// Update task
	engine.updateTaskUnsafe(existingTask, task)
}
func (engine *DockerTaskEngine) AddTask(task *apitask.Task) {
	defer metrics.MetricsEngineGlobal.RecordTaskEngineMetric("ADD_TASK")()
	err := task.PostUnmarshalTask(engine.cfg, engine.credentialsManager,
		engine.resourceFields, engine.client, engine.ctx)
	if err != nil {
		seelog.Errorf("Task engine [%s]: unable to add task to the engine: %v", task.Arn, err)
		task.SetKnownStatus(apitaskstatus.TaskStopped)
		task.SetDesiredStatus(apitaskstatus.TaskStopped)
		engine.emitTaskEvent(task, err.Error())
		return
	}

	engine.tasksLock.Lock()
	defer engine.tasksLock.Unlock()

	existingTask, exists := engine.state.TaskByArn(task.Arn)
	if !exists {
		
		task.UpdateDesiredStatus()

		engine.state.AddTask(task)
		if dependencygraph.ValidDependencies(task) {
			engine.startTask(task)
		} else {
			seelog.Errorf("Task engine [%s]: unable to progress task with circular dependencies", task.Arn)
			task.SetKnownStatus(apitaskstatus.TaskStopped)
			task.SetDesiredStatus(apitaskstatus.TaskStopped)
			err := TaskDependencyError{task.Arn}
			engine.emitTaskEvent(task, err.Error())
		}
		return
	}

	
	engine.updateTaskUnsafe(existingTask, task)
}
func ( engine * DockerTaskEngine ) AddTask ( task * apitask . Task ) { defer metrics . MetricsEngineGlobal . RecordTaskEngineMetric ( " " ) ( ) err := task . PostUnmarshalTask ( engine . cfg , engine . credentialsManager , engine . resourceFields , engine . client , engine . ctx ) if err != nil { seelog . Errorf ( " " , task . Arn , err ) task . SetKnownStatus ( apitaskstatus . TaskStopped ) task . SetDesiredStatus ( apitaskstatus . TaskStopped ) engine . emitTaskEvent ( task , err . Error ( ) ) return } engine . tasksLock . Lock ( ) defer engine . tasksLock . Unlock ( ) existingTask , exists := engine . state . TaskByArn ( task . Arn ) if ! exists { // This will update the container desired status task . UpdateDesiredStatus ( ) engine . state . AddTask ( task ) if dependencygraph . ValidDependencies ( task ) { engine . startTask ( task ) } else { seelog . Errorf ( " " , task . Arn ) task . SetKnownStatus ( apitaskstatus . TaskStopped ) task . SetDesiredStatus ( apitaskstatus . TaskStopped ) err := TaskDependencyError { task . Arn } engine . emitTaskEvent ( task , err . Error ( ) ) } return } // Update task engine . updateTaskUnsafe ( existingTask , task ) }
// AddTask starts tracking a task
AddTask starts tracking a task