prestodb/presto · error · IllegalArgumentException

Query Prerequisites '%s' is already registered

Error message

Query Prerequisites '%s' is already registered

What it means

QueryPrerequisitesManager.addQueryPrerequisitesFactory was handed a factory whose name is already registered; prerequisites factories must be uniquely named and the duplicate registration is rejected.

Source

Thrown at presto-main-base/src/main/java/com/facebook/presto/dispatcher/QueryPrerequisitesManager.java:55

import static java.util.Objects.requireNonNull;

public class QueryPrerequisitesManager
        implements QueryPrerequisites
{
    private static final Logger log = Logger.get(QueryPrerequisitesManager.class);

    private static final Path QUERY_PREREQUISITES_CONFIG = Paths.get("etc/query-prerequisites.properties");
    private static final String QUERY_PREREQUISITES_PROPERTY_NAME = "query-prerequisites.factory";
    private final Map<String, QueryPrerequisitesFactory> queryPrerequisitesFactories = new ConcurrentHashMap<>();
    private final QueryPrerequisites defaultQueryPrerequisites = new DefaultQueryPrerequisites();
    private final AtomicReference<QueryPrerequisites> queryPrerequisites = new AtomicReference<>(defaultQueryPrerequisites);

    public void addQueryPrerequisitesFactory(QueryPrerequisitesFactory queryPrerequisitesFactory)
    {
        requireNonNull(queryPrerequisitesFactory, "queryPrerequisitesFactory is null");

        if (queryPrerequisitesFactories.putIfAbsent(queryPrerequisitesFactory.getName(), queryPrerequisitesFactory) != null) {
            throw new IllegalArgumentException(format("Query Prerequisites '%s' is already registered", queryPrerequisitesFactory.getName()));
        }
    }

    public void loadQueryPrerequisites()
            throws Exception
    {
        if (Files.exists(QUERY_PREREQUISITES_CONFIG)) {
            Map<String, String> properties = new HashMap<>(loadProperties(QUERY_PREREQUISITES_CONFIG.toFile()));

            String factoryName = properties.remove(QUERY_PREREQUISITES_PROPERTY_NAME);
            checkArgument(!isNullOrEmpty(factoryName),
                    "Query Prerequisites configuration %s does not contain %s", QUERY_PREREQUISITES_CONFIG.toAbsolutePath().toFile(), QUERY_PREREQUISITES_PROPERTY_NAME);

            log.info("-- Loading query prerequisites factory --");

            QueryPrerequisitesFactory queryPrerequisitesFactory = queryPrerequisitesFactories.get(factoryName);
            checkState(queryPrerequisitesFactory != null, "Query prerequisites factory %s is not registered", factoryName);

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Use a unique factory name
  2. Remove the duplicated plugin providing the same prerequisites factory
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/dispatcher/QueryPrerequisitesManager.java:55 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/523b5c5517bafbc1. Report an issue: GitHub.