{"record":{"id":"f856e9a8c19d8300","repo":"prestodb/presto","slug":"not-found-f856e9","errorCode":"NOT_FOUND","errorMessage":"Configured serializer class not found","messagePattern":"Configured serializer class not found","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-accumulo/src/main/java/com/facebook/presto/accumulo/model/AccumuloSplit.java","lineNumber":150,"sourceCode":"    {\n        return ranges.stream().map(WrappedRange::getRange).collect(Collectors.toList());\n    }\n\n    @JsonProperty\n    public List<AccumuloColumnConstraint> getConstraints()\n    {\n        return constraints;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    @JsonIgnore\n    public Class<? extends AccumuloRowSerializer> getSerializerClass()\n    {\n        try {\n            return (Class<? extends AccumuloRowSerializer>) Class.forName(serializerClassName);\n        }\n        catch (ClassNotFoundException e) {\n            throw new PrestoException(NOT_FOUND, \"Configured serializer class not found\", e);\n        }\n    }\n\n    @JsonProperty\n    public Optional<String> getScanAuthorizations()\n    {\n        return scanAuthorizations;\n    }\n\n    @Override\n    public NodeSelectionStrategy getNodeSelectionStrategy()\n    {\n        return NO_PREFERENCE;\n    }\n\n    public List<HostAddress> getAddresses()\n    {\n        return addresses;","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-accumulo/src/main/java/com/facebook/presto/accumulo/model/AccumuloSplit.java#L132-L168","documentation":"AccumuloSplit.getSerializerClass loads the row serializer class recorded in the split via Class.forName and casts it to AccumuloRowSerializer. If the class named by serializerClassName is not on the Presto classpath, a ClassNotFoundException is rethrown as a PrestoException with code NOT_FOUND. The split cannot be read without a working serializer.","triggerScenarios":"Reading a split (AccumuloRecordSet creation or assertSplit validation) whose serializerClassName refers to a class that is missing from the classpath — typically a custom AccumuloRowSerializer plugin jar not deployed to all Presto nodes, or a class that was renamed/moved in a connector upgrade.","commonSituations":"Custom serializer jar installed only on the coordinator or only on some workers; jar removed during a Presto upgrade while old splits still reference the old class; typo in the serializer class name stored in table metadata; package refactor (e.g., com.facebook... to com.yahoo... style renames) leaving old splits stale.","solutions":["Deploy the jar containing the serializer class to every Presto node (plugin directory) and restart Presto.","Verify the fully-qualified class name stored in the table/split metadata matches a class actually on the classpath.","If splits are stale after an upgrade, recreate the table (or rewrite metadata) so splits reference the current serializer class.","Run a Class.forName test on one worker (e.g., via a small plugin or jshell with the plugin classpath) to confirm loading works.","Ensure no classloader/shading conflicts: the class must be loadable from Presto's plugin classloader, not shaded away."],"exampleFix":"// before: table metadata references a class missing on workers\n\"serializerClass\": \"com.example.MyRowSerializer\"  // jar only on coordinator\n// after: deploy the jar to presto/plugin/accumulo/ on ALL nodes, or point at a built-in class\n\"serializerClass\": \"com.facebook.presto.accumulo.index.AccumuloRowSerializerFactory\"","handlingStrategy":"validation","validationCode":"// verify the serializer class is loadable before using splits\nString cls = split.getSerializerClassName();\ntry {\n    Class.forName(cls);\n} catch (ClassNotFoundException e) {\n    throw new IllegalStateException(\"Serializer jar missing from classpath: \" + cls);\n}","typeGuard":"boolean isValidSerializer(Object o) {\n    return o instanceof AccumuloRowSerializer;\n}","tryCatchPattern":"try {\n    Class<? extends AccumuloRowSerializer> c = split.getSerializerClass();\n} catch (PrestoException e) {\n    // NOT_FOUND: log serializerClassName, deploy jar to all nodes, rethrow\n    throw e;\n}","preventionTips":["Deploy custom serializer jars to the plugin directory on ALL Presto nodes, not just the coordinator.","Re-run deployment automation after every Presto upgrade.","Record and verify the fully-qualified serializer class name in table metadata.","Add a startup smoke test that Class.forName's the configured serializer."],"tags":["classpath","serialization","accumulo","not-found"],"backgroundTag":"class-not-found","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}