{"record":{"id":"66af1cc766476236","repo":"apache/cassandra","slug":"s-does-not-support-s","errorCode":null,"errorMessage":"%s does not support %s","messagePattern":"(.+?) does not support (.+?)","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/auth/AuthConfig.java","lineNumber":166,"sourceCode":"        // in case these rely on each other.\n\n        authenticator.validateConfiguration();\n        authorizer.validateConfiguration();\n        roleManager.validateConfiguration();\n        defaultRoleInitializer.validateConfiguration();\n        networkAuthorizer.validateConfiguration();\n        cidrAuthorizer.validateConfiguration();\n        DatabaseDescriptor.getInternodeAuthenticator().validateConfiguration();\n    }\n\n    @VisibleForTesting\n    static void validateDefaultRoleInitializerSupportsRoleManager(ParameterizedClass configuredInitializer,\n                                                                  IDefaultRoleInitializer defaultRoleInitializer,\n                                                                  IRoleManager roleManager)\n    {\n        boolean explicitlyConfigured = configuredInitializer != null && configuredInitializer.class_name != null;\n        if (explicitlyConfigured && !defaultRoleInitializer.supportsRoleManager(roleManager))\n            throw new ConfigurationException(defaultRoleInitializer.getClass().getName() + \" does not support \" + roleManager.getClass().getName(), false);\n    }\n\n    private static <T> T authInstantiate(ParameterizedClass authCls, Class<T> expectedType, Class<? extends T> defaultCls)\n    {\n        if (authCls != null && authCls.class_name != null)\n        {\n            String authPackage = AuthConfig.class.getPackage().getName();\n            return ParameterizedClass.newInstance(authCls, List.of(\"\", authPackage), expectedType);\n        }\n\n        if (defaultCls == null)\n            return null;\n\n        // for now, this has to stay and can not be replaced by ParameterizedClass.newInstance as above\n        // due to that failing for simulator dtests. See CASSANDRA-20450 for more information.\n        try\n        {\n            return defaultCls.newInstance();","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/auth/AuthConfig.java#L148-L184","documentation":"validateDefaultRoleInitializerSupportsRoleManager throws ConfigurationException when a default role initializer is explicitly configured in cassandra.yaml but that initializer's supportsRoleManager(roleManager) returns false for the configured IRoleManager. The initializer and role manager must be a compatible pair since the initializer bootstraps the first role through the role manager.","triggerScenarios":"Setting default_role_initializer to an explicitly configured implementation that does not support the configured role_manager (e.g. a custom initializer incompatible with CassandraRoleManager or an external role manager), then starting the node.","commonSituations":"Custom deployments pairing third-party role managers with the default initializer; upgrades where a new role manager no longer matches a configured initializer.","solutions":["Choose a default_role_initializer implementation whose supportsRoleManager() returns true for the configured role_manager.","Remove the explicit default_role_initializer setting to use the default pairing.","Alternatively switch role_manager to one supported by the configured initializer, then restart."],"exampleFix":"// before (cassandra.yaml)\ndefault_role_initializer: MyRoleInitializer\nrole_manager: ExternallyManagedRoleManager\n// after\nrole_manager: ExternallyManagedRoleManager\ndefault_role_initializer: CompatibleExternalInitializer\n","handlingStrategy":"validation","validationCode":"// before startup, confirm the configured pair is supported\nif (conf.default_role_initializer != null && !defaultInitializer.supportsRoleManager(roleManager))\n    throw new IllegalArgumentException(\"default_role_initializer incompatible with role_manager\");","typeGuard":null,"tryCatchPattern":"try { node.start(); } catch (ConfigurationException e) { log.fatal(\"initializer/role_manager mismatch: \" + e.getMessage()); }","preventionTips":["Only set default_role_initializer explicitly when you know it supports your role_manager.","Check supportsRoleManager() of your initializer for each role manager you configure.","Prefer the default initializer unless you have a concrete need."],"tags":["auth","configuration","startup","role-manager"],"backgroundTag":"conflicting-config-options","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}