22Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
33SPDX-License-Identifier: Apache-2.0
44*/
5+
56package com .amazonaws .services .lambda .runtime .api .client ;
67
78import com .amazonaws .services .lambda .crac .Core ;
3031import java .io .IOError ;
3132import java .io .IOException ;
3233import java .io .PrintStream ;
34+ import java .io .UnsupportedEncodingException ;
3335import java .lang .reflect .Constructor ;
3436import java .net .URLClassLoader ;
3537import java .security .Security ;
3638import java .util .Properties ;
3739
38-
3940/**
4041 * The entrypoint of this class is {@link AWSLambda#startRuntime}. It performs two main tasks:
4142 *
@@ -176,24 +177,28 @@ private static LogSink createLogSink() {
176177 }
177178 }
178179
179- public static void main (String [] args ) {
180- startRuntime (args [0 ]);
181- }
180+ public static void main (String [] args ) throws Throwable {
181+ try {
182+ LambdaContextLogger logger = initLogger ();
183+ LambdaRequestHandler lambdaRequestHandler = getLambdaRequestHandlerObject (args [0 ], logger );
184+ startRuntimeLoop (lambdaRequestHandler , logger );
182185
183- private static void startRuntime (String handler ) {
184- try (LogSink logSink = createLogSink ()) {
185- LambdaContextLogger logger = new LambdaContextLogger (
186- logSink ,
187- LogLevel .fromString (LambdaEnvironment .LAMBDA_LOG_LEVEL ),
188- LogFormat .fromString (LambdaEnvironment .LAMBDA_LOG_FORMAT )
189- );
190- startRuntime (handler , logger );
191- } catch (Throwable t ) {
186+ } catch (IOException | ClassNotFoundException t ) {
192187 throw new Error (t );
193188 }
194189 }
195190
196- private static void startRuntime (String handler , LambdaContextLogger lambdaLogger ) throws Throwable {
191+ private static LambdaContextLogger initLogger () {
192+ LogSink logSink = createLogSink ();
193+ LambdaContextLogger logger = new LambdaContextLogger (
194+ logSink ,
195+ LogLevel .fromString (LambdaEnvironment .LAMBDA_LOG_LEVEL ),
196+ LogFormat .fromString (LambdaEnvironment .LAMBDA_LOG_FORMAT ));
197+
198+ return logger ;
199+ }
200+
201+ private static LambdaRequestHandler getLambdaRequestHandlerObject (String handler , LambdaContextLogger lambdaLogger ) throws UnsupportedEncodingException , ClassNotFoundException , IOException {
197202 UnsafeUtil .disableIllegalAccessWarning ();
198203
199204 System .setOut (new PrintStream (new LambdaOutputStream (System .out ), false , "UTF-8" ));
@@ -210,7 +215,7 @@ private static void startRuntime(String handler, LambdaContextLogger lambdaLogge
210215 Thread .currentThread ().setContextClassLoader (customerClassLoader );
211216
212217 // Load the user's handler
213- LambdaRequestHandler requestHandler ;
218+ LambdaRequestHandler requestHandler = null ;
214219 try {
215220 requestHandler = findRequestHandler (handler , customerClassLoader );
216221 } catch (UserFault userFault ) {
@@ -220,11 +225,16 @@ private static void startRuntime(String handler, LambdaContextLogger lambdaLogge
220225 RapidErrorType .BadFunctionCode );
221226 runtimeClient .reportInitError (error );
222227 System .exit (1 );
223- return ;
224228 }
229+
225230 if (INIT_TYPE_SNAP_START .equals (AWS_LAMBDA_INITIALIZATION_TYPE )) {
226231 onInitComplete (lambdaLogger );
227232 }
233+
234+ return requestHandler ;
235+ }
236+
237+ private static void startRuntimeLoop (LambdaRequestHandler requestHandler , LambdaContextLogger lambdaLogger ) throws Throwable {
228238 boolean shouldExit = false ;
229239 while (!shouldExit ) {
230240 UserFault userFault = null ;
@@ -240,7 +250,7 @@ private static void startRuntime(String handler, LambdaContextLogger lambdaLogge
240250 payload = requestHandler .call (request );
241251 runtimeClient .reportInvocationSuccess (request .getId (), payload .toByteArray ());
242252 // clear interrupted flag in case if it was set by user's code
243- boolean ignored = Thread .interrupted ();
253+ Thread .interrupted ();
244254 } catch (UserFault f ) {
245255 shouldExit = f .fatal ;
246256 userFault = f ;
@@ -278,6 +288,7 @@ static void onInitComplete(final LambdaContextLogger lambdaLogger) throws IOExce
278288 RapidErrorType .BeforeCheckpointError ));
279289 System .exit (64 );
280290 }
291+
281292 try {
282293 Core .getGlobalContext ().afterRestore (null );
283294 } catch (Exception restoreExc ) {
0 commit comments