From 09ef3ebf02902964a7a3043192200e6493472319 Mon Sep 17 00:00:00 2001 From: Zoe Wang <33073555+zoewangg@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:37:08 -0800 Subject: [PATCH] Fix intermittent ConcurrentModificationException thrown from codegen --- .../software/amazon/awssdk/codegen/CodeGenerator.java | 4 +++- .../codegen/poet/client/traits/HttpChecksumTrait.java | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/CodeGenerator.java b/codegen/src/main/java/software/amazon/awssdk/codegen/CodeGenerator.java index ec8d4d3dc077..95cdeb0d2082 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/CodeGenerator.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/CodeGenerator.java @@ -26,9 +26,10 @@ import software.amazon.awssdk.codegen.internal.Jackson; import software.amazon.awssdk.codegen.internal.Utils; import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.utils.Logger; public class CodeGenerator { - + private static final Logger log = Logger.loggerFor(CodeGenerator.class); private static final String MODEL_DIR_NAME = "models"; private final C2jModels models; @@ -85,6 +86,7 @@ public void execute() { emitCode(intermediateModel); } catch (Exception e) { + log.error(() -> "Failed to generate code. ", e); throw new RuntimeException( "Failed to generate code. Exception message : " + e.getMessage(), e); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/traits/HttpChecksumTrait.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/traits/HttpChecksumTrait.java index 4e6768e45301..f916bbc2bae5 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/traits/HttpChecksumTrait.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/traits/HttpChecksumTrait.java @@ -22,6 +22,7 @@ import java.util.Locale; import java.util.Map; import java.util.function.Predicate; +import java.util.stream.Collectors; import software.amazon.awssdk.checksums.DefaultChecksumAlgorithm; import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; import software.amazon.awssdk.codegen.model.intermediate.MemberModel; @@ -141,11 +142,12 @@ private static void configureRequestChecksumCalculation(OperationModel operation * with the fastest-to-calculate algorithms first. */ private static void addResponseAlgorithmsCodeBlock(List responseAlgorithms, CodeBlock.Builder codeBuilder) { - responseAlgorithms.sort(Comparator.comparingInt(o -> CHECKSUM_ALGORITHM_PRIORITY.getOrDefault( - o.toUpperCase(Locale.US), Integer.MAX_VALUE))); + List sortedResponseAlgorithms = + responseAlgorithms.stream().sorted(Comparator.comparingInt(o -> CHECKSUM_ALGORITHM_PRIORITY.getOrDefault( + o.toUpperCase(Locale.US), Integer.MAX_VALUE))).collect(Collectors.toList()); codeBuilder.add(CodeBlock.of(".responseAlgorithmsV2(")); - List responseAlgorithmsCodeBlocks = responseAlgorithmsCodeBlocks(responseAlgorithms); + List responseAlgorithmsCodeBlocks = responseAlgorithmsCodeBlocks(sortedResponseAlgorithms); for (int i = 0; i < responseAlgorithmsCodeBlocks.size(); i++) { CodeBlock code = responseAlgorithmsCodeBlocks.get(i); codeBuilder.add(code);