{"record":{"id":"9c2ec580d9a148a1","repo":"apache/cassandra","slug":"currently-only-java-udfs-are-available-in-cassandr","errorCode":null,"errorMessage":"Currently only Java UDFs are available in Cassandra. For more information - CASSANDRA-18252 and CASSANDRA-17281","messagePattern":"Currently only Java UDFs are available in Cassandra\\. For more information - CASSANDRA-18252 and CASSANDRA-17281","errorType":"exception","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/functions/UDFunction.java","lineNumber":442,"sourceCode":"        catch (InvalidRequestException e)\n        {\n            throw e;\n        }\n        catch (Throwable t)\n        {\n            logger.debug(\"Invocation of user-defined function '{}' failed\", this, t);\n            if (t instanceof VirtualMachineError)\n                throw (VirtualMachineError) t;\n            throw FunctionExecutionException.create(this, t);\n        }\n    }\n\n    public static void assertUdfsEnabled(String language)\n    {\n        if (!DatabaseDescriptor.enableUserDefinedFunctions())\n            throw new InvalidRequestException(\"User-defined functions are disabled in cassandra.yaml - set user_defined_functions_enabled=true to enable\");\n        if (!\"java\".equalsIgnoreCase(language))\n            throw new InvalidRequestException(\"Currently only Java UDFs are available in Cassandra. For more information - CASSANDRA-18252 and CASSANDRA-17281\");\n    }\n\n    static void initializeThread()\n    {\n        // Get the TypeCodec stuff in Java Driver initialized.\n        // This is to get the classes loaded outside of the restricted sandbox's security context of a UDF.\n        TypeCodec.inet().format(InetAddress.getLoopbackAddress());\n        TypeCodec.ascii().format(\"\");\n    }\n\n    private static final class ThreadIdAndCpuTime extends CompletableFuture<Object>\n    {\n        long threadId;\n        long cpuTime;\n\n        ThreadIdAndCpuTime()\n        {\n            // Looks weird?","sourceCodeStart":424,"sourceCodeEnd":460,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/functions/UDFunction.java#L424-L460","documentation":"After confirming UDFs are enabled, assertUdfsEnabled verifies the UDF language is 'java'; since CASSANDRA-18252/CASSANDRA-17281 non-Java (e.g. JavaScript) UDFs were removed and any attempt to create or execute them is rejected with InvalidRequestException.","triggerScenarios":"CREATE FUNCTION ... LANGUAGE javascript (or any non-Java language), or executing a UDF persisted with a non-Java language (e.g. upgraded from an older Cassandra that allowed JavaScript UDFs).","commonSituations":"Upgrading a cluster from pre-4.1/5.0 versions where JavaScript UDFs existed; copying old CQL scripts that use LANGUAGE javascript; tooling that still emits non-Java language clauses.","solutions":["Rewrite the UDF in Java and use LANGUAGE java in CREATE FUNCTION","Drop and recreate legacy non-Java functions as Java UDFs","Remove stale references to JavaScript UDFs from schema/migration scripts"],"exampleFix":"// before\nCREATE FUNCTION f(x int) RETURNS NULL ON NULL INPUT RETURNS int LANGUAGE javascript AS 'return x+1;';\n// after\nCREATE FUNCTION f(x int) RETURNS NULL ON NULL INPUT RETURNS int LANGUAGE java AS 'return x + 1;';","handlingStrategy":"validation","validationCode":"if (!\"java\".equalsIgnoreCase(languageClause)) throw new IllegalArgumentException(\"Only LANGUAGE java is supported (CASSANDRA-18252/17281)\");","typeGuard":null,"tryCatchPattern":"try { session.execute(createFunctionCql); } catch (InvalidRequestException e) { if (e.getMessage().contains(\"only Java UDFs\")) { /* rewrite function in Java */ } throw e; }","preventionTips":["Always use LANGUAGE java in CREATE FUNCTION","Migrate legacy JavaScript UDFs to Java before upgrading","Grep schema migrations for 'LANGUAGE javascript' and remove them"],"tags":["udf","java","language","unsupported"],"backgroundTag":"unsupported-enum-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}