prestodb/presto · critical · UnsupportedOperationException

Unknown cluster Ttl provider manager

Error message

Unknown cluster Ttl provider manager 

What it means

ClusterTtlProviderManagerModule.setup throws UnsupportedOperationException when the configured ttl-provider-manager type (config.getClusterTtlProviderManagerType()) matches none of the supported enum cases (currently only CONFIDENCE, plus a Throwing default binding path). This is a startup-time configuration validation error, not a runtime failure.

Source

Thrown at presto-main-base/src/main/java/com/facebook/presto/ttl/clusterttlprovidermanagers/ClusterTtlProviderManagerModule.java:35

import com.google.inject.Binder;
import com.google.inject.Scopes;

public class ClusterTtlProviderManagerModule
        extends AbstractConfigurationAwareModule
{
    @Override
    protected void setup(Binder binder)
    {
        ClusterTtlProviderManagerConfig config = buildConfigObject(ClusterTtlProviderManagerConfig.class);
        switch (config.getClusterTtlProviderManagerType()) {
            case THROWING:
                binder.bind(ClusterTtlProviderManager.class).to(ThrowingClusterTtlProviderManager.class).in(Scopes.SINGLETON);
                break;
            case CONFIDENCE:
                binder.bind(ClusterTtlProviderManager.class).to(ConfidenceBasedClusterTtlProviderManager.class).in(Scopes.SINGLETON);
                break;
            default:
                throw new UnsupportedOperationException("Unknown cluster Ttl provider manager " + config.getClusterTtlProviderManagerType());
        }
    }
}

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Set cluster-ttl-provider-manager-type to a supported value, e.g. CONFIDENCE, in the coordinator config.
  2. Check the ClusterTtlProviderManagerType enum in your Presto version for valid values.
  3. Remove the stale/unknown property line if TTL provider management is not needed.
  4. Align config with the Presto version in use (property may exist only in newer/older releases).

Example fix

// before (etc/config.properties)
cluster-ttl-provider-manager-type=custom-manager

// after
cluster-ttl-provider-manager-type=CONFIDENCE
Defensive patterns

Strategy: validation

Validate before calling

// Validate config before boot
ClusterTtlProviderManagerType type = config.getClusterTtlProviderManagerType();
if (type == null || !EnumSet.allOf(ClusterTtlProviderManagerType.class).contains(type)) {
    throw new IllegalArgumentException("Unsupported cluster-ttl-provider-manager-type: " + type);
}

Type guard

boolean isValidManagerType(String value) {
    try {
        ClusterTtlProviderManagerType.valueOf(value.trim().toUpperCase());
        return true;
    } catch (IllegalArgumentException e) {
        return false;
    }
}

Try / catch

try {
    injector = Guice.createInjector(new ClusterTtlProviderManagerModule(config));
} catch (UnsupportedOperationException e) {
    // log the offending config value and fail fast with a clear message
    LOG.error(e.getMessage() + " — set cluster-ttl-provider-manager-type to a valid enum value");
    throw e;
}

Prevention

When it happens

Trigger: Server/plugin boot with a cluster-ttl-provider-manager-type value in the configuration that is not a member of the ClusterTtlProviderManagerType enum, causing the switch's default branch to execute.

Common situations: Typo in config property (e.g. 'confidnce' or 'throwing' when unsupported); config copied from a fork/newer Presto version with extra manager types; property set programmatically to an invalid value in tests.

Related errors


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