prestodb/presto · warning · ArrowException
ARROW_FLIGHT_INFO_ERROR
ARROW_FLIGHT_INFO_ERROR
Error message
Error getting flight information:
What it means
getFlightInfo issues a FlightClient.getInfo(descriptor, callOptions) RPC to resolve a descriptor into FlightInfo. The only checked exception is InterruptedException, which is wrapped as ArrowException(ARROW_FLIGHT_INFO_ERROR) with 'Error getting flight information: <msg>'. Note the catch does not restore the thread interrupt flag, so an interruption during this RPC surfaces as this connector error.
Source
Thrown at presto-base-arrow-flight/src/main/java/com/facebook/plugin/arrow/BaseArrowFlightClientHandler.java:139
clientKey.get().close();
}
catch (IOException e) {
logger.error("Error closing input stream for client key", e);
}
}
}
}
public abstract CallOption[] getCallOptions(ConnectorSession connectorSession);
protected FlightInfo getFlightInfo(ConnectorSession connectorSession, FlightDescriptor flightDescriptor)
{
try (FlightClient client = createFlightClient()) {
CallOption[] callOptions = getCallOptions(connectorSession);
return client.getInfo(flightDescriptor, callOptions);
}
catch (InterruptedException e) {
throw new ArrowException(ARROW_FLIGHT_INFO_ERROR, "Error getting flight information: " + e.getMessage(), e);
}
}
protected ClientClosingFlightStream getFlightStream(ConnectorSession connectorSession, ArrowSplit split)
{
ByteBuffer endpointBytes = ByteBuffer.wrap(split.getFlightEndpointBytes());
try {
FlightEndpoint endpoint = FlightEndpoint.deserialize(endpointBytes);
FlightClient client = endpoint.getLocations().stream()
.findAny()
.map(this::createFlightClient)
.orElseGet(this::createFlightClient);
return new ClientClosingFlightStream(
client.getStream(endpoint.getTicket(), getCallOptions(connectorSession)),
client);
}
catch (FlightRuntimeException | IOException | URISyntaxException e) {
throw new ArrowException(ARROW_FLIGHT_CLIENT_ERROR, e.getMessage(), e);View on GitHub (pinned to 55bb57d202)
Solutions
- Treat it as expected during query cancellation — rerun the query if cancellation was unintentional.
- Avoid restarting/shutting down workers while queries are running (drain first).
- If it happens spuriously under load, check for thread-pool exhaustion causing cancellation timers to fire late/incorrectly.
- Ensure client code that wraps this call doesn't swallow interrupts and re-trigger.
- Long-term: consider re-interrupting the thread before throwing to preserve cancellation semantics.
Example fix
// before
catch (InterruptedException e) {
throw new ArrowException(ARROW_FLIGHT_INFO_ERROR, "Error getting flight information: " + e.getMessage(), e);
}
// after
catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new ArrowException(ARROW_FLIGHT_INFO_ERROR, "Error getting flight information: " + e.getMessage(), e);
} Defensive patterns
Strategy: retry
Validate before calling
// Skip the RPC if the current thread is already interrupted
if (Thread.currentThread().isInterrupted()) {
throw new IllegalStateException("Thread already interrupted; not calling getInfo");
} Try / catch
try {
return handler.getFlightInfo(session, descriptor);
} catch (ArrowException e) {
if (e.getErrorCode().getCode() == ARROW_FLIGHT_INFO_ERROR.getCode()
&& e.getCause() instanceof InterruptedException) {
// query was cancelled / worker shutting down: do not blind-retry,
// only retry if interruption was spurious and Thread.interrupted() is false
}
throw e;
} Prevention
- Drain queries before worker restarts or deployments.
- Check query cancellation is not being triggered spuriously by tight timeouts.
- Restore the interrupt flag in wrapper code to keep cancellation semantics correct.
- Keep getInfo calls short-lived so the interruption window is minimal.
When it happens
Trigger: Calling getFlightInfo (e.g. from getFlightInfoForTableScan) while the executing thread is interrupted — typically query cancellation, worker shutdown, or a thread pool being torn down mid-RPC.
Common situations: User cancels the Presto query while the driver thread is inside getInfo(); Presto worker shutdown/restart during query execution; session idle timeouts interrupting blocked RPC threads.
Related errors
- ARROW_FLIGHT_METADATA_ERROR
- ARROW_FLIGHT_METADATA_ERROR
- ARROW_FLIGHT_INVALID_KEY_ERROR
- ARROW_FLIGHT_INVALID_CERT_ERROR
- ARROW_FLIGHT_CLIENT_ERROR
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/03e90c7e778dc9d0.
Report an issue: GitHub.