{"record":{"id":"185cc0be092d3fcd","repo":"apache/cassandra","slug":"value-of-name-size-parameter-has-to-be-at-least-s","errorCode":null,"errorMessage":"Value of name_size parameter has to be at least %s.","messagePattern":"Value of name_size parameter has to be at least (.+?)\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/guardrails/UUIDRoleNameGenerator.java","lineNumber":185,"sourceCode":"\n        if (sizeObject instanceof String)\n        {\n            try\n            {\n                size = Integer.parseInt((String) sizeObject);\n            }\n            catch (Throwable t)\n            {\n                throw new IllegalArgumentException(\"Value '\" + sizeObject + \"' can't be converted to integer.\");\n            }\n        }\n        else if (sizeObject instanceof Number)\n            size = ((Number) sizeObject).intValue();\n        else\n            throw new IllegalArgumentException(\"Unsupported object passed to resolve \" + NAME_SIZE + \": \" + sizeObject.getClass().getName());\n\n        if (size < minimumNameSize)\n            throw new IllegalArgumentException(\"Value of \" + NAME_SIZE + \" parameter has to be at least \" + minimumNameSize + '.');\n\n        if (size > MAXIMUM_NAME_SIZE)\n            throw new IllegalArgumentException(\"Generator generates names of maximum length \" + MAXIMUM_NAME_SIZE + \". \" +\n                                               \"You want to generate with length \" + size + '.');\n\n        return size;\n    }\n}\n","sourceCodeStart":167,"sourceCodeEnd":194,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/guardrails/UUIDRoleNameGenerator.java#L167-L194","documentation":"Thrown by UUIDRoleNameGenerator.getSize() when the requested name_size is less than the generator-configured minimumNameSize. The requested size parsed fine but is below the configured lower bound for generated names.","triggerScenarios":"Calling generate(options) with name_size smaller than the 'minimum_name_size' the generator was configured with (e.g. generator minimum 8, request name_size=4).","commonSituations":"Callers unaware of the generator's configured minimum; configs where the caller-supplied name_size was tuned for a different generator instance.","solutions":["Raise name_size to at least the configured minimumNameSize","Lower the generator's minimum_name_size config option if shorter names are needed (within validateParameters bounds)","Catch IllegalArgumentException and retry with a size >= minimumNameSize"],"exampleFix":"// before\noptions.put(\"name_size\", \"4\"); // generator minimum is 8\n// after\noptions.put(\"name_size\", \"8\");","handlingStrategy":"validation","validationCode":"int requested = Integer.parseInt((String) options.get(\"name_size\"));\nif (requested < generatorMinimumNameSize)\n    options.put(\"name_size\", String.valueOf(generatorMinimumNameSize));","typeGuard":"boolean withinMinimum(Object v, int minimumNameSize) {\n    int n = (v instanceof Number) ? ((Number) v).intValue() : Integer.parseInt((String) v);\n    return n >= minimumNameSize;\n}","tryCatchPattern":"try {\n    generator.generate(options);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"has to be at least\")) {\n        // retry with the minimum size stated in the message\n    } else throw e;\n}","preventionTips":["Read the generator's configured minimum_name_size before requesting names","Clamp requested sizes into [minimumNameSize, 36]","Share the size bounds between config and callers"],"tags":["guardrails","range","options","configuration"],"backgroundTag":"value-out-of-range","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T21:17:11.552Z"}