Skip to content

Commit 9e61807

Browse files
authored
fix: eliminate latency of instantiation of client on iOS with explicit region (#508)
1 parent 18d51fa commit 9e61807

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

AWSClientRuntime/Sources/AWSClientConfiguration.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public protocol AWSRuntimeConfiguration {
1010
var region: String? { get set }
1111
var signingRegion: String? {get set}
1212
var endpointResolver: EndpointResolver {get set}
13-
var regionResolver: RegionResolver {get set}
13+
var regionResolver: RegionResolver? {get set}
1414
var frameworkMetadata: FrameworkMetadata? {get set}
1515
}
1616

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/AWSServiceConfig.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,19 @@ class AWSServiceConfig(writer: SwiftWriter, serviceName: String) : ServiceConfig
3232
writer.write("runtimeConfig: \$N", ClientRuntimeTypes.Core.SDKRuntimeConfiguration)
3333
}
3434
writer.indent()
35-
writer.write("self.regionResolver = regionResolver ?? DefaultRegionResolver()")
36-
writer.write("let defaultRegion = self.regionResolver.resolveRegion()")
37-
writer.write("self.region = region ?? defaultRegion")
38-
writer.write("self.signingRegion = signingRegion ?? defaultRegion")
35+
writer.openBlock("if let region = region {", "} else {") {
36+
writer.write("self.region = region")
37+
writer.write("self.regionResolver = nil")
38+
writer.write("self.signingRegion = signingRegion ?? region")
39+
}
40+
writer.indent()
41+
writer.write("let resolvedRegionResolver = regionResolver ?? DefaultRegionResolver()")
42+
writer.write("let region = resolvedRegionResolver.resolveRegion()")
43+
writer.write("self.region = region")
44+
writer.write("self.regionResolver = resolvedRegionResolver")
45+
writer.write("self.signingRegion = signingRegion ?? region")
46+
writer.dedent()
47+
writer.write("}")
3948
writer.write("self.endpointResolver = endpointResolver ?? DefaultEndpointResolver()")
4049
writer.openBlock("if let credProvider = credentialsProvider {", "} else {") {
4150
writer.write("self.credentialsProvider = try \$N.fromCustom(credProvider)", AWSClientRuntimeTypes.Core.AWSCredentialsProvider)
@@ -90,7 +99,7 @@ class AWSServiceConfig(writer: SwiftWriter, serviceName: String) : ServiceConfig
9099
"\$T",
91100
"The region to send requests to. (Required)"
92101
),
93-
ConfigField(REGION_RESOLVER, AWSClientRuntimeTypes.Core.RegionResolver, documentation = "The region resolver uses an array of region providers to resolve the region."),
102+
ConfigField(REGION_RESOLVER, AWSClientRuntimeTypes.Core.RegionResolver, "\$T", documentation = "The region resolver uses an array of region providers to resolve the region."),
94103
ConfigField(SIGNING_REGION_CONFIG_NAME, SwiftTypes.String, "\$T", "The region to sign requests in. (Required)")
95104
).sortedBy { it.memberName }
96105
}

codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/RestJsonProtocolGeneratorTests.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class RestJsonProtocolGeneratorTests {
121121
public var endpointResolver: AWSClientRuntime.EndpointResolver
122122
public var frameworkMetadata: AWSClientRuntime.FrameworkMetadata?
123123
public var region: Swift.String?
124-
public var regionResolver: AWSClientRuntime.RegionResolver
124+
public var regionResolver: AWSClientRuntime.RegionResolver?
125125
public var signingRegion: Swift.String?
126126
127127
public init(
@@ -133,10 +133,17 @@ class RestJsonProtocolGeneratorTests {
133133
signingRegion: Swift.String? = nil,
134134
runtimeConfig: ClientRuntime.SDKRuntimeConfiguration
135135
) throws {
136-
self.regionResolver = regionResolver ?? DefaultRegionResolver()
137-
let defaultRegion = self.regionResolver.resolveRegion()
138-
self.region = region ?? defaultRegion
139-
self.signingRegion = signingRegion ?? defaultRegion
136+
if let region = region {
137+
self.region = region
138+
self.regionResolver = nil
139+
self.signingRegion = signingRegion ?? region
140+
} else {
141+
let resolvedRegionResolver = regionResolver ?? DefaultRegionResolver()
142+
let region = resolvedRegionResolver.resolveRegion()
143+
self.region = region
144+
self.regionResolver = resolvedRegionResolver
145+
self.signingRegion = signingRegion ?? region
146+
}
140147
self.endpointResolver = endpointResolver ?? DefaultEndpointResolver()
141148
if let credProvider = credentialsProvider {
142149
self.credentialsProvider = try AWSClientRuntime.AWSCredentialsProvider.fromCustom(credProvider)

0 commit comments

Comments
 (0)