quarkusio/quarkus · critical · IOException

IOException(deploymentStatus)

Error message

IOException(deploymentStatus)

What it means

In the google-cloud-functions-http extension, QuarkusHttpFunction.service throws an IOException containing the captured bootstrap log (deploymentStatus) when the Quarkus application failed to start in the class's static initializer. started is false, so every incoming HTTP request surfaces the startup failure rather than being dispatched to Vert.x via the virtual Netty client.

Source

Thrown at extensions/google-cloud-functions-http/runtime/src/main/java/io/quarkus/gcp/functions/http/QuarkusHttpFunction.java:75

                errorWriter.println("Quarkus bootstrapped successfully.");
                started = true;
            } catch (Exception ex) {
                errorWriter.println("Quarkus bootstrap failed.");
                ex.printStackTrace(errorWriter);
            } finally {
                Thread.currentThread().setContextClassLoader(currentCl);
            }
        } else {
            errorWriter.println("Quarkus bootstrapped successfully.");
            started = true;
        }
        deploymentStatus = error.toString();
    }

    @Override
    public void service(HttpRequest request, HttpResponse response) throws IOException {
        if (!started) {
            throw new IOException(deploymentStatus);
        }
        dispatch(request, response);
    }

    private void dispatch(HttpRequest request, HttpResponse response) throws IOException {
        try {
            nettyDispatch(request, response);
        } catch (IOException e) {
            throw e;
        } catch (Exception e) {
            throw new IOException(e);
        }
    }

    private void nettyDispatch(HttpRequest request, HttpResponse response)
            throws InterruptedException, IOException, ExecutionException {
        String path = request.getPath();
        Optional<String> host = request.getFirstHeader("Host");

View on GitHub (pinned to e1c734241f)

Solutions

  1. Read the full stack trace embedded in the IOException message to find the root startup failure
  2. Run the function locally (Functions Framework with the Quarkus uber-jar) to see bootstrap logs live
  3. Validate configuration and bean production; fix any extension that fails to start
  4. Rebuild with quarkus.package.jar.type=uber-jar and redeploy
Defensive patterns

Strategy: validation

Validate before calling

// before deploying, ensure the packaged jar boots
java -jar target/my-function.jar & sleep 5
if ! curl -sf http://localhost:8080/; then echo "Quarkus bootstrap failed"; fi

Try / catch

try {
    function.service(request, response);
} catch (IOException e) {
    if (e.getMessage().startsWith("Quarkus bootstrap failed")) {
        LOG.error("Bootstrap stack:\n" + e.getMessage());
    } else throw e;
}

Prevention

When it happens

Trigger: Static-init bootstrap of io.quarkus.runner.ApplicationImpl threw an exception (config error, bean failure, extension startup failure) and then service() is invoked with an HTTP request.

Common situations: Invalid quarkus.* configuration, failing CDI bean creation, missing native/runtime dependencies, or deploying a jar that was not produced by the Quarkus GCP functions integration.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/19a5be48189cb3a2. Report an issue: GitHub.