func DeleteItems()

in workload-management/s3-trigger-ecs-task/s3-file-processor/utils/Dynamodb.go [78:124]


func DeleteItems(items []string) {
	var request []*dynamodb.WriteRequest
	if len(items) > 0 {
		for _, v := range items {
			request = append(request, &dynamodb.WriteRequest{
				DeleteRequest: &dynamodb.DeleteRequest{
					Key: map[string]*dynamodb.AttributeValue{
						hashKey: {
							S: aws.String(v),
						},
					},
				},
			})
		}

		/*
			Implement retry in case of throttledException and if the response contains
			any unprocessed results
		*/
		index := 0
		for index < RetryCounter {
			result, err := svc.BatchWriteItem(
				&dynamodb.BatchWriteItemInput{
					RequestItems: map[string][]*dynamodb.WriteRequest{
						tableName: request,
					}})

			if err != nil {
				if aerr, ok := err.(awserr.Error); ok {
					switch aerr.Code() {
					case dynamodb.ErrCodeProvisionedThroughputExceededException:
						index++
						if result != nil && len(result.UnprocessedItems[tableName]) > 0 {
							request = result.UnprocessedItems[tableName]
						}
					default:
						log.Printf("Error while performing batch delete %s", aerr.Error())
					}
				} else {
					log.Printf("Unknown error encountered %s", err.Error())
				}
			} else {
				break
			}
		}
	}
}