private void startServer()

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