Skip to content

Commit 79eefee

Browse files
apache-hbsbiscigl
authored andcommitted
Fix crashes in lambda integration test and fix presigned urls
1 parent acc398f commit 79eefee

3 files changed

Lines changed: 43 additions & 14 deletions

File tree

tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/common/ServiceInvokeOperationHeader.vm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11

2-
typedef Aws::Utils::Outcome<Aws::AmazonWebServiceResult<RESPONSE>, ${metadata.classNamePrefix}Error> InvokeOutcome;
2+
## Be careful to not have this outcome name clash with an operation outcome name (specifically lambda:Invoke)
3+
typedef Aws::Utils::Outcome<Aws::AmazonWebServiceResult<RESPONSE>, ${metadata.classNamePrefix}Error> InvokeOperationOutcome;
34

4-
InvokeOutcome InvokeServiceOperation(
5+
InvokeOperationOutcome InvokeServiceOperation(
56
const AmazonWebServiceRequest& request,
67
#if($metadata.protocol == "rest-json" || $metadata.protocol == "rest-xml")
78
const std::function<void(Aws::Endpoint::ResolveEndpointOutcome&)>& resolveUri,

tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/common/ServiceInvokeOperationMethod.vm

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,42 @@
1-
#if($metadata.protocol == "ec2" || $metadata.protocol == "json" || $metadata.protocol == "query" || $metadata.protocol == "smithy-rpc-v2-cbor")
2-
#set($emitGenericOperation = true)
3-
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/common/ServiceClientOperationRequestRequiredMemberValidate.vm")
1+
#set($emitGenericOperation = true)
2+
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/common/ServiceClientOperationRequestRequiredMemberValidate.vm")
3+
#set($emitGenericOperation = false)
4+
5+
#if($serviceModel.metadata.serviceId == "EC2")
6+
#set($presignSpelling = "PresignedUrl")
7+
#set($shouldGenerateUrl = "request.SourceRegionHasBeenSet()")
8+
#else
9+
#set($presignSpelling = "PreSignedUrl")
10+
#set($shouldGenerateUrl = "request.SourceRegionHasBeenSet() && !request.${presignSpelling}HasBeenSet()")
11+
#end
12+
13+
##
14+
## Handle presigned URL generation if the operation requires it
15+
##
16+
17+
#if($operation.hasPreSignedUrl)
18+
if (${shouldGenerateUrl}) {
19+
${operation.request.shape.name} newRequest = request;
20+
Aws::Endpoint::EndpointParameters endpointParameters;
21+
#if($operation.staticContextParams)
22+
#foreach($staticParamPair in $operation.staticContextParams.entrySet())
23+
parameters.emplace_back(Aws::String("${staticParamPair.key}"), ${staticParamPair.value.get("value").getValue()});
24+
#end
25+
#end
26+
endpointParameters.emplace_back(Aws::Endpoint::EndpointParameter("Region", request.GetSourceRegion()));
27+
ResolveEndpointOutcome presignedEndpointResolutionOutcome = m_endpointProvider->ResolveEndpoint(endpointParameters);
28+
AWS_OPERATION_CHECK_SUCCESS(presignedEndpointResolutionOutcome, ${operation.name}, CoreErrors, CoreErrors::ENDPOINT_RESOLUTION_FAILURE, presignedEndpointResolutionOutcome.GetError().GetMessage());
29+
newRequest.Set${presignSpelling}(GeneratePresignedUrl(request, presignedEndpointResolutionOutcome.GetResult().GetURI(),
30+
Aws::Http::HttpMethod::HTTP_GET, request.GetSourceRegion().c_str(),
31+
{{ "DestinationRegion", m_region }}, 3600));
32+
33+
return ${operation.name}Outcome{InvokeServiceOperation(newRequest, Aws::Http::HttpMethod::HTTP_${operation.http.method})};
34+
}
35+
#end
436

37+
#if($metadata.protocol == "ec2" || $metadata.protocol == "json" || $metadata.protocol == "query" || $metadata.protocol == "smithy-rpc-v2-cbor")
538
return ${operation.name}Outcome{InvokeServiceOperation(request, Aws::Http::HttpMethod::HTTP_${operation.http.method})};
639
#elseif($metadata.protocol == "rest-json" || $metadata.protocol == "rest-xml")
7-
#set($emitGenericOperation = true)
8-
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/common/ServiceClientOperationRequestRequiredMemberValidate.vm")
9-
1040
auto uriResolver = [&](Aws::Endpoint::ResolveEndpointOutcome& endpointResolutionOutcome) {
1141
(void)endpointResolutionOutcome;
1242
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/common/UriRequestPathSegments.vm")
@@ -22,5 +52,3 @@
2252
return ${operation.name}Outcome{InvokeServiceOperation(request, uriResolver, Aws::Http::HttpMethod::HTTP_${operation.http.method})};
2353
#end
2454
#end
25-
26-
#set($emitGenericOperation = false)

tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/common/ServiceInvokeOperationSource.vm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
${className}::InvokeOutcome ${className}::InvokeServiceOperation(
1+
${className}::InvokeOperationOutcome ${className}::InvokeServiceOperation(
22
const AmazonWebServiceRequest& request,
33
#if($metadata.protocol == "rest-json" || $metadata.protocol == "rest-xml")
44
const std::function<void(Aws::Endpoint::ResolveEndpointOutcome&)>& resolveUri,
@@ -38,8 +38,8 @@ ${className}::InvokeOutcome ${className}::InvokeServiceOperation(
3838
}
3939
#end
4040

41-
return TracingUtils::MakeCallWithTiming<InvokeOutcome>(
42-
[&]() -> InvokeOutcome {
41+
return TracingUtils::MakeCallWithTiming<InvokeOperationOutcome>(
42+
[&]() -> InvokeOperationOutcome {
4343
auto endpointResolutionOutcome = TracingUtils::MakeCallWithTiming<ResolveEndpointOutcome>(
4444
[&]() -> ResolveEndpointOutcome { return m_endpointProvider->ResolveEndpoint(request.GetEndpointContextParams()); },
4545
TracingUtils::SMITHY_CLIENT_ENDPOINT_RESOLUTION_METRIC, *meter,
@@ -58,7 +58,7 @@ ${className}::InvokeOutcome ${className}::InvokeServiceOperation(
5858
resolveUri(endpointResolutionOutcome);
5959
#end
6060

61-
return MakeRequest(request, endpointResolutionOutcome.GetResult(), httpMethod, Aws::Auth::SIGV4_SIGNER);
61+
return InvokeOperationOutcome{MakeRequest(request, endpointResolutionOutcome.GetResult(), httpMethod, Aws::Auth::SIGV4_SIGNER)};
6262
},
6363
TracingUtils::SMITHY_CLIENT_DURATION_METRIC, *meter,
6464
{{TracingUtils::SMITHY_METHOD_DIMENSION, operationName},

0 commit comments

Comments
 (0)