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
- Restore connectivity/availability of the configuration source and let the refresh succeed
- Increase maxRefreshInterval in the manager properties to tolerate longer source outages
- 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
- Set maxRefreshInterval well above the normal refresh interval to absorb transient outages
- Monitor the refreshFailures stat and alert on sustained failures
- Ensure the config source is highly available (replicated store) and the reload job retries with backoff
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
- ACCUMULO_TABLE_EXISTS
- Selector refers to nonexistent group: %s
- Selector specifies an invalid query type: %s
- Ambiguous configuration for %s. Matches %s and %s
- Unknown property at line %s:%s: %s
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/3dd01b3129913bba.
Report an issue: GitHub.