Skip to content

Commit d6c102e

Browse files
zoewanggmillems
authored andcommitted
Various performance improvements (#3175)
* Various performance improvements * Address feedback and fix failed unit test * Fix test
1 parent 99a4a72 commit d6c102e

File tree

86 files changed

+1629
-766
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+1629
-766
lines changed

codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/DefaultsModeGenerationMojo.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import software.amazon.awssdk.codegen.lite.defaultsmode.DefaultsLoader;
2828
import software.amazon.awssdk.codegen.lite.defaultsmode.DefaultsModeConfigurationGenerator;
2929
import software.amazon.awssdk.codegen.lite.defaultsmode.DefaultsModeGenerator;
30+
import software.amazon.awssdk.utils.StringUtils;
3031

3132
/**
3233
* The Maven mojo to generate defaults mode related classes.
@@ -61,12 +62,12 @@ public void execute() {
6162
}
6263

6364
public void generateDefaultsModeClass(Path baseSourcesDirectory, DefaultConfiguration configuration) {
64-
Path sourcesDirectory = baseSourcesDirectory.resolve(DEFAULTS_MODE_BASE.replace(".", "/"));
65+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(DEFAULTS_MODE_BASE, ".", "/"));
6566
new CodeGenerator(sourcesDirectory.toString(), new DefaultsModeGenerator(DEFAULTS_MODE_BASE, configuration)).generate();
6667
}
6768

6869
public void generateDefaultsModeConfiguartionClass(Path baseSourcesDirectory, DefaultConfiguration configuration) {
69-
Path sourcesDirectory = baseSourcesDirectory.resolve(DEFAULTS_MODE_CONFIGURATION_BASE.replace(".", "/"));
70+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(DEFAULTS_MODE_CONFIGURATION_BASE, ".", "/"));
7071
new CodeGenerator(sourcesDirectory.toString(), new DefaultsModeConfigurationGenerator(DEFAULTS_MODE_CONFIGURATION_BASE,
7172
DEFAULTS_MODE_BASE,
7273
configuration)).generate();

codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/RegionGenerationMojo.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import software.amazon.awssdk.codegen.lite.regions.ServiceMetadataGenerator;
3737
import software.amazon.awssdk.codegen.lite.regions.ServiceMetadataProviderGenerator;
3838
import software.amazon.awssdk.codegen.lite.regions.model.Partitions;
39+
import software.amazon.awssdk.utils.StringUtils;
3940

4041
/**
4142
* The Maven mojo to generate Java client code using software.amazon.awssdk:codegen module.
@@ -79,7 +80,7 @@ public void execute() throws MojoExecutionException {
7980
}
8081

8182
public void generatePartitionMetadataClass(Path baseSourcesDirectory, Partitions partitions) {
82-
Path sourcesDirectory = baseSourcesDirectory.resolve(PARTITION_METADATA_BASE.replace(".", "/"));
83+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(PARTITION_METADATA_BASE, ".", "/"));
8384
partitions.getPartitions()
8485
.forEach(p -> new CodeGenerator(sourcesDirectory.toString(),
8586
new PartitionMetadataGenerator(p,
@@ -88,12 +89,12 @@ public void generatePartitionMetadataClass(Path baseSourcesDirectory, Partitions
8889
}
8990

9091
public void generateRegionClass(Path baseSourcesDirectory, Partitions partitions) {
91-
Path sourcesDirectory = baseSourcesDirectory.resolve(REGION_BASE.replace(".", "/"));
92+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(REGION_BASE, ".", "/"));
9293
new CodeGenerator(sourcesDirectory.toString(), new RegionGenerator(partitions, REGION_BASE)).generate();
9394
}
9495

9596
public void generateServiceMetadata(Path baseSourcesDirectory, Partitions partitions) {
96-
Path sourcesDirectory = baseSourcesDirectory.resolve(SERVICE_METADATA_BASE.replace(".", "/"));
97+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(SERVICE_METADATA_BASE, ".", "/"));
9798
Set<String> services = new HashSet<>();
9899
partitions.getPartitions().forEach(p -> services.addAll(p.getServices().keySet()));
99100

@@ -105,7 +106,7 @@ public void generateServiceMetadata(Path baseSourcesDirectory, Partitions partit
105106
}
106107

107108
public void generateRegions(Path baseSourcesDirectory, Partitions partitions) {
108-
Path sourcesDirectory = baseSourcesDirectory.resolve(REGION_METADATA_BASE.replace(".", "/"));
109+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(REGION_METADATA_BASE, ".", "/"));
109110
partitions.getPartitions()
110111
.forEach(p -> p.getRegions().forEach((k, v) ->
111112
new CodeGenerator(sourcesDirectory.toString(),
@@ -118,31 +119,31 @@ public void generateRegions(Path baseSourcesDirectory, Partitions partitions) {
118119
}
119120

120121
public void generatePartitionProvider(Path baseSourcesDirectory, Partitions partitions) {
121-
Path sourcesDirectory = baseSourcesDirectory.resolve(REGION_BASE.replace(".", "/"));
122+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(REGION_BASE, ".", "/"));
122123
new CodeGenerator(sourcesDirectory.toString(), new PartitionMetadataProviderGenerator(partitions,
123124
PARTITION_METADATA_BASE,
124125
REGION_BASE))
125126
.generate();
126127
}
127128

128129
public void generateRegionProvider(Path baseSourcesDirectory, Partitions partitions) {
129-
Path sourcesDirectory = baseSourcesDirectory.resolve(REGION_BASE.replace(".", "/"));
130+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(REGION_BASE, ".", "/"));
130131
new CodeGenerator(sourcesDirectory.toString(), new RegionMetadataProviderGenerator(partitions,
131132
REGION_METADATA_BASE,
132133
REGION_BASE))
133134
.generate();
134135
}
135136

136137
public void generateServiceProvider(Path baseSourcesDirectory, Partitions partitions) {
137-
Path sourcesDirectory = baseSourcesDirectory.resolve(REGION_BASE.replace(".", "/"));
138+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(REGION_BASE, ".", "/"));
138139
new CodeGenerator(sourcesDirectory.toString(), new ServiceMetadataProviderGenerator(partitions,
139140
SERVICE_METADATA_BASE,
140141
REGION_BASE))
141142
.generate();
142143
}
143144

144145
public void generateEndpointTags(Path baseSourcesDirectory, Partitions partitions) {
145-
Path sourcesDirectory = baseSourcesDirectory.resolve(REGION_BASE.replace(".", "/"));
146+
Path sourcesDirectory = baseSourcesDirectory.resolve(StringUtils.replace(REGION_BASE, ".", "/"));
146147
new CodeGenerator(sourcesDirectory.toString(), new EndpointTagGenerator(partitions, REGION_BASE)).generate();
147148
}
148149
}

core/auth-crt/src/main/java/software/amazon/awssdk/authcrt/signer/internal/CrtHttpRequestConverter.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package software.amazon.awssdk.authcrt.signer.internal;
1717

1818
import static java.lang.Math.min;
19-
import static software.amazon.awssdk.utils.CollectionUtils.isNullOrEmpty;
2019

2120
import java.io.ByteArrayInputStream;
2221
import java.io.IOException;
@@ -26,7 +25,6 @@
2625
import java.nio.ByteBuffer;
2726
import java.util.ArrayList;
2827
import java.util.List;
29-
import java.util.Map;
3028
import java.util.Optional;
3129
import software.amazon.awssdk.annotations.SdkInternalApi;
3230
import software.amazon.awssdk.crt.auth.signing.AwsSigningResult;
@@ -52,9 +50,7 @@ public HttpRequest requestToCrt(SdkHttpFullRequest inputRequest) {
5250
String method = inputRequest.method().name();
5351
String encodedPath = encodedPathToCrtFormat(inputRequest.encodedPath());
5452

55-
String encodedQueryString = SdkHttpUtils.encodeAndFlattenQueryParameters(inputRequest.rawQueryParameters())
56-
.map(value -> "?" + value)
57-
.orElse("");
53+
String encodedQueryString = inputRequest.encodedQueryParameters().map(value -> "?" + value).orElse("");
5854

5955
HttpHeader[] crtHeaderArray = createHttpHeaderArray(inputRequest);
6056

@@ -129,20 +125,20 @@ public HttpRequestBodyStream toCrtStream(byte[] data) {
129125
}
130126

131127
private HttpHeader[] createHttpHeaderArray(SdkHttpFullRequest request) {
132-
List<HttpHeader> crtHeaderList = new ArrayList<>(request.headers().size() + 2);
128+
List<HttpHeader> crtHeaderList = new ArrayList<>(request.numHeaders() + 2);
133129

134130
// Set Host Header if needed
135-
if (isNullOrEmpty(request.headers().get(HOST_HEADER))) {
131+
if (!request.firstMatchingHeader(HOST_HEADER).isPresent()) {
136132
crtHeaderList.add(new HttpHeader(HOST_HEADER, request.host()));
137133
}
138134

139135
// Add the rest of the Headers
140-
for (Map.Entry<String, List<String>> headerList: request.headers().entrySet()) {
141-
for (String val: headerList.getValue()) {
142-
HttpHeader h = new HttpHeader(headerList.getKey(), val);
136+
request.forEachHeader((name, values) -> {
137+
for (String val : values) {
138+
HttpHeader h = new HttpHeader(name, val);
143139
crtHeaderList.add(h);
144140
}
145-
}
141+
});
146142

147143
return crtHeaderList.toArray(new HttpHeader[0]);
148144
}

core/auth-crt/src/main/java/software/amazon/awssdk/authcrt/signer/internal/SigningUtils.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import java.nio.charset.StandardCharsets;
1919
import java.time.Clock;
2020
import java.time.Duration;
21-
import java.util.List;
22-
import java.util.Map;
2321
import java.util.Optional;
2422
import java.util.Set;
2523
import java.util.TreeSet;
@@ -116,11 +114,11 @@ public static SdkHttpFullRequest sanitizeSdkRequestForCrtSigning(SdkHttpFullRequ
116114
builder.clearHeaders();
117115

118116
// Filter headers that will cause signing to fail
119-
for (Map.Entry<String, List<String>> header: request.headers().entrySet()) {
120-
if (!FORBIDDEN_HEADERS.contains(header.getKey())) {
121-
builder.putHeader(header.getKey(), header.getValue());
117+
request.forEachHeader((name, value) -> {
118+
if (!FORBIDDEN_HEADERS.contains(name)) {
119+
builder.putHeader(name, value);
122120
}
123-
}
121+
});
124122

125123
// Add host, which must be signed. We ignore any pre-existing Host header to match the behavior of the SigV4 signer.
126124
String hostHeader = SdkHttpUtils.isUsingStandardPort(request.protocol(), request.port())
@@ -131,12 +129,11 @@ public static SdkHttpFullRequest sanitizeSdkRequestForCrtSigning(SdkHttpFullRequ
131129
builder.clearQueryParameters();
132130

133131
// Filter query parameters that will cause signing to fail
134-
Map<String, List<String>> params = request.rawQueryParameters();
135-
for (Map.Entry<String, List<String>> param: params.entrySet()) {
136-
if (!FORBIDDEN_PARAMS.contains(param.getKey())) {
137-
builder.putRawQueryParameter(param.getKey(), param.getValue());
132+
request.forEachRawQueryParameter((key, value) -> {
133+
if (!FORBIDDEN_PARAMS.contains(key)) {
134+
builder.putRawQueryParameter(key, value);
138135
}
139-
}
136+
});
140137

141138
return builder.build();
142139
}

core/auth/src/main/java/software/amazon/awssdk/auth/signer/AsyncAws4Signer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public CompletableFuture<SdkHttpFullRequest> signWithBody(SdkHttpFullRequest req
6969
Aws4SignerRequestParams requestParams = new Aws4SignerRequestParams(signingParams);
7070

7171
SdkHttpFullRequest.Builder builder = doSign(request, requestParams, signingParams,
72-
new ContentChecksum(digestHex, sdkChecksum));
72+
new ContentChecksum(digestHex, sdkChecksum));
7373

7474
return builder.build();
7575
});

0 commit comments

Comments
 (0)