prestodb/presto · error · IllegalArgumentException
Unknown property at line %s:%s: %s
Error message
Unknown property at line %s:%s: %s
What it means
FileSessionPropertyManager parses a session-properties JSON config file with Jackson. When the JSON contains a property name that is not recognized by the session property configuration class, Jackson raises UnrecognizedPropertyException, which is wrapped into an IllegalArgumentException with the file location (line:column) and the unknown property name. This fails fast on typos or stale config keys.
Source
Thrown at presto-file-session-property-manager/src/main/java/com/facebook/presto/session/file/FileSessionPropertyManager.java:65
{
requireNonNull(config, "config is null");
Path configurationFile = config.getConfigFile().toPath();
try {
sessionMatchSpecs = ImmutableList.copyOf(CODEC.fromJson(Files.readAllBytes(configurationFile)));
}
catch (IOException e) {
throw new UncheckedIOException(e);
}
catch (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);
}
throw e;
}
}
@Override
protected List<SessionMatchSpec> getSessionMatchSpecs()
{
return sessionMatchSpecs;
}
}View on GitHub (pinned to 55bb57d202)
Solutions
- Rename the unknown property in the config file to a valid session property name (check the line:column in the message)
- Check the valid property names for your Presto version's session property manager class
- If the property is legitimately new, upgrade Presto to a version that recognizes it
Example fix
// before (config JSON)
{"query_max-run-time": "100m"}
// after
{"query_max_run_time": "100m"} Defensive patterns
Strategy: validation
Validate before calling
// Validate config keys before loading
Set<String> valid = Set.of("query_max_run_time", "query_max_memory", ...);
for (String key : jsonConfig.keySet()) {
if (!valid.contains(key)) throw new IllegalArgumentException("Unknown property: " + key);
} Type guard
boolean isKnownProperty(String key) { return KNOWN_SESSION_PROPERTIES.contains(key); } Try / catch
try { manager = new FileSessionPropertyManager(configFile); }
catch (IllegalArgumentException e) {
log.error("Session property config error: " + e.getMessage()); // includes line:column and property
throw new ConfigValidationException(e);
} Prevention
- Validate config files against the current version's property list in CI
- Diff config files against upstream examples after every Presto upgrade
- Use snake_case exact property names — hyphens are not accepted
When it happens
Trigger: Loading a session property manager config file containing an unrecognized key, e.g. "query_max-run_time" instead of "query_max_run_time" or a property that no longer exists after an upgrade.
Common situations: Typos in property names in session.properties-style JSON; config copied from an older Presto version where the property was renamed or removed; copy-pasted properties from documentation of a different component.
Related errors
- (JsonMappingException cause message)
- Unknown property at line %s:%s: %s
- Unable to save snapshot "${controlChecksum}".
- Unable to restore snapshot "${snapshotJson}".
- Response does not contain a JSON value
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/04643bad6011144b.
Report an issue: GitHub.