in powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/BatchContext.java [57:101]
public final <T> void processSuccessAndHandleFailed(final List<T> successReturns,
final boolean suppressException,
final boolean deleteNonRetryableMessageFromQueue,
final Class<? extends Exception>... nonRetryableExceptions) {
if (hasFailures()) {
List<Exception> exceptions = new ArrayList<>();
List<SQSMessage> failedMessages = new ArrayList<>();
Map<SQSMessage, Exception> nonRetryableMessageToException = new HashMap<>();
if (nonRetryableExceptions.length == 0) {
exceptions.addAll(messageToException.values());
failedMessages.addAll(messageToException.keySet());
} else {
messageToException.forEach((sqsMessage, exception) -> {
boolean nonRetryableException = isNonRetryableException(exception, nonRetryableExceptions);
if (nonRetryableException) {
nonRetryableMessageToException.put(sqsMessage, exception);
} else {
exceptions.add(exception);
failedMessages.add(sqsMessage);
}
});
}
List<SQSMessage> messagesToBeDeleted = new ArrayList<>(success);
if (!nonRetryableMessageToException.isEmpty() && deleteNonRetryableMessageFromQueue) {
messagesToBeDeleted.addAll(nonRetryableMessageToException.keySet());
} else if (!nonRetryableMessageToException.isEmpty()) {
boolean isMovedToDlq = moveNonRetryableMessagesToDlqIfConfigured(nonRetryableMessageToException);
if (!isMovedToDlq) {
exceptions.addAll(nonRetryableMessageToException.values());
failedMessages.addAll(nonRetryableMessageToException.keySet());
}
}
deleteMessagesFromQueue(messagesToBeDeleted);
processFailedMessages(successReturns, suppressException, exceptions, failedMessages);
}
}