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

  1. Set node-ttl-fetcher-manager-type to a valid enum value such as CONFIDENCE.
  2. Inspect the NodeTtlFetcherManagerType enum of the deployed Presto version for exact accepted values.
  3. Remove the invalid property line to fall back to defaults if TTL fetcher management is unused.
  4. 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

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


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