{"record":{"id":"821a7b1a12509ec3","repo":"prestodb/presto","slug":"arrow-internal-error","errorCode":"ARROW_INTERNAL_ERROR","errorMessage":"The connector instance could not be created.","messagePattern":"The connector instance could not be created\\.","errorType":"error_code","errorClass":"ArrowException","httpStatus":null,"severity":"critical","filePath":"presto-base-arrow-flight/src/main/java/com/facebook/plugin/arrow/ArrowConnectorFactory.java","lineNumber":97,"sourceCode":"                        binder.bind(TypeManager.class).toInstance(context.getTypeManager());\n                        binder.bind(FunctionMetadataManager.class).toInstance(context.getFunctionMetadataManager());\n                        binder.bind(StandardFunctionResolution.class).toInstance(context.getStandardFunctionResolution());\n                        binder.bind(RowExpressionService.class).toInstance(context.getRowExpressionService());\n                        binder.bind(NodeManager.class).toInstance(context.getNodeManager());\n                    })\n                    .add(override(new ArrowModule(catalogName)).with(module))\n                    .addAll(extraModules)\n                    .build());\n\n            Injector injector = app\n                    .doNotInitializeLogging()\n                    .setRequiredConfigurationProperties(requiredConfig)\n                    .initialize();\n\n            return injector.getInstance(ArrowConnector.class);\n        }\n        catch (ConfigurationException ex) {\n            throw new ArrowException(ARROW_INTERNAL_ERROR, \"The connector instance could not be created.\", ex);\n        }\n        catch (Exception e) {\n            throwIfUnchecked(e);\n            throw new RuntimeException(e);\n        }\n    }\n}\n","sourceCodeStart":79,"sourceCodeEnd":105,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-base-arrow-flight/src/main/java/com/facebook/plugin/arrow/ArrowConnectorFactory.java#L79-L105","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":"# before (catalog properties)\narrow.flight.hostname=localhost\n# missing port -> Guice ConfigurationException\n# after\narrow.flight.hostname=localhost\narrow.flight.port=32010","handlingStrategy":"validation","validationCode":"// Validate required catalog properties before creating the connector\njava.util.Set<String> required = java.util.Set.of(\"arrow.flight.hostname\", \"arrow.flight.port\");\njava.util.Set<String> missing = new java.util.HashSet<>(required);\nmissing.removeAll(requiredConfig.keySet());\nif (!missing.isEmpty()) {\n    throw new IllegalArgumentException(\"Missing connector properties: \" + missing);\n}","typeGuard":null,"tryCatchPattern":"try {\n    Connector c = factory.create(catalogName, requiredConfig, context);\n} catch (ArrowException e) {\n    if (e.getErrorCode().getCode() == ARROW_INTERNAL_ERROR.getCode()) {\n        // log e.getCause() (ConfigurationException) and fix catalog properties\n    }\n    throw e;\n}","preventionTips":["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."],"tags":["presto","connector","guice","configuration"],"backgroundTag":"connector-configuration-error","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}