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
- Deploy the serializer's jar to the plugin directory on all Presto nodes and restart.
- Ensure the serializer class has a public no-argument constructor (required by getConstructor().newInstance()).
- Confirm the class implements/extends AccumuloRowSerializer and matches the connector's API version.
- Check the serializerClassName stored in table metadata for typos or stale fully-qualified names after package renames; recreate the table metadata if stale.
- 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
- Always give custom serializers a public no-argument constructor.
- Verify the class implements AccumuloRowSerializer for your connector version.
- Deploy the jar cluster-wide before creating tables that reference it.
- Update table metadata if the serializer class is ever renamed or repackaged.
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.