private static void startRuntimeLoop()

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);
                }
            }
        }
    }