prestodb/presto · error · IllegalArgumentException

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

Error message

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

What it means

FileResourceGroupConfigurationManager catches Jackson's UnrecognizedPropertyException while deserializing resource-groups.json and rethrows it as IllegalArgumentException with line/column and the offending property name, so typos in JSON keys fail loudly instead of being silently ignored.

Source

Thrown at presto-resource-group-managers/src/main/java/com/facebook/presto/resourceGroups/FileResourceGroupConfigurationManager.java:73

        super(memoryPoolManager);
        requireNonNull(config, "config is null");

        ManagerSpec managerSpec;
        try {
            managerSpec = CODEC.fromJson(Files.readAllBytes(Paths.get(config.getConfigFile())));
        }
        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;
        }

        this.rootGroups = managerSpec.getRootGroups();
        this.cpuQuotaPeriod = managerSpec.getCpuQuotaPeriod();
        validateRootGroups(managerSpec);
        this.selectors = buildSelectors(managerSpec);
    }

    @Override

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Fix or remove the property named in the error at the reported line/column
  2. Check the exact property names supported by ResourceGroupSpec/SelectorSpec for your Presto version
  3. Validate the JSON against the current schema before deploying

Example fix

// before (resource-groups.json)
"maxQueued": 100
// after
"maxQueuedQueries": 100
Defensive patterns

Strategy: validation

Validate before calling

// Validate JSON keys before loading
JsonNode root = mapper.readTree(configJson);
Set<String> allowed = Set.of("rootGroups", "selectors", "subgroups", "maxQueuedQueries", "softMemoryLimit", "hardConcurrencyLimit", "maxRunning", "schedulingPolicy", "schedulingWeight", "jmxExport", "workersPerQueryLimit");
root.fieldNames().forEachRemaining(f -> { if (!allowed.contains(f)) throw new IllegalArgumentException("Unknown property: " + f); });

Try / catch

try { new FileResourceGroupConfigurationManager(...); } catch (IllegalArgumentException e) { log.error("Bad resource group config: " + e.getMessage()); }

Prevention

When it happens

Trigger: resource-groups.json (or selectors file) contains a property not defined on the target spec class, e.g. 'maxQueued' instead of 'maxQueuedQueries'; config loaded at manager construction.

Common situations: Typos in JSON keys; using properties from a different Presto version or a different plugin's schema; copy-pasting config from documentation of an incompatible release.

Related errors


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