in aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/AWSLambda.java [235:276]
private static void startRuntimeLoop(LambdaRequestHandler requestHandler, LambdaContextLogger lambdaLogger) throws Throwable {
boolean shouldExit = false;
while (!shouldExit) {
UserFault userFault = null;
InvocationRequest request = runtimeClient.nextInvocation();
if (request.getXrayTraceId() != null) {
System.setProperty(LAMBDA_TRACE_HEADER_PROP, request.getXrayTraceId());
} else {
System.clearProperty(LAMBDA_TRACE_HEADER_PROP);
}
ByteArrayOutputStream payload;
try {
payload = requestHandler.call(request);
runtimeClient.reportInvocationSuccess(request.getId(), payload.toByteArray());
// clear interrupted flag in case if it was set by user's code
Thread.interrupted();
} catch (UserFault f) {
shouldExit = f.fatal;
userFault = f;
UserFault.filterStackTrace(f);
LambdaError error = new LambdaError(
LambdaErrorConverter.fromUserFault(f),
RapidErrorType.BadFunctionCode);
runtimeClient.reportInvocationError(request.getId(), error);
} catch (Throwable t) {
shouldExit = t instanceof VirtualMachineError || t instanceof IOError;
UserFault.filterStackTrace(t);
userFault = UserFault.makeUserFault(t);
LambdaError error = new LambdaError(
LambdaErrorConverter.fromThrowable(t),
XRayErrorCauseConverter.fromThrowable(t),
RapidErrorType.UserException);
runtimeClient.reportInvocationError(request.getId(), error);
} finally {
if (userFault != null) {
lambdaLogger.log(userFault.reportableError(), lambdaLogger.getLogFormat() == LogFormat.JSON ? LogLevel.ERROR : LogLevel.UNDEFINED);
}
}
}
}