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

  1. Read the cause (ConfigurationException) chain in the log; it names the exact missing or invalid property/binding.
  2. Fix the catalog properties file: add all required config properties with valid values and correct key spelling.
  3. Verify the deployed connector jar/module versions are consistent (no mixed old/new ArrowModule bindings).
  4. 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

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


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/821a7b1a12509ec3. Report an issue: GitHub.