Skip to content

Commit 06a4959

Browse files
committedMar 6, 2025
Updated EndpointDiscoveryHandler to use correct sync/async versions for getting credentials.
1 parent 2a295f6 commit 06a4959

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed
 

‎sdk/src/Core/Amazon.Runtime/Pipeline/Handlers/EndpointDiscoveryHandler.cs

+19-16
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ public override void InvokeSync(IExecutionContext executionContext)
3838
{
3939
var requestContext = executionContext.RequestContext;
4040
var regionalEndpoint = requestContext.Request.Endpoint;
41-
PreInvoke(executionContext);
41+
var immutableCredentials = (requestContext.Identity as AWSCredentials)?.GetCredentials();
42+
43+
PreInvoke(executionContext, immutableCredentials);
4244

4345
try
4446
{
@@ -49,7 +51,7 @@ public override void InvokeSync(IExecutionContext executionContext)
4951
{
5052
if (IsInvalidEndpointException(exception))
5153
{
52-
EvictCacheKeyForRequest(requestContext, regionalEndpoint);
54+
EvictCacheKeyForRequest(requestContext, regionalEndpoint, immutableCredentials);
5355
}
5456

5557
throw;
@@ -69,7 +71,9 @@ public override async System.Threading.Tasks.Task<T> InvokeAsync<T>(IExecutionCo
6971
{
7072
var requestContext = executionContext.RequestContext;
7173
var regionalEndpoint = requestContext.Request.Endpoint;
72-
PreInvoke(executionContext);
74+
var immutableCredentials = await ((requestContext.Identity as AWSCredentials)?.GetCredentialsAsync()).ConfigureAwait(false);
75+
76+
PreInvoke(executionContext, immutableCredentials);
7377

7478
try
7579
{
@@ -80,7 +84,7 @@ public override async System.Threading.Tasks.Task<T> InvokeAsync<T>(IExecutionCo
8084
var capturedException = System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(exception);
8185
if (IsInvalidEndpointException(capturedException.SourceException))
8286
{
83-
EvictCacheKeyForRequest(requestContext, regionalEndpoint);
87+
EvictCacheKeyForRequest(requestContext, regionalEndpoint, immutableCredentials);
8488
}
8589

8690
capturedException.Throw();
@@ -94,22 +98,22 @@ public override async System.Threading.Tasks.Task<T> InvokeAsync<T>(IExecutionCo
9498
/// Resolves the endpoint to be used for the current request
9599
/// before invoking the next handler.
96100
/// </summary>
97-
/// <param name="executionContext">The execution context, it contains the
98-
/// request and response context.</param>
99-
protected static void PreInvoke(IExecutionContext executionContext)
101+
/// <param name="executionContext">The execution context, it contains the request and response context.</param>
102+
/// <param name="credentials">The AWS credentials for the account making the service call.</param>
103+
protected static void PreInvoke(IExecutionContext executionContext, ImmutableCredentials credentials)
100104
{
101-
DiscoverEndpoints(executionContext.RequestContext, false);
105+
DiscoverEndpoints(executionContext.RequestContext, false, credentials);
102106
}
103107

104-
public static void EvictCacheKeyForRequest(IRequestContext requestContext, Uri regionalEndpoint)
108+
public static void EvictCacheKeyForRequest(IRequestContext requestContext, Uri regionalEndpoint, ImmutableCredentials credentials)
105109
{
106-
DiscoverEndpoints(requestContext, true);
110+
DiscoverEndpoints(requestContext, true, credentials);
107111
requestContext.Request.Endpoint = regionalEndpoint;
108112
}
109113

110-
public static void DiscoverEndpoints(IRequestContext requestContext, bool evictCacheKey)
114+
public static void DiscoverEndpoints(IRequestContext requestContext, bool evictCacheKey, ImmutableCredentials credentials)
111115
{
112-
var discoveryEndpoints = ProcessEndpointDiscovery(requestContext, evictCacheKey, requestContext.Request.Endpoint);
116+
var discoveryEndpoints = ProcessEndpointDiscovery(requestContext, evictCacheKey, requestContext.Request.Endpoint, credentials);
113117
if (discoveryEndpoints != null)
114118
{
115119
foreach (var endpoint in discoveryEndpoints)
@@ -130,12 +134,11 @@ public static void DiscoverEndpoints(IRequestContext requestContext, bool evictC
130134
}
131135
}
132136

133-
private static IEnumerable<DiscoveryEndpointBase> ProcessEndpointDiscovery(IRequestContext requestContext, bool evictCacheKey, Uri evictUri)
137+
private static IEnumerable<DiscoveryEndpointBase> ProcessEndpointDiscovery(IRequestContext requestContext, bool evictCacheKey, Uri evictUri, ImmutableCredentials credentials)
134138
{
135139
var options = requestContext.Options;
136-
var immutableCredentials = (requestContext.Identity as AWSCredentials)?.GetCredentials();
137140

138-
if (options.EndpointDiscoveryMarshaller != null && options.EndpointOperation != null && immutableCredentials != null)
141+
if (options.EndpointDiscoveryMarshaller != null && options.EndpointOperation != null && credentials != null)
139142
{
140143
//Endpoint discovery is supported by this operation and we have an endpoint operation available to use
141144
var endpointDiscoveryData = options.EndpointDiscoveryMarshaller.Marshall(requestContext.OriginalRequest);
@@ -144,7 +147,7 @@ private static IEnumerable<DiscoveryEndpointBase> ProcessEndpointDiscovery(IRequ
144147
{
145148
operationName = AWSSDKUtils.ExtractOperationName(requestContext.RequestName);
146149
}
147-
return options.EndpointOperation(new EndpointOperationContext(immutableCredentials.AccessKey, operationName, endpointDiscoveryData, evictCacheKey, evictUri));
150+
return options.EndpointOperation(new EndpointOperationContext(credentials.AccessKey, operationName, endpointDiscoveryData, evictCacheKey, evictUri));
148151
}
149152

150153
return null;

0 commit comments

Comments
 (0)
Failed to load comments.