agent/acs/handler/payload_handler.go
func (payloadHandler *payloadRequestHandler) handleSingleMessage(payload *ecsacs.PayloadMessage) error {
	if aws.StringValue(payload.MessageId) == "" {
		seelog.Criticalf("Received a payload with no message id")
		return fmt.Errorf("received a payload with no message id")
	}
	seelog.Debugf("Received payload message, message id: %s", aws.StringValue(payload.MessageId))
	credentialsAcks, allTasksHandled := payloadHandler.addPayloadTasks(payload)
	// save the state of tasks we know about after passing them to the task engine
	err := payloadHandler.saver.Save()
	if err != nil {
		seelog.Errorf("Error saving state for payload message! err: %v, messageId: %s", err, aws.StringValue(payload.MessageId))
		// Don't ack; maybe we can save it in the future.
		return fmt.Errorf("error saving state for payload message, with messageId: %s", aws.StringValue(payload.MessageId))
	}
	if !allTasksHandled {
		return fmt.Errorf("did not handle all tasks")
	}

	go func() {
		// Throw the ack in async; it doesn't really matter all that much and this is blocking handling more tasks.
		for _, credentialsAck := range credentialsAcks {
			payloadHandler.refreshHandler.ackMessage(credentialsAck)
		}
		payloadHandler.ackRequest <- *payload.MessageId
	}()

	return nil
}
func (payloadHandler *payloadRequestHandler) handleSingleMessage(payload *ecsacs.PayloadMessage) error {
	if aws.StringValue(payload.MessageId) == "" {
		seelog.Criticalf("Received a payload with no message id")
		return fmt.Errorf("received a payload with no message id")
	}
	seelog.Debugf("Received payload message, message id: %s", aws.StringValue(payload.MessageId))
	credentialsAcks, allTasksHandled := payloadHandler.addPayloadTasks(payload)
	// save the state of tasks we know about after passing them to the task engine
	err := payloadHandler.saver.Save()
	if err != nil {
		seelog.Errorf("Error saving state for payload message! err: %v, messageId: %s", err, aws.StringValue(payload.MessageId))
		// Don't ack; maybe we can save it in the future.
		return fmt.Errorf("error saving state for payload message, with messageId: %s", aws.StringValue(payload.MessageId))
	}
	if !allTasksHandled {
		return fmt.Errorf("did not handle all tasks")
	}

	go func() {
		// Throw the ack in async; it doesn't really matter all that much and this is blocking handling more tasks.
		for _, credentialsAck := range credentialsAcks {
			payloadHandler.refreshHandler.ackMessage(credentialsAck)
		}
		payloadHandler.ackRequest <- *payload.MessageId
	}()

	return nil
}
func ( payloadHandler * payloadRequestHandler ) handleSingleMessage ( payload * ecsacs . PayloadMessage ) error { if aws . StringValue ( payload . MessageId ) == " " { seelog . Criticalf ( " " ) return fmt . Errorf ( " " ) } seelog . Debugf ( " " , aws . StringValue ( payload . MessageId ) ) credentialsAcks , allTasksHandled := payloadHandler . addPayloadTasks ( payload ) // save the state of tasks we know about after passing them to the task engine err := payloadHandler . saver . Save ( ) if err != nil { seelog . Errorf ( " " , err , aws . StringValue ( payload . MessageId ) ) // Don't ack; maybe we can save it in the future. return fmt . Errorf ( " " , aws . StringValue ( payload . MessageId ) ) } if ! allTasksHandled { return fmt . Errorf ( " " ) } go func ( ) { // Throw the ack in async; it doesn't really matter all that much and this is blocking handling more tasks. for _ , credentialsAck := range credentialsAcks { payloadHandler . refreshHandler . ackMessage ( credentialsAck ) } payloadHandler . ackRequest <- * payload . MessageId } ( ) return nil }
// handleSingleMessage processes a single payload message. It adds tasks in the message to the task engine
// An error is returned if the message was not handled correctly. The error is being used only for testing
// today. In the future, it could be used for doing more interesting things.
handleSingleMessage processes a single payload message . It adds tasks in the message to the task engine An error is returned if the message was not handled correctly . The error is being used only for testing today . In the future it could be used for doing more interesting things .