Skip to content

Various renaming and provide default values for waiterOverrideConfiguration #2063

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

Merged
merged 1 commit into from
Sep 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import java.util.concurrent.ScheduledExecutorService;
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
import software.amazon.awssdk.codegen.model.service.WaiterDefinition;
import software.amazon.awssdk.core.waiters.PollingStrategy;
import software.amazon.awssdk.core.waiters.WaiterOverrideConfiguration;

public final class WaiterDocs {

Expand Down Expand Up @@ -98,28 +98,28 @@ public static CodeBlock waiterCreateMethodJavadoc(ClassName className) {

public static CodeBlock waiterBuilderPollingStrategy() {
String javadocs = new DocumentationBuilder()
.description("Defines a {@link $T} to use when polling a resource")
.param("pollingStrategy", "the polling strategy to set")
.description("Defines overrides to the default SDK waiter configuration that should be used for waiters created "
+ "from this builder")
.param("overrideConfiguration", "the override configuration to set")
.returns("a reference to this object so that method calls can be chained together.")
.build();

return CodeBlock.builder()
.add(javadocs, ClassName.get(PollingStrategy.class))
.add(javadocs)
.build();
}

public static CodeBlock waiterBuilderPollingStrategyConsumerBuilder() {
String javadocs = new DocumentationBuilder()
.description("This is a convenient method to pass the configuration of the {@link $T} without the need to "
.description("This is a convenient method to pass the override configuration without the need to "
+ "create an instance manually via {@link $T.builder()}")
.param("pollingStrategy", "the polling strategy to set")
.see("#pollingStrategy(PollingStrategy)")
.param("overrideConfiguration", "The consumer that will configure the overrideConfiguration")
.see("#overrideConfiguration(WaiterOverrideConfiguration)")
.returns("a reference to this object so that method calls can be chained together.")
.build();

return CodeBlock.builder()
.add(javadocs, ClassName.get(PollingStrategy.class),
ClassName.get(PollingStrategy.class))
.add(javadocs, ClassName.get(WaiterOverrideConfiguration.class))
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ private MethodSpec waiterImplMethod() {
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addStatement("return $T.builder().client(this)"
+ ".executorService(executorService).build()",
+ ".scheduledExecutorService(executorService).build()",
poetExtensions.getAsyncWaiterInterface())
.returns(poetExtensions.getAsyncWaiterInterface())
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ protected void additionalTypeSpecModification(TypeSpec.Builder type) {
@Override
protected void additionalBuilderTypeSpecModification(TypeSpec.Builder type) {
type.addField(ClassName.get(ScheduledExecutorService.class), "executorService", PRIVATE);
type.addMethod(MethodSpec.methodBuilder("executorService")
type.addMethod(MethodSpec.methodBuilder("scheduledExecutorService")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addParameter(ClassName.get(ScheduledExecutorService.class), "executorService")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ protected ParameterizedTypeName getWaiterResponseType(OperationModel opModel) {

@Override
protected void additionalBuilderTypeSpecModification(TypeSpec.Builder type) {
type.addMethod(MethodSpec.methodBuilder("executorService")
type.addMethod(MethodSpec.methodBuilder("scheduledExecutorService")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(ClassName.get(ScheduledExecutorService.class), "executorService")
.addJavadoc(WaiterDocs.waiterBuilderScheduledExecutorServiceJavadoc())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@
import software.amazon.awssdk.core.ApiName;
import software.amazon.awssdk.core.internal.waiters.WaiterAttribute;
import software.amazon.awssdk.core.retry.backoff.FixedDelayBackoffStrategy;
import software.amazon.awssdk.core.waiters.PollingStrategy;
import software.amazon.awssdk.core.waiters.WaiterAcceptor;
import software.amazon.awssdk.core.waiters.WaiterOverrideConfiguration;
import software.amazon.awssdk.core.waiters.WaiterState;
import software.amazon.awssdk.utils.AttributeMap;
import software.amazon.awssdk.utils.SdkAutoCloseable;
Expand Down Expand Up @@ -177,27 +177,27 @@ private CodeBlock waiterFieldInitialization(Map.Entry<String, WaiterDefinition>
String waiterKey = waiterDefinition.getKey();
String waiterName = lowercaseFirstChar(waiterKey);
WaiterDefinition waiter = waiterDefinition.getValue();
String pollingStrategyVarName = waiterName + "Strategy";
String overrideConfigurationVarName = waiterName + "Strategy";
OperationModel opModel = operationModel(waiter);
CodeBlock.Builder codeBlockBuilder = CodeBlock
.builder()
.addStatement("$T $N = builder.pollingStrategy == null ? $T.builder().maxAttempts($L)"
+ ".backoffStrategy($T.create($T.ofSeconds($L))).build() : builder.pollingStrategy",
PollingStrategy.class,
pollingStrategyVarName,
PollingStrategy.class,
.addStatement("$T $N = builder.overrideConfiguration == null ? $T.builder().maxAttempts($L)"
+ ".backoffStrategy($T.create($T.ofSeconds($L))).build() : builder.overrideConfiguration",
WaiterOverrideConfiguration.class,
overrideConfigurationVarName,
WaiterOverrideConfiguration.class,
waiter.getMaxAttempts(),
FixedDelayBackoffStrategy.class,
Duration.class,
waiter.getDelay());


String waiterFieldName = waiterFieldName(waiterKey);
codeBlockBuilder.add("this.$L = $T.builder($T.class).pollingStrategy($L).acceptors($LAcceptors())",
codeBlockBuilder.add("this.$L = $T.builder($T.class).overrideConfiguration($L).acceptors($LAcceptors())",
waiterFieldName,
waiterClassName,
ClassName.get(modelPackage, opModel.getReturnType().getReturnType()),
pollingStrategyVarName,
overrideConfigurationVarName,
waiterFieldName);

additionalWaiterConfig().ifPresent(codeBlockBuilder::add);
Expand Down Expand Up @@ -226,7 +226,8 @@ private TypeSpec builder() {
.addModifiers(PUBLIC, STATIC, FINAL)
.addSuperinterface(interfaceClassName().nestedClass("Builder"))
.addField(clientClassName(), "client", PRIVATE)
.addField(ClassName.get(PollingStrategy.class), "pollingStrategy", PRIVATE);
.addField(ClassName.get(WaiterOverrideConfiguration.class),
"overrideConfiguration", PRIVATE);

additionalBuilderTypeSpecModification(builder);
builder.addMethods(builderMethods());
Expand All @@ -238,11 +239,11 @@ private TypeSpec builder() {

private List<MethodSpec> builderMethods() {
List<MethodSpec> methods = new ArrayList<>();
methods.add(MethodSpec.methodBuilder("pollingStrategy")
methods.add(MethodSpec.methodBuilder("overrideConfiguration")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addParameter(ClassName.get(PollingStrategy.class), "pollingStrategy")
.addStatement("this.pollingStrategy = pollingStrategy")
.addParameter(ClassName.get(WaiterOverrideConfiguration.class), "overrideConfiguration")
.addStatement("this.overrideConfiguration = overrideConfiguration")
.addStatement("return this")
.returns(interfaceClassName().nestedClass("Builder"))
.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import software.amazon.awssdk.codegen.model.service.WaiterDefinition;
import software.amazon.awssdk.codegen.poet.ClassSpec;
import software.amazon.awssdk.codegen.poet.PoetUtils;
import software.amazon.awssdk.core.waiters.PollingStrategy;
import software.amazon.awssdk.core.waiters.WaiterOverrideConfiguration;
import software.amazon.awssdk.utils.SdkAutoCloseable;

/**
Expand Down Expand Up @@ -167,23 +167,23 @@ private TypeSpec builderInterface() {

private List<MethodSpec> builderMethods() {
List<MethodSpec> builderMethods = new ArrayList<>();
builderMethods.add(MethodSpec.methodBuilder("pollingStrategy")
builderMethods.add(MethodSpec.methodBuilder("overrideConfiguration")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addParameter(ClassName.get(PollingStrategy.class), "pollingStrategy")
.addParameter(ClassName.get(WaiterOverrideConfiguration.class), "overrideConfiguration")
.addJavadoc(WaiterDocs.waiterBuilderPollingStrategy())
.returns(className().nestedClass("Builder"))
.build());
ParameterizedTypeName parameterizedTypeName =
ParameterizedTypeName.get(ClassName.get(Consumer.class),
ClassName.get(PollingStrategy.class).nestedClass("Builder"));
builderMethods.add(MethodSpec.methodBuilder("pollingStrategy")
ClassName.get(WaiterOverrideConfiguration.class).nestedClass("Builder"));
builderMethods.add(MethodSpec.methodBuilder("overrideConfiguration")
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
.addParameter(parameterizedTypeName, "pollingStrategy")
.addParameter(parameterizedTypeName, "overrideConfiguration")
.addJavadoc(WaiterDocs.waiterBuilderPollingStrategyConsumerBuilder())
.addStatement("$T.Builder builder = $T.builder()",
PollingStrategy.class, PollingStrategy.class)
.addStatement("pollingStrategy.accept(builder)")
.addStatement("return pollingStrategy(builder.build())")
WaiterOverrideConfiguration.class, WaiterOverrideConfiguration.class)
.addStatement("overrideConfiguration.accept(builder)")
.addStatement("return overrideConfiguration(builder.build())")
.returns(className().nestedClass("Builder"))
.build());
builderMethods.add(MethodSpec.methodBuilder("client")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,6 @@ private static List<MetricPublisher> resolveMetricPublishers(SdkClientConfigurat

@Override
public QueryAsyncWaiter waiter() {
return QueryAsyncWaiter.builder().client(this).executorService(executorService).build();
return QueryAsyncWaiter.builder().client(this).scheduledExecutorService(executorService).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
import software.amazon.awssdk.core.internal.waiters.WaiterAttribute;
import software.amazon.awssdk.core.retry.backoff.FixedDelayBackoffStrategy;
import software.amazon.awssdk.core.waiters.AsyncWaiter;
import software.amazon.awssdk.core.waiters.PollingStrategy;
import software.amazon.awssdk.core.waiters.WaiterAcceptor;
import software.amazon.awssdk.core.waiters.WaiterOverrideConfiguration;
import software.amazon.awssdk.core.waiters.WaiterResponse;
import software.amazon.awssdk.core.waiters.WaiterState;
import software.amazon.awssdk.services.query.QueryAsyncClient;
Expand Down Expand Up @@ -63,11 +63,11 @@ private DefaultQueryAsyncWaiter(DefaultBuilder builder) {
this.executorService = builder.executorService;
}
managedResources = attributeMapBuilder.build();
PollingStrategy postOperationSuccessStrategy = builder.pollingStrategy == null ? PollingStrategy.builder()
.maxAttempts(40).backoffStrategy(FixedDelayBackoffStrategy.create(Duration.ofSeconds(1))).build()
: builder.pollingStrategy;
WaiterOverrideConfiguration postOperationSuccessStrategy = builder.overrideConfiguration == null ? WaiterOverrideConfiguration
.builder().maxAttempts(40).backoffStrategy(FixedDelayBackoffStrategy.create(Duration.ofSeconds(1))).build()
: builder.overrideConfiguration;
this.postOperationSuccessWaiter = AsyncWaiter.builder(APostOperationResponse.class)
.pollingStrategy(postOperationSuccessStrategy).acceptors(postOperationSuccessWaiterAcceptors())
.overrideConfiguration(postOperationSuccessStrategy).acceptors(postOperationSuccessWaiterAcceptors())
.scheduledExecutorService(executorService).build();
}

Expand Down Expand Up @@ -118,22 +118,22 @@ private <T extends QueryRequest> T applyWaitersUserAgent(T request) {
public static final class DefaultBuilder implements QueryAsyncWaiter.Builder {
private QueryAsyncClient client;

private PollingStrategy pollingStrategy;
private WaiterOverrideConfiguration overrideConfiguration;

private ScheduledExecutorService executorService;

private DefaultBuilder() {
}

@Override
public QueryAsyncWaiter.Builder executorService(ScheduledExecutorService executorService) {
public QueryAsyncWaiter.Builder scheduledExecutorService(ScheduledExecutorService executorService) {
this.executorService = executorService;
return this;
}

@Override
public QueryAsyncWaiter.Builder pollingStrategy(PollingStrategy pollingStrategy) {
this.pollingStrategy = pollingStrategy;
public QueryAsyncWaiter.Builder overrideConfiguration(WaiterOverrideConfiguration overrideConfiguration) {
this.overrideConfiguration = overrideConfiguration;
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.function.Consumer;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.core.waiters.PollingStrategy;
import software.amazon.awssdk.core.waiters.WaiterOverrideConfiguration;
import software.amazon.awssdk.core.waiters.WaiterResponse;
import software.amazon.awssdk.services.query.QueryAsyncClient;
import software.amazon.awssdk.services.query.model.APostOperationRequest;
Expand Down Expand Up @@ -79,30 +79,31 @@ interface Builder {
* the executorService to set
* @return a reference to this object so that method calls can be chained together.
*/
Builder executorService(ScheduledExecutorService executorService);
Builder scheduledExecutorService(ScheduledExecutorService executorService);

/**
* Defines a {@link PollingStrategy} to use when polling a resource
* Defines overrides to the default SDK waiter configuration that should be used for waiters created from this
* builder
*
* @param pollingStrategy
* the polling strategy to set
* @param overrideConfiguration
* the override configuration to set
* @return a reference to this object so that method calls can be chained together.
*/
Builder pollingStrategy(PollingStrategy pollingStrategy);
Builder overrideConfiguration(WaiterOverrideConfiguration overrideConfiguration);

/**
* This is a convenient method to pass the configuration of the {@link PollingStrategy} without the need to
* create an instance manually via {@link PollingStrategy.builder()}
* This is a convenient method to pass the override configuration without the need to create an instance
* manually via {@link WaiterOverrideConfiguration.builder()}
*
* @param pollingStrategy
* the polling strategy to set
* @param overrideConfiguration
* The consumer that will configure the overrideConfiguration
* @return a reference to this object so that method calls can be chained together.
* @see #pollingStrategy(PollingStrategy)
* @see #overrideConfiguration(WaiterOverrideConfiguration)
*/
default Builder pollingStrategy(Consumer<PollingStrategy.Builder> pollingStrategy) {
PollingStrategy.Builder builder = PollingStrategy.builder();
pollingStrategy.accept(builder);
return pollingStrategy(builder.build());
default Builder overrideConfiguration(Consumer<WaiterOverrideConfiguration.Builder> overrideConfiguration) {
WaiterOverrideConfiguration.Builder builder = WaiterOverrideConfiguration.builder();
overrideConfiguration.accept(builder);
return overrideConfiguration(builder.build());
}

/**
Expand Down
Loading