prestodb/presto · critical · UnsupportedOperationException
Unknown Node Ttl Fetcher Manager:
Error message
Unknown Node Ttl Fetcher Manager:
What it means
NodeTtlFetcherManagerModule.setup throws UnsupportedOperationException when config.getNodeTtlFetcherManagerType() does not match any supported enum case (e.g. CONFIDENCE), i.e. the node-ttl-fetcher-manager-type configuration property holds an unrecognized value. This fails Guice dependency injection at server startup.
Source
Thrown at presto-main-base/src/main/java/com/facebook/presto/ttl/nodettlfetchermanagers/NodeTtlFetcherManagerModule.java:39
import static org.weakref.jmx.guice.ExportBinder.newExporter;
public class NodeTtlFetcherManagerModule
extends AbstractConfigurationAwareModule
{
@Override
protected void setup(Binder binder)
{
NodeTtlFetcherManagerConfig config = buildConfigObject(NodeTtlFetcherManagerConfig.class);
configBinder(binder).bindConfig(NodeTtlFetcherManagerConfig.class);
switch (config.getNodeTtlFetcherManagerType()) {
case THROWING:
binder.bind(NodeTtlFetcherManager.class).to(ThrowingNodeTtlFetcherManager.class).in(Scopes.SINGLETON);
break;
case CONFIDENCE:
binder.bind(NodeTtlFetcherManager.class).to(ConfidenceBasedNodeTtlFetcherManager.class).in(Scopes.SINGLETON);
break;
default:
throw new UnsupportedOperationException("Unknown Node Ttl Fetcher Manager: " + config.getNodeTtlFetcherManagerType());
}
newExporter(binder).export(NodeTtlFetcherManager.class).withGeneratedName();
}
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Set node-ttl-fetcher-manager-type to a valid enum value such as CONFIDENCE.
- Inspect the NodeTtlFetcherManagerType enum of the deployed Presto version for exact accepted values.
- Remove the invalid property line to fall back to defaults if TTL fetcher management is unused.
- Fix casing/spelling to match the enum constant exactly.
Example fix
// before (etc/config.properties) node-ttl-fetcher-manager-type=confidence // after node-ttl-fetcher-manager-type=CONFIDENCE
Defensive patterns
Strategy: validation
Validate before calling
// Validate node TTL fetcher manager config before boot
NodeTtlFetcherManagerType type = config.getNodeTtlFetcherManagerType();
if (type == null || !EnumSet.allOf(NodeTtlFetcherManagerType.class).contains(type)) {
throw new IllegalArgumentException("Unsupported node-ttl-fetcher-manager-type: " + type);
} Type guard
boolean isValidFetcherManagerType(String value) {
try {
NodeTtlFetcherManagerType.valueOf(value.trim().toUpperCase());
return true;
} catch (IllegalArgumentException e) {
return false;
}
} Try / catch
try {
injector = Guice.createInjector(new NodeTtlFetcherManagerModule(config));
} catch (UnsupportedOperationException e) {
LOG.error(e.getMessage() + " — set node-ttl-fetcher-manager-type to a valid enum value");
throw e;
} Prevention
- Use exact enum constant names (e.g. CONFIDENCE) in configuration files.
- Version-check config templates against the deployed Presto release.
- Add config linting to catch unknown enum-valued properties at deploy time.
- Remove unused ttl config properties instead of guessing values.
When it happens
Trigger: Boot with node-ttl-fetcher-manager-type set to a value outside the NodeTtlFetcherManagerType enum, hitting the switch default branch.
Common situations: Typo in the config value; config file copied from a different Presto version or fork supporting other manager types; case mismatch (enum values are uppercase); leftover property from an experimental build.
Related errors
- Unknown cluster Ttl provider manager
- ARROW_INTERNAL_ERROR
- NODE_SELECTION_NOT_SUPPORTED
- RuntimeException(e)
- ACCUMULO_TABLE_EXISTS
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/f5a81039ce01171c.
Report an issue: GitHub.