{"record":{"id":"2e84111a20468a05","repo":"prestodb/presto","slug":"procedures-already-registered-for-connector","errorCode":null,"errorMessage":"Procedures already registered for connector: ","messagePattern":"Procedures already registered for connector: ","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/testing/TestProcedureRegistry.java","lineNumber":48,"sourceCode":"import static com.facebook.presto.spi.StandardErrorCode.PROCEDURE_NOT_FOUND;\nimport static java.util.Objects.requireNonNull;\n\npublic class TestProcedureRegistry\n        implements ProcedureRegistry\n{\n    private final Map<ConnectorId, Map<SchemaTableName, BaseProcedure<?>>> connectorProcedures = new ConcurrentHashMap<>();\n\n    @Override\n    public void addProcedures(ConnectorId connectorId, Collection<BaseProcedure<?>> procedures)\n    {\n        requireNonNull(connectorId, \"connectorId is null\");\n        requireNonNull(procedures, \"procedures is null\");\n\n        Map<SchemaTableName, BaseProcedure<?>> proceduresByName = procedures.stream().collect(Collectors.toMap(\n                procedure -> new SchemaTableName(procedure.getSchema(), procedure.getName()),\n                Function.identity()));\n        if (connectorProcedures.putIfAbsent(connectorId, proceduresByName) != null) {\n            throw new IllegalStateException(\"Procedures already registered for connector: \" + connectorId);\n        }\n    }\n\n    @Override\n    public void removeProcedures(ConnectorId connectorId)\n    {\n        connectorProcedures.remove(connectorId);\n    }\n\n    @Override\n    public BaseProcedure<?> resolve(ConnectorId connectorId, SchemaTableName name)\n    {\n        Map<SchemaTableName, BaseProcedure<?>> procedures = connectorProcedures.get(connectorId);\n        if (procedures != null) {\n            BaseProcedure<?> procedure = procedures.get(name);\n            if (procedure != null) {\n                return procedure;\n            }","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/testing/TestProcedureRegistry.java#L30-L66","documentation":"Testing-only registry guard: TestProcedureRegistry.addProcedures detected that the connector already has procedures registered. Real deployments resolve procedures per-connector transactionally; this in-memory test registry simply forbids double registration.","triggerScenarios":"Thrown at presto-main-base/src/main/java/com/facebook/presto/testing/TestProcedureRegistry.java:48 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Call removeProcedures(connectorId) before re-registering in tests","Register procedures for a connector only once per test setup","Use a fresh TestProcedureRegistry instance per test"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}