prestodb/presto · error · IllegalStateException

Procedures already registered for connector:

Error message

Procedures already registered for connector: 

What it means

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.

Source

Thrown at presto-main-base/src/main/java/com/facebook/presto/testing/TestProcedureRegistry.java:48

import static com.facebook.presto.spi.StandardErrorCode.PROCEDURE_NOT_FOUND;
import static java.util.Objects.requireNonNull;

public class TestProcedureRegistry
        implements ProcedureRegistry
{
    private final Map<ConnectorId, Map<SchemaTableName, BaseProcedure<?>>> connectorProcedures = new ConcurrentHashMap<>();

    @Override
    public void addProcedures(ConnectorId connectorId, Collection<BaseProcedure<?>> procedures)
    {
        requireNonNull(connectorId, "connectorId is null");
        requireNonNull(procedures, "procedures is null");

        Map<SchemaTableName, BaseProcedure<?>> proceduresByName = procedures.stream().collect(Collectors.toMap(
                procedure -> new SchemaTableName(procedure.getSchema(), procedure.getName()),
                Function.identity()));
        if (connectorProcedures.putIfAbsent(connectorId, proceduresByName) != null) {
            throw new IllegalStateException("Procedures already registered for connector: " + connectorId);
        }
    }

    @Override
    public void removeProcedures(ConnectorId connectorId)
    {
        connectorProcedures.remove(connectorId);
    }

    @Override
    public BaseProcedure<?> resolve(ConnectorId connectorId, SchemaTableName name)
    {
        Map<SchemaTableName, BaseProcedure<?>> procedures = connectorProcedures.get(connectorId);
        if (procedures != null) {
            BaseProcedure<?> procedure = procedures.get(name);
            if (procedure != null) {
                return procedure;
            }

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Call removeProcedures(connectorId) before re-registering in tests
  2. Register procedures for a connector only once per test setup
  3. Use a fresh TestProcedureRegistry instance per test
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/testing/TestProcedureRegistry.java:48 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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