{"record":{"id":"d2204820bbd4d3be","repo":"apache/cassandra","slug":"function-option-should-be-passed-along-with-fu","errorCode":null,"errorMessage":"--function option should be passed along with --functions-in-keyspace option","messagePattern":"--function option should be passed along with --functions-in-keyspace option","errorType":"console","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/tools/nodetool/InvalidatePermissionsCache.java","lineNumber":155,"sourceCode":"            if (StringUtils.isNotEmpty(keyspace) && !allTables && StringUtils.isEmpty(table))\n                resourceNames.add(DataResource.keyspace(keyspace).getName());\n\n            // Roles Resources\n            if (allRoles)\n                resourceNames.add(RoleResource.root().getName());\n\n            if (StringUtils.isNotEmpty(role))\n                resourceNames.add(RoleResource.role(role).getName());\n\n            // Function Resources\n            if (allFunctions)\n                resourceNames.add(FunctionResource.root().getName());\n\n            if (StringUtils.isNotEmpty(function))\n                if (StringUtils.isNotEmpty(functionsInKeyspace))\n                    resourceNames.add(constructFunctionResource(functionsInKeyspace, function));\n                else\n                    throw new IllegalArgumentException(\"--function option should be passed along with --functions-in-keyspace option\");\n            else\n                if (StringUtils.isNotEmpty(functionsInKeyspace))\n                    resourceNames.add(FunctionResource.keyspace(functionsInKeyspace).getName());\n\n            // MBeans Resources\n            if (allMBeans)\n                resourceNames.add(JMXResource.root().getName());\n\n            if (StringUtils.isNotEmpty(mBean))\n                resourceNames.add(JMXResource.mbean(mBean).getName());\n\n            if (resourceNames.isEmpty())\n                throw new IllegalArgumentException(\"No resource options specified\");\n\n            for (String resourceName : resourceNames)\n                probe.invalidatePermissionsCache(roleName, resourceName);\n        }\n    }","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/tools/nodetool/InvalidatePermissionsCache.java#L137-L173","documentation":"When --function names a specific function, the command needs --functions-in-keyspace to locate it, because functions live inside a keyspace namespace. Missing it causes IllegalArgumentException in execute().","triggerScenarios":"Running `nodetool invalidatepermissionscache --function <fn>` without `--functions-in-keyspace <ks>`.","commonSituations":"Operators refresh function permissions after UDF/UDA changes but forget the keyspace flag; scripts migrate from keyspace-level to function-level options.","solutions":["Add --functions-in-keyspace: nodetool invalidatepermissionscache --function <fn> --functions-in-keyspace <ks>","If all functions in the keyspace are intended, omit --function and keep only --functions-in-keyspace","Check option pairing with nodetool help invalidatepermissionscache"],"exampleFix":"// before\nnodetool invalidatepermissionscache --function my_fn\n// after\nnodetool invalidatepermissionscache --function my_fn --functions-in-keyspace my_ks","handlingStrategy":"validation","validationCode":"if (args.includes('--function') && !args.includes('--functions-in-keyspace')) throw new Error('--function requires --functions-in-keyspace');","typeGuard":null,"tryCatchPattern":"try { runNodetool('invalidatepermissionscache', ...args); } catch (IllegalArgumentException e) { /* handle missing --functions-in-keyspace */ }","preventionTips":["Treat --function and --functions-in-keyspace as a single unit in tooling","Verify function existence in system_schema.functions before invalidating","Use --all-functions when refreshing all UDF permissions"],"tags":["cli","validation","functions"],"backgroundTag":"missing-required-argument","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"}