prestodb/presto · error · IllegalArgumentException

Unknown property at line %s:%s: %s

Error message

Unknown property at line %s:%s: %s

What it means

Thrown by the Presto router while parsing router-config.properties via Jackson. When the JSON/properties config contains a property name the RouterConfiguration class does not recognize, Jackson's UnrecognizedPropertyException is rethrown as an IllegalArgumentException with the file line/column and the offending property name. It is a fail-fast config validation so typos in router config are caught at startup.

Source

Thrown at presto-router/src/main/java/com/facebook/presto/router/RouterUtil.java:66

        }
        catch (IllegalArgumentException e) {
            handleConfigIllegalArgumentException(e);
            throw e;
        }

        return routerSpec;
    }

    private static void handleConfigIllegalArgumentException(IllegalArgumentException e)
    {
        Throwable cause = e.getCause();
        if (cause instanceof UnrecognizedPropertyException) {
            UnrecognizedPropertyException ex = (UnrecognizedPropertyException) cause;
            String message = format("Unknown property at line %s:%s: %s",
                    ex.getLocation().getLineNr(),
                    ex.getLocation().getColumnNr(),
                    ex.getPropertyName());
            throw new IllegalArgumentException(message, e);
        }
        if (cause instanceof JsonMappingException) {
            // remove the extra "through reference chain" message
            if (cause.getCause() != null) {
                cause = cause.getCause();
            }
            throw new IllegalArgumentException(cause.getMessage(), e);
        }
    }
}

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Remove or correct the unknown property named in the message at the reported line of the router config file
  2. Check the RouterConfiguration class (and its parent classes) for the exact accepted property names
  3. If a property was removed/renamed in your Presto version, migrate to the new name

Example fix

// before (router-config.properties)
http-server.http.portt=8080
// after
http-server.http.port=8080
Defensive patterns

Strategy: validation

Validate before calling

Set<String> allowed = Set.of("router.scheduler", "http-server.http.port");
for (String line : Files.readAllLines(configPath)) {
    String key = line.split("[=]", 2)[0].trim();
    if (!key.isEmpty() && !key.startsWith("#") && !allowed.contains(key))
        throw new IllegalArgumentException("Unknown router property: " + key);
}

Type guard

boolean isKnownRouterProperty(String key) {
    try {
        new RouterConfiguration().setProperty(key, "");
        return true;
    } catch (UnsupportedOperationException e) {
        return false;
    }
}

Try / catch

try {
    RouterConfig config = parseRouterConfig(configFile);
} catch (IllegalArgumentException e) {
    LOG.error("Bad router config: %s", e.getMessage());
    throw new ExitCodeException(1, e.getMessage());
}

Prevention

When it happens

Trigger: Calling parseRouterConfig on a config file containing a key that has no matching setter/field on the router configuration class (e.g. a misspelled 'http-server.http.port' or a property removed in a newer Presto version).

Common situations: Typo'd property names in router-config.properties; copying properties from coordinator/worker config into the router config; upgrading Presto and using deprecated/renamed router properties.

Related errors


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