prestodb/presto · critical · PrestoException

CONFIGURATION_UNAVAILABLE

CONFIGURATION_UNAVAILABLE

Error message

Resource group configuration cannot be fetched from source.

What it means

checkMaxRefreshInterval throws PrestoException CONFIGURATION_UNAVAILABLE when the time since the last successful config refresh exceeds maxRefreshInterval, signaling callers that the cached configuration is stale and the source could not be reached. The message appends how long ago the config was loaded when a load happened before.

Source

Thrown at presto-resource-group-managers/src/main/java/com/facebook/presto/resourceGroups/reloading/ReloadingResourceGroupConfigurationManager.java:293

        while (parent.isPresent()) {
            current = parent.get();
            parent = current.getParent();
        }

        ResourceGroup rootResourceGroup = groups.get(current);
        checkState(rootResourceGroup != null, "%s is missing in the groups map for groupId %s", current, groupId);
        return rootResourceGroup;
    }

    private void checkMaxRefreshInterval()
    {
        if (System.nanoTime() - lastRefresh.get() > maxRefreshInterval.toMillis() * MILLISECONDS.toNanos(1)) {
            String message = "Resource group configuration cannot be fetched from source.";
            if (lastRefresh.get() != 0) {
                message += format(" Current resource group configuration is loaded %s ago", succinctNanos(System.nanoTime() - lastRefresh.get()).toString());
            }

            throw new PrestoException(CONFIGURATION_UNAVAILABLE, message);
        }
    }

    @Managed
    @Nested
    public CounterStat getRefreshFailures()
    {
        return refreshFailures;
    }
}

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Restore connectivity/availability of the configuration source and let the refresh succeed
  2. Increase maxRefreshInterval in the manager properties to tolerate longer source outages
  3. Investigate refresh failures via the exposed refreshFailures stat and reload logs

Example fix

// before
resource-group.config-manager=...
refresh-interval=1s max-refresh-interval=2s
// after
refresh-interval=30s max-refresh-interval=10m
Defensive patterns

Strategy: try-catch

Validate before calling

// Track last successful refresh yourself and warn before the threshold
long nanosSinceRefresh = System.nanoTime() - lastRefreshNanos;
if (nanosSinceRefresh > maxRefreshIntervalNanos * 0.8) log.warn("Resource group config nearly stale");

Try / catch

try { return manager.match(criteria); } catch (PrestoException e) {
    if (e.getErrorCode().getName().equals("CONFIGURATION_UNAVAILABLE")) {
        manager.load(); // force refresh, then retry once
        return manager.match(criteria);
    }
    throw e;
}

Prevention

When it happens

Trigger: getRootGroups, match, or getSelectors invoked more than maxRefreshInterval after the last successful load; the periodic refresh job failing (source unreachable, parse error) so lastRefresh is not updated.

Common situations: Config store/network outage while the coordinator keeps accepting queries; misconfigured refresh interval shorter than the reload period; source persistently failing so staleness grows past the threshold.

Related errors


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