Skip to content

Commit 1a265d4

Browse files
committed
Performance optimization: return client config directly if there's no plugin configured to avoid client config toBuilder call
1 parent 15242ce commit 1a265d4

File tree

37 files changed

+82
-75
lines changed

37 files changed

+82
-75
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "Improve performance for SDK service clients that don't use custom client plugins by optimizing plugin resolution logic"
6+
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/ClientClassUtils.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,13 @@ static MethodSpec updateSdkClientConfigurationMethod(
190190

191191
builder.addStatement("$T plugins = request.overrideConfiguration()\n"
192192
+ ".map(c -> c.plugins()).orElse(Collections.emptyList())",
193-
ParameterizedTypeName.get(List.class, SdkPlugin.class))
194-
.addStatement("$T configuration = clientConfiguration.toBuilder()", SdkClientConfiguration.Builder.class);
193+
ParameterizedTypeName.get(List.class, SdkPlugin.class));
195194

196195
builder.beginControlFlow("if (plugins.isEmpty())")
197-
.addStatement("return configuration.build()")
198-
.endControlFlow()
196+
.addStatement("return clientConfiguration")
197+
.endControlFlow();
198+
199+
builder.addStatement("$T configuration = clientConfiguration.toBuilder()", SdkClientConfiguration.Builder.class)
199200
.addStatement("$1T serviceConfigBuilder = new $1T(configuration)", serviceClientConfigurationBuilderClassName)
200201
.beginControlFlow("for ($T plugin : plugins)", SdkPlugin.class)
201202
.addStatement("plugin.configureClient(serviceConfigBuilder)")

codegen/src/test/java/software/amazon/awssdk/codegen/poet/ClientTestModels.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ public static IntermediateModel opsWithSigv4a() {
427427
return new IntermediateModelBuilder(models).build();
428428
}
429429

430-
public static IntermediateModel pluginModels() {
430+
public static IntermediateModel serviceWithCustomContextParamsModels() {
431431
File serviceModel =
432432
new File(ClientTestModels.class.getResource("client/c2j/service-with-custom-context-params/service-2.json").getFile());
433433
File customizationModel =

codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClassTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import static software.amazon.awssdk.codegen.poet.ClientTestModels.customPackageModels;
2525
import static software.amazon.awssdk.codegen.poet.ClientTestModels.endpointDiscoveryModels;
2626
import static software.amazon.awssdk.codegen.poet.ClientTestModels.opsWithSigv4a;
27-
import static software.amazon.awssdk.codegen.poet.ClientTestModels.pluginModels;
27+
import static software.amazon.awssdk.codegen.poet.ClientTestModels.serviceWithCustomContextParamsModels;
2828
import static software.amazon.awssdk.codegen.poet.ClientTestModels.queryServiceModels;
2929
import static software.amazon.awssdk.codegen.poet.ClientTestModels.restJsonServiceModels;
3030
import static software.amazon.awssdk.codegen.poet.ClientTestModels.rpcv2ServiceModels;
@@ -125,8 +125,8 @@ public void asyncClientWithStreamingUnsignedPayload() {
125125
}
126126

127127
@Test
128-
public void asyncClientWithPlugin() {
129-
AsyncClientClass asyncClientClass = createAsyncClientClass(pluginModels());
128+
public void asyncClientWithCustomContextParams() {
129+
AsyncClientClass asyncClientClass = createAsyncClientClass(serviceWithCustomContextParamsModels());
130130
assertThat(asyncClientClass, generatesTo("test-custom-context-params-async-client-class.java"));
131131
}
132132

codegen/src/test/java/software/amazon/awssdk/codegen/poet/client/SyncClientClassTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import static software.amazon.awssdk.codegen.poet.ClientTestModels.customPackageModels;
2323
import static software.amazon.awssdk.codegen.poet.ClientTestModels.endpointDiscoveryModels;
2424
import static software.amazon.awssdk.codegen.poet.ClientTestModels.opsWithSigv4a;
25-
import static software.amazon.awssdk.codegen.poet.ClientTestModels.pluginModels;
25+
import static software.amazon.awssdk.codegen.poet.ClientTestModels.serviceWithCustomContextParamsModels;
2626
import static software.amazon.awssdk.codegen.poet.ClientTestModels.queryServiceModels;
2727
import static software.amazon.awssdk.codegen.poet.ClientTestModels.restJsonServiceModels;
2828
import static software.amazon.awssdk.codegen.poet.ClientTestModels.rpcv2ServiceModels;
@@ -99,8 +99,8 @@ public void syncClientClassCbor() {
9999
}
100100

101101
@Test
102-
public void asyncClientWithCustomContextParams() {
103-
ClassSpec syncClientClass = createSyncClientClass(pluginModels());
102+
public void syncClientWithCustomContextParams() {
103+
ClassSpec syncClientClass = createSyncClientClass(serviceWithCustomContextParamsModels());
104104
assertThat(syncClientClass, generatesTo("test-custom-context-params-sync-client-class.java"));
105105
}
106106

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-aws-json-async-client-class.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,10 +1411,10 @@ private void updateRetryStrategyClientConfiguration(SdkClientConfiguration.Build
14111411

14121412
private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, SdkClientConfiguration clientConfiguration) {
14131413
List<SdkPlugin> plugins = request.overrideConfiguration().map(c -> c.plugins()).orElse(Collections.emptyList());
1414-
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
14151414
if (plugins.isEmpty()) {
1416-
return configuration.build();
1415+
return clientConfiguration;
14171416
}
1417+
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
14181418
JsonServiceClientConfigurationBuilder serviceConfigBuilder = new JsonServiceClientConfigurationBuilder(configuration);
14191419
for (SdkPlugin plugin : plugins) {
14201420
plugin.configureClient(serviceConfigBuilder);

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-cbor-async-client-class.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,10 +1416,10 @@ private void updateRetryStrategyClientConfiguration(SdkClientConfiguration.Build
14161416

14171417
private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, SdkClientConfiguration clientConfiguration) {
14181418
List<SdkPlugin> plugins = request.overrideConfiguration().map(c -> c.plugins()).orElse(Collections.emptyList());
1419-
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
14201419
if (plugins.isEmpty()) {
1421-
return configuration.build();
1420+
return clientConfiguration;
14221421
}
1422+
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
14231423
JsonServiceClientConfigurationBuilder serviceConfigBuilder = new JsonServiceClientConfigurationBuilder(configuration);
14241424
for (SdkPlugin plugin : plugins) {
14251425
plugin.configureClient(serviceConfigBuilder);

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-async-client-class.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1607,10 +1607,10 @@ private void updateRetryStrategyClientConfiguration(SdkClientConfiguration.Build
16071607

16081608
private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, SdkClientConfiguration clientConfiguration) {
16091609
List<SdkPlugin> plugins = request.overrideConfiguration().map(c -> c.plugins()).orElse(Collections.emptyList());
1610-
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
16111610
if (plugins.isEmpty()) {
1612-
return configuration.build();
1611+
return clientConfiguration;
16131612
}
1613+
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
16141614
JsonServiceClientConfigurationBuilder serviceConfigBuilder = new JsonServiceClientConfigurationBuilder(configuration);
16151615
for (SdkPlugin plugin : plugins) {
16161616
plugin.configureClient(serviceConfigBuilder);

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-json-client-class.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,10 +1091,10 @@ private void updateRetryStrategyClientConfiguration(SdkClientConfiguration.Build
10911091

10921092
private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, SdkClientConfiguration clientConfiguration) {
10931093
List<SdkPlugin> plugins = request.overrideConfiguration().map(c -> c.plugins()).orElse(Collections.emptyList());
1094-
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
10951094
if (plugins.isEmpty()) {
1096-
return configuration.build();
1095+
return clientConfiguration;
10971096
}
1097+
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
10981098
JsonServiceClientConfigurationBuilder serviceConfigBuilder = new JsonServiceClientConfigurationBuilder(configuration);
10991099
for (SdkPlugin plugin : plugins) {
11001100
plugin.configureClient(serviceConfigBuilder);

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/sra/test-query-async-client-class.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1205,10 +1205,10 @@ private void updateRetryStrategyClientConfiguration(SdkClientConfiguration.Build
12051205

12061206
private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, SdkClientConfiguration clientConfiguration) {
12071207
List<SdkPlugin> plugins = request.overrideConfiguration().map(c -> c.plugins()).orElse(Collections.emptyList());
1208-
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
12091208
if (plugins.isEmpty()) {
1210-
return configuration.build();
1209+
return clientConfiguration;
12111210
}
1211+
SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder();
12121212
QueryServiceClientConfigurationBuilder serviceConfigBuilder = new QueryServiceClientConfigurationBuilder(configuration);
12131213
for (SdkPlugin plugin : plugins) {
12141214
plugin.configureClient(serviceConfigBuilder);

0 commit comments

Comments
 (0)