func (taskEvents *taskSendableEvents) submitFirstEvent(handler *TaskHandler, backoff retry.Backoff) (bool, error) {
	seelog.Debug("TaskHandler: Acquiring lock for sending event...")
	taskEvents.lock.Lock()
	defer taskEvents.lock.Unlock()

	seelog.Debugf("TaskHandler: Acquired lock, processing event list: : %s", taskEvents.toStringUnsafe())

	if taskEvents.events.Len() == 0 {
		seelog.Debug("TaskHandler: No events left; not retrying more")
		taskEvents.sending = false
		return true, nil
	}

	eventToSubmit := taskEvents.events.Front()
	// Extract the wrapped event from the list element
	event := eventToSubmit.Value.(*sendableEvent)

	if event.containerShouldBeSent() {
		if err := event.send(sendContainerStatusToECS, setContainerChangeSent, "container",
			handler.client, eventToSubmit, handler.stateSaver, backoff, taskEvents); err != nil {
			return false, err
		}
	} else if event.taskShouldBeSent() {
		if err := event.send(sendTaskStatusToECS, setTaskChangeSent, "task",
			handler.client, eventToSubmit, handler.stateSaver, backoff, taskEvents); err != nil {
			handleInvalidParamException(err, taskEvents.events, eventToSubmit)
			return false, err
		}
	} else if event.taskAttachmentShouldBeSent() {
		if err := event.send(sendTaskStatusToECS, setTaskAttachmentSent, "task attachment",
			handler.client, eventToSubmit, handler.stateSaver, backoff, taskEvents); err != nil {
			handleInvalidParamException(err, taskEvents.events, eventToSubmit)
			return false, err
		}
	} else {
		// Shouldn't be sent as either a task or container change event; must have been already sent
		seelog.Infof("TaskHandler: Not submitting redundant event; just removing: %s", event.toString())
		taskEvents.events.Remove(eventToSubmit)
	}

	if taskEvents.events.Len() == 0 {
		seelog.Debug("TaskHandler: Removed the last element, no longer sending")
		taskEvents.sending = false
		return true, nil
	}

	return false, nil
}
func (taskEvents *taskSendableEvents) submitFirstEvent(handler *TaskHandler, backoff retry.Backoff) (bool, error) {
	seelog.Debug("TaskHandler: Acquiring lock for sending event...")
	taskEvents.lock.Lock()
	defer taskEvents.lock.Unlock()

	seelog.Debugf("TaskHandler: Acquired lock, processing event list: : %s", taskEvents.toStringUnsafe())

	if taskEvents.events.Len() == 0 {
		seelog.Debug("TaskHandler: No events left; not retrying more")
		taskEvents.sending = false
		return true, nil
	}

	eventToSubmit := taskEvents.events.Front()
	// Extract the wrapped event from the list element
	event := eventToSubmit.Value.(*sendableEvent)

	if event.containerShouldBeSent() {
		if err := event.send(sendContainerStatusToECS, setContainerChangeSent, "container",
			handler.client, eventToSubmit, handler.stateSaver, backoff, taskEvents); err != nil {
			return false, err
		}
	} else if event.taskShouldBeSent() {
		if err := event.send(sendTaskStatusToECS, setTaskChangeSent, "task",
			handler.client, eventToSubmit, handler.stateSaver, backoff, taskEvents); err != nil {
			handleInvalidParamException(err, taskEvents.events, eventToSubmit)
			return false, err
		}
	} else if event.taskAttachmentShouldBeSent() {
		if err := event.send(sendTaskStatusToECS, setTaskAttachmentSent, "task attachment",
			handler.client, eventToSubmit, handler.stateSaver, backoff, taskEvents); err != nil {
			handleInvalidParamException(err, taskEvents.events, eventToSubmit)
			return false, err
		}
	} else {
		// Shouldn't be sent as either a task or container change event; must have been already sent
		seelog.Infof("TaskHandler: Not submitting redundant event; just removing: %s", event.toString())
		taskEvents.events.Remove(eventToSubmit)
	}

	if taskEvents.events.Len() == 0 {
		seelog.Debug("TaskHandler: Removed the last element, no longer sending")
		taskEvents.sending = false
		return true, nil
	}

	return false, nil
}
func ( taskEvents * taskSendableEvents ) submitFirstEvent ( handler * TaskHandler , backoff retry . Backoff ) ( bool , error ) { seelog . Debug ( " " ) taskEvents . lock . Lock ( ) defer taskEvents . lock . Unlock ( ) seelog . Debugf ( " " , taskEvents . toStringUnsafe ( ) ) if taskEvents . events . Len ( ) == 0 { seelog . Debug ( " " ) taskEvents . sending = false return true , nil } eventToSubmit := taskEvents . events . Front ( ) // Extract the wrapped event from the list element event := eventToSubmit . Value . ( * sendableEvent ) if event . containerShouldBeSent ( ) { if err := event . send ( sendContainerStatusToECS , setContainerChangeSent , " " , handler . client , eventToSubmit , handler . stateSaver , backoff , taskEvents ) ; err != nil { return false , err } } else if event . taskShouldBeSent ( ) { if err := event . send ( sendTaskStatusToECS , setTaskChangeSent , " " , handler . client , eventToSubmit , handler . stateSaver , backoff , taskEvents ) ; err != nil { handleInvalidParamException ( err , taskEvents . events , eventToSubmit ) return false , err } } else if event . taskAttachmentShouldBeSent ( ) { if err := event . send ( sendTaskStatusToECS , setTaskAttachmentSent , " " , handler . client , eventToSubmit , handler . stateSaver , backoff , taskEvents ) ; err != nil { handleInvalidParamException ( err , taskEvents . events , eventToSubmit ) return false , err } } else { // Shouldn't be sent as either a task or container change event; must have been already sent seelog . Infof ( " " , event . toString ( ) ) taskEvents . events . Remove ( eventToSubmit ) } if taskEvents . events . Len ( ) == 0 { seelog . Debug ( " " ) taskEvents . sending = false return true , nil } return false , nil }
// submitFirstEvent submits the first event for the task from the event list. It
// returns true if the list became empty after submitting the event. Else, it returns
// false. An error is returned if there was an error with submitting the state change
// to ECS. The error is used by the backoff handler to backoff before retrying the
// state change submission for the first event
submitFirstEvent submits the first event for the task from the event list . It returns true if the list became empty after submitting the event . Else it returns false . An error is returned if there was an error with submitting the state change to ECS . The error is used by the backoff handler to backoff before retrying the state change submission for the first event