in invoker/core/src/main/java/com/google/cloud/functions/invoker/runner/Invoker.java [283:338]
private void startServer(boolean join) throws Exception {
if (server != null) {
throw new IllegalStateException("Server already started");
}
QueuedThreadPool pool = new QueuedThreadPool(1024);
server = new Server(pool);
ServerConnector connector = new ServerConnector(server);
connector.setPort(port);
server.setConnectors(new Connector[] {connector});
ServletContextHandler servletContextHandler = new ServletContextHandler();
servletContextHandler.setContextPath("/");
server.setHandler(NotFoundHandler.forServlet(servletContextHandler));
Class<?> functionClass = loadFunctionClass();
HttpServlet servlet;
if (functionSignatureType == null) {
servlet = servletForDeducedSignatureType(functionClass);
} else {
switch (functionSignatureType) {
case "http":
if (TypedFunction.class.isAssignableFrom(functionClass)) {
servlet = TypedFunctionExecutor.forClass(functionClass);
} else {
servlet = HttpFunctionExecutor.forClass(functionClass);
}
break;
case "event":
case "cloudevent":
servlet = BackgroundFunctionExecutor.forClass(functionClass);
break;
case "typed":
servlet = TypedFunctionExecutor.forClass(functionClass);
break;
default:
String error =
String.format(
"Function signature type %s is unknown; should be \"http\", \"event\","
+ " or \"cloudevent\"",
functionSignatureType);
throw new RuntimeException(error);
}
}
ServletHolder servletHolder = new ServletHolder(servlet);
servletHolder.getRegistration().setMultipartConfig(new MultipartConfigElement(""));
servletContextHandler.addServlet(servletHolder, "/*");
servletContextHandler = addTimerFilterForRequestTimeout(servletContextHandler);
server.start();
logServerInfo();
if (join) {
server.join();
}
}