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
- Read the full stack trace embedded in the IOException message to find the root startup failure
- Run the function locally (Functions Framework with the Quarkus uber-jar) to see bootstrap logs live
- Validate configuration and bean production; fix any extension that fails to start
- 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
- Smoke-test the built uber-jar locally before every deploy
- Surface startup errors in CI instead of relying on cold-start failures
- Validate all quarkus.* configuration during build
- Monitor the first invocation after deploy; it carries the bootstrap log
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
- IOException(deploymentStatus)
- IOException(deploymentStatus)
- RuntimeException(e)
- We didn't found any HttpFunction to run (or there is multipl
- Json object ended without }
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/19a5be48189cb3a2.
Report an issue: GitHub.