{"record":{"id":"99fb5ced2c811d2a","repo":"apache/cassandra","slug":"fatal-configuration-error-unable-to-start-server","errorCode":null,"errorMessage":"\nFatal configuration error; unable to start server.  See log for stacktrace.","messagePattern":"\nFatal configuration error; unable to start server\\.  See log for stacktrace\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"critical","filePath":"src/java/org/apache/cassandra/config/DatabaseDescriptor.java","lineNumber":1675,"sourceCode":"    }\n\n    public static void applySeedProvider()\n    {\n        // load the seeds for node contact points\n        if (conf.seed_provider == null)\n        {\n            throw new ConfigurationException(\"seeds configuration is missing; a minimum of one seed is required.\", false);\n        }\n        try\n        {\n            Class<? extends SeedProvider> seedProviderClass =\n                FBUtilities.classForNameWithoutInitialization(conf.seed_provider.class_name, \"seed provider\", SeedProvider.class);\n            seedProvider = (SeedProvider) seedProviderClass.getConstructor(Map.class).newInstance(conf.seed_provider.parameters);\n        }\n        // there are about 5 checked exceptions that could be thrown here.\n        catch (Exception e)\n        {\n            throw new ConfigurationException(e.getMessage() + \"\\nFatal configuration error; unable to start server.  See log for stacktrace.\", true);\n        }\n        if (seedProvider.getSeeds().size() == 0)\n            throw new ConfigurationException(\"The seed provider lists no seeds.\", false);\n    }\n\n    @VisibleForTesting\n    static void checkForLowestAcceptedTimeouts(Config conf)\n    {\n        if (conf.read_request_timeout.toMilliseconds() < LOWEST_ACCEPTED_TIMEOUT.toMilliseconds())\n        {\n            logInfo(\"read_request_timeout\", conf.read_request_timeout, LOWEST_ACCEPTED_TIMEOUT);\n            conf.read_request_timeout = new DurationSpec.LongMillisecondsBound(\"10ms\");\n        }\n\n        if (conf.range_request_timeout.toMilliseconds() < LOWEST_ACCEPTED_TIMEOUT.toMilliseconds())\n        {\n            logInfo(\"range_request_timeout\", conf.range_request_timeout, LOWEST_ACCEPTED_TIMEOUT);\n            conf.range_request_timeout = new DurationSpec.LongMillisecondsBound(\"10ms\");","sourceCodeStart":1657,"sourceCodeEnd":1693,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1657-L1693","documentation":"While instantiating the configured SeedProvider class, applySeedProvider() catches any exception from class loading or constructor invocation and rethrows a ConfigurationException whose message is '<cause message>\\nFatal configuration error; unable to start server.  See log for stacktrace.' — a startup-fatal wrapper indicating the seed provider could not be created.","triggerScenarios":"applySeedProvider() called with a seed_provider.class_name that cannot be loaded or constructed: misspelled FQCN, missing class (no such JAR), constructor not accepting Map, or constructor throwing (e.g. invalid parameters).","commonSituations":"Custom SeedProvider implementation not deployed on the node; typo in class_name; switching providers across Cassandra versions where constructor signatures changed; invalid seeds syntax causing provider-internal failure.","solutions":["Read the leading part of the message/log for the underlying cause (class not found vs constructor error)","Set class_name to org.apache.cassandra.locator.SimpleSeedProvider (or fix the custom provider's deployment)","Ensure any custom seed provider JAR is in lib/ on all nodes and its constructor accepts Map<String,String>","Fix parameters (e.g. seeds string format host:port, comma-separated) in cassandra.yaml"],"exampleFix":"// cassandra.yaml before\nseed_provider:\n  - class_name: org.apache.cassandra.locator.SimpleSeedProviderTypo\n    parameters:\n      - seeds: \"10.0.1.1\"\n// after\nseed_provider:\n  - class_name: org.apache.cassandra.locator.SimpleSeedProvider\n    parameters:\n      - seeds: \"10.0.1.1:7000\"","handlingStrategy":"try-catch","validationCode":"String cls = conf.seed_provider.class_name;\ntry {\n    Class<?> c = Class.forName(cls, false, DatabaseDescriptor.class.getClassLoader());\n    c.getConstructor(Map.class);\n} catch (Throwable t) { throw new IllegalStateException(\"Bad seed_provider class: \" + t); }","typeGuard":null,"tryCatchPattern":"try { DatabaseDescriptor.applySeedProvider(); } catch (ConfigurationException e) {\n    String cause = e.getMessage().split(\"\\\\n\")[0]; // underlying cause precedes the fatal-configuration suffix\n}","preventionTips":["Use built-in SimpleSeedProvider unless you truly need a custom one","Ensure custom provider JARs ship in lib/ and take a Map constructor","Quote and format seeds strings carefully (host:port, comma-separated)"],"tags":["cassandra","seeds","class-not-found"],"backgroundTag":"class-not-found","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"}