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

  1. Add a seed_provider block to cassandra.yaml with org.apache.cassandra.locator.SimpleSeedProvider and a non-empty seeds list
  2. Set seeds to at least one existing node's address (comma-separated for several)
  3. 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

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


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)