prestodb/presto · error · PrestoException

NOT_FOUND

NOT_FOUND

Error message

Configured serializer class not found

What it means

AccumuloTableHandle.getSerializerInstance reflectively instantiates the configured serializer class (Class.forName + getConstructor().newInstance) and casts it to AccumuloRowSerializer. Any failure — class not found, no no-arg constructor, instantiation or cast failure — is rethrown as a PrestoException with code NOT_FOUND. Split generation cannot proceed without a serializer instance.

Source

Thrown at presto-accumulo/src/main/java/com/facebook/presto/accumulo/model/AccumuloTableHandle.java:100

    public String getSchema()
    {
        return schema;
    }

    @JsonProperty
    public String getSerializerClassName()
    {
        return serializerClassName;
    }

    @JsonIgnore
    public AccumuloRowSerializer getSerializerInstance()
    {
        try {
            return (AccumuloRowSerializer) Class.forName(serializerClassName).getConstructor().newInstance();
        }
        catch (Exception e) {
            throw new PrestoException(NOT_FOUND, "Configured serializer class not found", e);
        }
    }

    @JsonProperty
    public String getTable()
    {
        return table;
    }

    @JsonProperty
    public boolean isExternal()
    {
        return external;
    }

    public SchemaTableName toSchemaTableName()
    {
        return new SchemaTableName(schema, table);

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Deploy the serializer's jar to the plugin directory on all Presto nodes and restart.
  2. Ensure the serializer class has a public no-argument constructor (required by getConstructor().newInstance()).
  3. Confirm the class implements/extends AccumuloRowSerializer and matches the connector's API version.
  4. Check the serializerClassName stored in table metadata for typos or stale fully-qualified names after package renames; recreate the table metadata if stale.
  5. Test instantiation of the class outside Presto to catch constructor-thrown exceptions.

Example fix

// before: serializer without a no-arg constructor
public class MySerializer implements AccumuloRowSerializer {
    public MySerializer(Config cfg) { ... }
}
// after: add a public no-arg constructor (or a default one)
public class MySerializer implements AccumuloRowSerializer {
    public MySerializer() { }
}
Defensive patterns

Strategy: validation

Validate before calling

// verify the class instantiates with a public no-arg ctor before planning
try {
    Object o = Class.forName(serializerClassName).getConstructor().newInstance();
    if (!(o instanceof AccumuloRowSerializer)) throw new IllegalStateException("Not an AccumuloRowSerializer");
} catch (ReflectiveOperationException e) {
    throw new IllegalStateException("Bad serializer class: " + serializerClassName, e);
}

Type guard

boolean isInstantiableSerializer(String name) {
    try {
        return AccumuloRowSerializer.class.isAssignableFrom(Class.forName(name));
    } catch (ClassNotFoundException e) { return false; }
}

Try / catch

try {
    AccumuloRowSerializer s = tableHandle.getSerializerInstance();
} catch (PrestoException e) {
    // NOT_FOUND: check jar deployment + no-arg constructor, rethrow
    throw e;
}

Prevention

When it happens

Trigger: Calling tabletSplits (query planning / split generation) when the table handle's serializerClassName is not on the classpath, lacks a public no-arg constructor, its constructor throws, or it does not implement AccumuloRowSerializer (ClassCastException).

Common situations: Custom serializer plugin jar not deployed to the node doing planning; serializer class refactored/renamed after the table was created; serializer written without a public no-arg constructor; serializer class present but not implementing AccumuloRowSerializer after an API change.

Understand the failure class

Background: NOT_FOUND error code: why tRPC, Harbor, Nacos and other libraries return 404 "not found" errors for resources that may still exist — this error's family across 11 libraries.

Related errors


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