Skip to content
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 @@ -23,6 +23,7 @@
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.retries.DefaultRetryStrategy;
import software.amazon.awssdk.services.lambda.LambdaAsyncClient;
import software.amazon.awssdk.services.lambda.model.InvokeRequest;

Expand Down Expand Up @@ -58,6 +59,14 @@ public LambdaFunctionHandler() {
.apiCallAttemptTimeout(Duration.ofSeconds(config.getApiCallAttemptTimeout()))
.build();

if(config.getMaxRetries() > 0) {
overrideConfig = overrideConfig.toBuilder()
.retryStrategy(DefaultRetryStrategy.standardStrategyBuilder()
.maxAttempts(config.getMaxRetries())
.build())
.build();
}

var builder = LambdaAsyncClient.builder().region(Region.of(config.getRegion()))
.httpClient(asyncHttpClient)
.overrideConfiguration(overrideConfig);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class LambdaInvokerConfig {
private static final String FUNCTIONS = "functions";
private static final String METRICS_INJECTION = "metricsInjection";
private static final String METRICS_NAME = "metricsName";
private static final String MAX_RETRIES = "maxRetries";
private static final String MAX_CONCURRENCY = "maxConcurrency";
private static final String MAX_PENDING_CONNECTION_ACQUIRES = "maxPendingConnectionAcquires";
private static final String CONNECTION_ACQUISITION_TIMEOUT = "connectionAcquisitionTimeout";
Expand All @@ -34,6 +35,7 @@ public class LambdaInvokerConfig {
private Map<String, String> functions;
private boolean metricsInjection;
private String metricsName;
private int maxRetries;
private int maxConcurrency;
private int maxPendingConnectionAcquires;
private int connectionAcquisitionTimeout;
Expand Down Expand Up @@ -102,6 +104,14 @@ public void setMetricsName(String metricsName) {
this.metricsName = metricsName;
}

public int getMaxRetries() {
return maxRetries;
}

public void setMaxRetries(int maxRetries) {
this.maxRetries = maxRetries;
}

public int getMaxConcurrency() {
return maxConcurrency;
}
Expand Down Expand Up @@ -192,6 +202,10 @@ private void setConfigData() {
if(object != null ) {
metricsName = (String)object;
}
object = mappedConfig.get(MAX_RETRIES);
if (object != null) {
maxRetries = Config.loadIntegerValue(MAX_RETRIES, object);
}
object = mappedConfig.get(MAX_CONCURRENCY);
if (object != null) {
maxConcurrency = Config.loadIntegerValue(MAX_CONCURRENCY, object);
Expand Down
2 changes: 2 additions & 0 deletions lambda-invoker/src/main/resources/config/lambda-invoker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ endpointOverride: ${lambda-invoker.endpointOverride:}
apiCallTimeout: ${lambda-invoker.apiCallTimeout:60000}
# Api call attempt timeout in milliseconds. This sets the amount of time for each individual attempt.
apiCallAttemptTimeout: ${lambda-invoker.apiCallAttemptTimeout:20000}
# The maximum number of retries for the Lambda function invocation. Default is 3. Set to 0 to disable retries.
maxRetries: ${lambda-invoker.maxRetries:3}
# The maximum number of concurrent requests that can be made to Lambda. Default is 50.
maxConcurrency: ${lambda-invoker.maxConcurrency:50}
# The maximum number of pending acquires allowed. Default is 10000.
Expand Down