Skip to content

Commit 48eac33

Browse files
committed
feat: add environment variables to tune async init without the need to recompile (#450)
1 parent a2dd500 commit 48eac33

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,14 @@
3838
* seconds has already been used up.
3939
*/
4040
public class AsyncInitializationWrapper extends InitializationWrapper {
41-
private int INIT_GRACE_TIME_MS = 250;
41+
private static final int DEFAULT_INIT_GRACE_TIME_MS = 150;
42+
private static final String INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME = "AWS_SERVERLESS_JAVA_CONTAINER_INIT_GRACE_TIME";
43+
private static final int INIT_GRACE_TIME_MS = Integer.parseInt(System.getProperty(
44+
INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_INIT_GRACE_TIME_MS)));
4245
private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000;
4346

4447
private CountDownLatch initializationLatch;
45-
private long actualStartTime;
48+
private final long actualStartTime;
4649
private Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class);
4750

4851
/**
@@ -60,7 +63,6 @@ public AsyncInitializationWrapper(long startTime) {
6063
*/
6164
public AsyncInitializationWrapper() {
6265
actualStartTime = ManagementFactory.getRuntimeMXBean().getStartTime();
63-
INIT_GRACE_TIME_MS = 150;
6466
}
6567

6668
@Override
@@ -71,7 +73,7 @@ public void start(LambdaContainerHandler handler) throws ContainerInitialization
7173
initThread.start();
7274
try {
7375
long curTime = Instant.now().toEpochMilli();
74-
// account for the time it took to call the various constructors with the actual start time + a grace of 500ms
76+
// account for the time it took to call the various constructors with the actual start time + a grace time
7577
long awaitTime = (actualStartTime + LAMBDA_MAX_INIT_TIME_MS) - curTime - INIT_GRACE_TIME_MS;
7678
log.info("Async initialization will wait for " + awaitTime + "ms");
7779
if (!initializationLatch.await(awaitTime, TimeUnit.MILLISECONDS)) {

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ public class ContainerConfig {
2626
public static final String DEFAULT_URI_ENCODING = "UTF-8";
2727
public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1";
2828
private static final List<String> DEFAULT_FILE_PATHS = new ArrayList<String>() {{ add("/tmp"); add("/var/task"); }};
29-
private static final int MAX_INIT_TIMEOUT_MS = 20_000;
29+
private static final int DEFAULT_MAX_INIT_TIMEOUT_MS = 20_000;
30+
private static final String MAX_INIT_TIMEOUT_ENVIRONMENT_VARIABLE_NAME = "AWS_SERVERLESS_JAVA_CONTAINER_MAX_INIT_TIMEOUT";
31+
private static final int MAX_INIT_TIMEOUT_MS = Integer.parseInt(System.getProperty(
32+
MAX_INIT_TIMEOUT_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_MAX_INIT_TIMEOUT_MS)));
3033

3134
public static ContainerConfig defaultConfig() {
3235
ContainerConfig configuration = new ContainerConfig();

0 commit comments

Comments
 (0)