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

  1. Rename the unknown property in the config file to a valid session property name (check the line:column in the message)
  2. Check the valid property names for your Presto version's session property manager class
  3. 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

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


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