-
Notifications
You must be signed in to change notification settings - Fork 911
Implement Asynchronous EC2 Metadata Client #3523
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
core/imds/src/main/java/software/amazon/awssdk/imds/MetadataResponse.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/Ec2MetadataEndpointProvider.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
...ds/src/test/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClientTest.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
...ds/src/test/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClientTest.java
Outdated
Show resolved
Hide resolved
...ds/src/test/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClientTest.java
Outdated
Show resolved
Hide resolved
...ds/src/test/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClientTest.java
Outdated
Show resolved
Hide resolved
...ds/src/test/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClientTest.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
- Create a common builder Ec2MetadataClientBuilder - Create a common test class BaseEc2MetadataClientTest - Refactor common initialization logic for both sync and async client in BaseEc2MetadataClient class - Use netty async client in unit tests - fix Async error logic
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClientBuilder.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClientBuilder.java
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClientBuilder.java
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClient.java
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClientBuilder.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/internal/DefaultEc2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
core/imds/src/test/java/software/amazon/awssdk/imds/internal/BaseEc2MetadataClientTest.java
Show resolved
Hide resolved
- fix one failing unit test
Kudos, SonarCloud Quality Gate passed! |
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java
Show resolved
Hide resolved
core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java
Outdated
Show resolved
Hide resolved
private DefaultEc2MetadataAsyncClient(Ec2MetadataAsyncBuilder builder) { | ||
super(builder); | ||
this.httpClient = Validate.getOrDefault(builder.httpClient, | ||
() -> new DefaultSdkAsyncHttpClientBuilder().buildWithDefaults(AttributeMap.empty())); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should create a default attribute map for IMDS, something like the following. I think connection timeout and read timeout are both 1 second.
private static final AttributeMap IMDS_HTTP_DEFAULTS =
AttributeMap.builder()
.put(SdkHttpConfigurationOption.CONNECTION_TIMEOUT, Duration.ofSeconds(1))
....
.build();
Lines 39 to 41 in d1a23e2
connection.setConnectTimeout(1000); | |
connection.setReadTimeout(1000); | |
connection.setRequestMethod(method); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 3543
httpClient.close(); | ||
} | ||
if (isRetryExecutorManaged) { | ||
asyncRetryScheduler.shutdown(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems an exception thrown from httpClient#close will prevent asyncRetryScheduler from being closed. Should we try catch here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 3543
@@ -36,6 +36,8 @@ | |||
@SdkInternalApi | |||
public final class Ec2MetadataEndpointProvider { | |||
|
|||
public static final Ec2MetadataEndpointProvider DEFAULT_ENDPOINT_PROVIDER = builder().build(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we make this private and create a static method to return this singleton?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 3543
…3b6158226 Pull request: release <- staging/9c9d802f-6722-42b6-ae9d-8cc3b6158226
Implementation of the Asynchronous Ec2 Metadata Client.
Motivation and Context
This is part of the required features before release of the EC2Metadata Service Client
Modifications
Add interface
Ec2MetadataAsyncClient
and one default implementation.Slight refactoring of the sync client to keep both client aligned.
Testing
Unit tests added for the implementation.
Types of changes
Checklist
mvn install
succeedsscripts/new-change
script and following the instructions. Commit the new file created by the script in.changes/next-release
with your changes.License