prestodb/presto · error

NOT_FOUND

NOT_FOUND

Error message

Configured serializer class not found

What it means

AccumuloTable.getSerializerInstance() reflectively loads and instantiates the serializerClassName configured for the table. If the class cannot be found or constructed (ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException), it throws NOT_FOUND. This is the metadata-side twin of the RecordSet factory failure and is hit by the Indexer and AccumuloPageSink.

Source

Thrown at presto-accumulo/src/main/java/com/facebook/presto/accumulo/metadata/AccumuloTable.java:180

    public boolean isIndexed()
    {
        return indexed;
    }

    @JsonIgnore
    public int getRowIdOrdinal()
    {
        return this.rowIdOrdinal;
    }

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

    @JsonIgnore
    public static String getFullTableName(String schema, String table)
    {
        return schema.equals("default") ? table : schema + '.' + table;
    }

    @JsonIgnore
    public static String getFullTableName(SchemaTableName tableName)
    {
        return getFullTableName(tableName.getSchemaName(), tableName.getTableName());
    }

    @JsonIgnore
    public SchemaTableName getSchemaTableName()
    {

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Deploy the JAR containing the serializer class to the presto-accumulo plugin directory on all nodes and restart
  2. Verify the serializer_class table property/metadata contains the correct fully-qualified class name
  3. Ensure the class is public, extends AccumuloRowSerializer, and has a public no-arg constructor
  4. If the class was renamed, recreate the table metadata (or update ZK metadata) with the new class name

Example fix

// before
throw new PrestoException(NOT_FOUND, "Configured serializer class not found", e); // serializerClassName = com.acme.OldRowSerializer (renamed)
// after
// update table metadata
serializerClassName = com.acme.NewRowSerializer; // class deployed to plugin dir, public no-arg ctor
Defensive patterns

Strategy: validation

Validate before calling

String cls = table.getSerializerClassName();
try {
    Class<?> c = Class.forName(cls);
    if (!AccumuloRowSerializer.class.isAssignableFrom(c)) {
        throw new IllegalStateException(cls + " is not an AccumuloRowSerializer");
    }
    c.getConstructor(); // must have public no-arg ctor
} catch (Exception e) {
    throw new IllegalStateException("Serializer unusable: " + cls, e);
}

Type guard

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

Try / catch

try {
    AccumuloTable t = metadata.getTable(name);
    t.getSerializerInstance();
} catch (PrestoException e) {
    if (e.getMessage().contains("Configured serializer class not found")) {
        // deploy JAR to plugin dir or fix serializer_class metadata, then retry
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling getSerializerInstance() on an AccumuloTable whose serializerClassName is missing from the classpath, is not an AccumuloRowSerializer, lacks a public no-arg constructor, or whose constructor throws.

Common situations: Custom serializer JAR not deployed to coordinator and worker plugin directories; table created with a misspelled or renamed serializer class; class relocated/renamed after a version upgrade so stored metadata now points at a nonexistent class.

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/5dd47225b29b17b0. Report an issue: GitHub.