prestodb/presto · critical · ArrowException
ARROW_INTERNAL_ERROR
ARROW_INTERNAL_ERROR
Error message
The connector instance could not be created.
What it means
The Arrow Flight connector factory builds a Guice injector from the catalog's configuration properties and instantiates ArrowConnector. If Guice reports a ConfigurationException — meaning the injector could not be created or dependencies could not be satisfied (missing/invalid config keys, duplicate bindings, failed module setup) — the factory wraps it in ArrowException with code ARROW_INTERNAL_ERROR. This happens during catalog initialization, so the entire connector fails to load.
Source
Thrown at presto-base-arrow-flight/src/main/java/com/facebook/plugin/arrow/ArrowConnectorFactory.java:97
binder.bind(TypeManager.class).toInstance(context.getTypeManager());
binder.bind(FunctionMetadataManager.class).toInstance(context.getFunctionMetadataManager());
binder.bind(StandardFunctionResolution.class).toInstance(context.getStandardFunctionResolution());
binder.bind(RowExpressionService.class).toInstance(context.getRowExpressionService());
binder.bind(NodeManager.class).toInstance(context.getNodeManager());
})
.add(override(new ArrowModule(catalogName)).with(module))
.addAll(extraModules)
.build());
Injector injector = app
.doNotInitializeLogging()
.setRequiredConfigurationProperties(requiredConfig)
.initialize();
return injector.getInstance(ArrowConnector.class);
}
catch (ConfigurationException ex) {
throw new ArrowException(ARROW_INTERNAL_ERROR, "The connector instance could not be created.", ex);
}
catch (Exception e) {
throwIfUnchecked(e);
throw new RuntimeException(e);
}
}
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Read the cause (ConfigurationException) chain in the log; it names the exact missing or invalid property/binding.
- Fix the catalog properties file: add all required config properties with valid values and correct key spelling.
- Verify the deployed connector jar/module versions are consistent (no mixed old/new ArrowModule bindings).
- Validate the config locally by bootstrapping the connector with the same properties before deploying.
Example fix
# before (catalog properties) arrow.flight.hostname=localhost # missing port -> Guice ConfigurationException # after arrow.flight.hostname=localhost arrow.flight.port=32010
Defensive patterns
Strategy: validation
Validate before calling
// Validate required catalog properties before creating the connector
java.util.Set<String> required = java.util.Set.of("arrow.flight.hostname", "arrow.flight.port");
java.util.Set<String> missing = new java.util.HashSet<>(required);
missing.removeAll(requiredConfig.keySet());
if (!missing.isEmpty()) {
throw new IllegalArgumentException("Missing connector properties: " + missing);
} Try / catch
try {
Connector c = factory.create(catalogName, requiredConfig, context);
} catch (ArrowException e) {
if (e.getErrorCode().getCode() == ARROW_INTERNAL_ERROR.getCode()) {
// log e.getCause() (ConfigurationException) and fix catalog properties
}
throw e;
} Prevention
- Keep a checklist of required catalog properties and validate them at deploy time.
- Never partially upgrade connector jars; keep module versions aligned.
- Diff config keys against the connector's documented @Config fields after upgrades.
- Dry-run catalog bootstrap in CI with the production properties file.
When it happens
Trigger: Calling ArrowConnectorFactory.create(catalogName, requiredConfig, context) when requiredConfig is missing mandatory properties, contains invalid values, or the ArrowModule bindings fail to satisfy a dependency at injector.initialize() or getInstance(ArrowConnector.class).
Common situations: Catalog properties file missing required keys (e.g. flight host/port or auth settings); typo in a property name so a @Config-annotated field never gets bound; incompatible connector module versions after an upgrade leaving unresolved bindings.
Related errors
- INVALID_SESSION_PROPERTY
- Unknown cluster Ttl provider manager
- Unknown Node Ttl Fetcher Manager:
- RuntimeException(e)
- ACCUMULO_TABLE_EXISTS
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/821a7b1a12509ec3.
Report an issue: GitHub.