Skip to content

Commit e5372c5

Browse files
authored
fixes #139 add three connection related configuration properties (#140)
1 parent 8751b2a commit e5372c5

3 files changed

Lines changed: 53 additions & 5 deletions

File tree

lambda-invoker/src/main/java/com/networknt/aws/lambda/LambdaFunctionHandler.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
44
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
5-
import com.networknt.body.BodyHandler;
65
import com.networknt.config.Config;
76
import com.networknt.config.JsonMapper;
87
import com.networknt.handler.Handler;
@@ -25,11 +24,7 @@
2524
import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
2625
import software.amazon.awssdk.regions.Region;
2726
import software.amazon.awssdk.services.lambda.LambdaAsyncClient;
28-
import software.amazon.awssdk.services.lambda.LambdaClient;
29-
import software.amazon.awssdk.services.lambda.LambdaClientBuilder;
3027
import software.amazon.awssdk.services.lambda.model.InvokeRequest;
31-
import software.amazon.awssdk.services.lambda.model.InvokeResponse;
32-
import software.amazon.awssdk.services.lambda.model.LambdaException;
3328

3429
import java.net.URI;
3530
import java.time.Duration;
@@ -54,6 +49,9 @@ public LambdaFunctionHandler() {
5449
.readTimeout(Duration.ofMillis(config.getApiCallAttemptTimeout()))
5550
.writeTimeout(Duration.ofMillis(config.getApiCallAttemptTimeout()))
5651
.connectionTimeout(Duration.ofMillis(config.getApiCallAttemptTimeout()))
52+
.maxConcurrency(config.getMaxConcurrency())
53+
.maxPendingConnectionAcquires(config.getMaxPendingConnectionAcquires())
54+
.connectionAcquisitionTimeout(Duration.ofSeconds(config.getConnectionAcquisitionTimeout()))
5755
.build();
5856
ClientOverrideConfiguration overrideConfig = ClientOverrideConfiguration.builder()
5957
.apiCallTimeout(Duration.ofMillis(config.getApiCallTimeout()))

lambda-invoker/src/main/java/com/networknt/aws/lambda/LambdaInvokerConfig.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public class LambdaInvokerConfig {
2222
private static final String FUNCTIONS = "functions";
2323
private static final String METRICS_INJECTION = "metricsInjection";
2424
private static final String METRICS_NAME = "metricsName";
25+
private static final String MAX_CONCURRENCY = "maxConcurrency";
26+
private static final String MAX_PENDING_CONNECTION_ACQUIRES = "maxPendingConnectionAcquires";
27+
private static final String CONNECTION_ACQUISITION_TIMEOUT = "connectionAcquisitionTimeout";
2528

2629
private String region;
2730
private String endpointOverride;
@@ -31,6 +34,9 @@ public class LambdaInvokerConfig {
3134
private Map<String, String> functions;
3235
private boolean metricsInjection;
3336
private String metricsName;
37+
private int maxConcurrency;
38+
private int maxPendingConnectionAcquires;
39+
private int connectionAcquisitionTimeout;
3440

3541
public String getRegion() {
3642
return region;
@@ -96,6 +102,30 @@ public void setMetricsName(String metricsName) {
96102
this.metricsName = metricsName;
97103
}
98104

105+
public int getMaxConcurrency() {
106+
return maxConcurrency;
107+
}
108+
109+
public void setMaxConcurrency(int maxConcurrency) {
110+
this.maxConcurrency = maxConcurrency;
111+
}
112+
113+
public int getMaxPendingConnectionAcquires() {
114+
return maxPendingConnectionAcquires;
115+
}
116+
117+
public void setMaxPendingConnectionAcquires(int maxPendingConnectionAcquires) {
118+
this.maxPendingConnectionAcquires = maxPendingConnectionAcquires;
119+
}
120+
121+
public int getConnectionAcquisitionTimeout() {
122+
return connectionAcquisitionTimeout;
123+
}
124+
125+
public void setConnectionAcquisitionTimeout(int connectionAcquisitionTimeout) {
126+
this.connectionAcquisitionTimeout = connectionAcquisitionTimeout;
127+
}
128+
99129
private final Config config;
100130
private Map<String, Object> mappedConfig;
101131

@@ -114,6 +144,7 @@ private LambdaInvokerConfig(String configName) {
114144
setConfigData();
115145
setConfigMap();
116146
}
147+
117148
public static LambdaInvokerConfig load() {
118149
return new LambdaInvokerConfig();
119150
}
@@ -127,6 +158,7 @@ void reload() {
127158
setConfigData();
128159
setConfigMap();
129160
}
161+
130162
public Map<String, Object> getMappedConfig() {
131163
return mappedConfig;
132164
}
@@ -160,6 +192,18 @@ private void setConfigData() {
160192
if(object != null ) {
161193
metricsName = (String)object;
162194
}
195+
object = mappedConfig.get(MAX_CONCURRENCY);
196+
if (object != null) {
197+
maxConcurrency = Config.loadIntegerValue(MAX_CONCURRENCY, object);
198+
}
199+
object = mappedConfig.get(MAX_PENDING_CONNECTION_ACQUIRES);
200+
if (object != null) {
201+
maxPendingConnectionAcquires = Config.loadIntegerValue(MAX_PENDING_CONNECTION_ACQUIRES, object);
202+
}
203+
object = mappedConfig.get(CONNECTION_ACQUISITION_TIMEOUT);
204+
if (object != null) {
205+
connectionAcquisitionTimeout = Config.loadIntegerValue(CONNECTION_ACQUISITION_TIMEOUT, object);
206+
}
163207
}
164208

165209
private void setConfigMap() {

lambda-invoker/src/main/resources/config/lambda-invoker.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ endpointOverride: ${lambda-invoker.endpointOverride:}
77
apiCallTimeout: ${lambda-invoker.apiCallTimeout:60000}
88
# Api call attempt timeout in milliseconds. This sets the amount of time for each individual attempt.
99
apiCallAttemptTimeout: ${lambda-invoker.apiCallAttemptTimeout:20000}
10+
# The maximum number of concurrent requests that can be made to Lambda. Default is 50.
11+
maxConcurrency: ${lambda-invoker.maxConcurrency:50}
12+
# The maximum number of pending acquires allowed. Default is 10000.
13+
maxPendingConnectionAcquires: ${lambda-invoker.maxPendingConnectionAcquires:10000}
14+
# The amount of time to wait when acquiring a connection from the pool before timing out in seconds. Default is 10 seconds.
15+
connectionAcquisitionTimeout: ${lambda-invoker.connectionAcquisitionTimeout:10}
1016
# The LogType of the execution log of Lambda. Set Tail to include and None to not include.
1117
logType: ${lambda-invoker.logType:Tail}
1218
# mapping of the endpoints to Lambda functions. Define a list of functions in values.yml file.

0 commit comments

Comments
 (0)