in aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java [71:98]
public void start(InitializableLambdaContainerHandler handler) throws ContainerInitializationException {
if (InitializationTypeHelper.isAsyncInitializationDisabled()){
log.info("Async init disabled due to \"{}\" initialization", InitializationTypeHelper.getInitializationType());
super.start(handler);
return;
}
initializationLatch = new CountDownLatch(1);
AsyncInitializer initializer = new AsyncInitializer(initializationLatch, handler);
Thread initThread = new Thread(initializer);
initThread.start();
try {
long curTime = Instant.now().toEpochMilli();
// account for the time it took to call the various constructors with the actual start time + a grace time
long awaitTime = (actualStartTime + LAMBDA_MAX_INIT_TIME_MS) - curTime - INIT_GRACE_TIME_MS;
log.info("Async initialization will wait for {}ms (init grace time is configured to {})",
awaitTime, INIT_GRACE_TIME_MS);
if (!initializationLatch.await(awaitTime, TimeUnit.MILLISECONDS)) {
log.info("Initialization took longer than " + LAMBDA_MAX_INIT_TIME_MS + ", setting new CountDownLatch and " +
"continuing in event handler");
initializationLatch = new CountDownLatch(1);
initializer.replaceLatch(initializationLatch);
}
} catch (InterruptedException e) {
// at the moment we assume that this happened because of a timeout since the init thread calls System.exit
// when an exception is thrown.
throw new ContainerInitializationException("Container initialization interrupted", e);
}
}