apache/cassandra · critical · ConfigurationException
seeds configuration is missing; a minimum of one seed is…
Error message
seeds configuration is missing; a minimum of one seed is required.
What it means
applySeedProvider() requires a seed_provider section in cassandra.yaml; seeds are the contact points a new node uses to join the cluster. If seed_provider is entirely absent (null), startup fails immediately with this ConfigurationException because at least one seed is mandatory.
Solutions
- Add a seed_provider block to cassandra.yaml with org.apache.cassandra.locator.SimpleSeedProvider and a non-empty seeds list
- Set seeds to at least one existing node's address (comma-separated for several)
- Start from the stock cassandra.yaml shipped with the distribution and reapply only intended overrides
Example fix
// cassandra.yaml before (section removed)
// after
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "10.0.1.1:7000,10.0.1.2:7000" Defensive patterns
Strategy: validation
Validate before calling
if (conf.seed_provider == null)
throw new IllegalStateException("cassandra.yaml must define seed_provider with at least one seed"); Try / catch
try { DatabaseDescriptor.daemonInitialization(); } catch (ConfigurationException e) { /* fix yaml, restart */ } Prevention
- Start from the stock cassandra.yaml; never delete seed_provider
- Keep seed_provider in your base config template with required markers
- Validate rendered configs in CI before rollout
When it happens
Trigger: DatabaseDescriptor.applySeedProvider() runs at startup with conf.seed_provider == null — i.e. cassandra.yaml has no seed_provider block at all (the default file ships one using SimpleSeedProvider).
Common situations: Minimal/hand-rolled cassandra.yaml that omits seed_provider; a config-management template that renders the section away; accidental deletion of the block while editing.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- Error while getting seed node list
- Seeds list is now empty!
- A maximum number of tokens per node is supported
- accord.cache_size option was set incorrectly to
- accord.journal_directory must not be the same as any…
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/8f3a1e6a43309c9b.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:1664
{
cryptoProvider = FBUtilities.newCryptoProvider(conf.crypto_provider.class_name, cryptoProviderParameters);
cryptoProvider.install();
}
catch (Exception e)
{
if (e instanceof ConfigurationException)
throw (ConfigurationException) e;
else
throw new ConfigurationException(String.format("Failed to initialize crypto provider %s", conf.crypto_provider.class_name), e);
}
}
public static void applySeedProvider()
{
// load the seeds for node contact points
if (conf.seed_provider == null)
{
throw new ConfigurationException("seeds configuration is missing; a minimum of one seed is required.", false);
}
try
{
Class<? extends SeedProvider> seedProviderClass =
FBUtilities.classForNameWithoutInitialization(conf.seed_provider.class_name, "seed provider", SeedProvider.class);
seedProvider = (SeedProvider) seedProviderClass.getConstructor(Map.class).newInstance(conf.seed_provider.parameters);
}
// there are about 5 checked exceptions that could be thrown here.
catch (Exception e)
{
throw new ConfigurationException(e.getMessage() + "\nFatal configuration error; unable to start server. See log for stacktrace.", true);
}
if (seedProvider.getSeeds().size() == 0)
throw new ConfigurationException("The seed provider lists no seeds.", false);
}
@VisibleForTesting
static void checkForLowestAcceptedTimeouts(Config conf)View on GitHub (pinned to 88fd0f6a0e)