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
- Remove or correct the unknown property named in the message at the reported line of the router config file
- Check the RouterConfiguration class (and its parent classes) for the exact accepted property names
- 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
- Lint router-config.properties against RouterConfiguration's accepted property names in CI
- Never copy coordinator/worker properties into the router config
- After upgrading Presto, diff your router config against the new version's documented properties
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
- Unknown property at line %s:%s: %s
- (JsonMappingException cause message)
- Required configuration 'flight-shim.server' and 'flight-shim
- Could not read secret file " + secretFile
- app-secret not provided in " + secretFile
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/a546960283557752.
Report an issue: GitHub.