nathanmarz/storm · error · RuntimeException

configuration file could not be found

Error message

configuration file ${loginConfigurationFile} could not be found

What it means

AuthUtils.GetConfiguration() loads a JAAS login configuration file (e.g. for SASL/kerberos authentication) via javax.security.auth.login.Configuration.getInstance("JavaLoginConfig"). When the file path stored in storm_conf under the login configuration key does not exist, the underlying provider fails with a FileNotFoundException wrapped in NoSuchAlgorithmException, which Storm rethrows as this RuntimeException.

Solutions

  1. Create the JAAS login configuration file at the configured path, or fix the storm config value to point at the existing file.
  2. Verify the file exists and is readable on every node (nimbus, supervisors, UI) where the error appears: ls -l <loginConfigurationFile>.
  3. Use an absolute path instead of a relative one in the config.
  4. If security is not needed, disable the SASL/kerberos transport plugin in storm.yaml so no login file is required.

Example fix

// before (storm.yaml pointing to missing file)
storm.principal.tolocal: null
# jaas file: /etc/storm/storm-jaas.conf (does not exist)
// after
cp jaas.conf /etc/storm/storm-jaas.conf   # or update conf:
# storm thrift login file -> /etc/storm/storm-jaas.conf (verified existing)
Defensive patterns

Strategy: validation

Validate before calling

// Java
String file = (String) conf.get(loginFileKey);
java.io.File f = new java.io.File(file);
if (file == null || file.isEmpty()) throw new IllegalStateException(loginFileKey + " not set");
if (!f.isFile() || !f.canRead()) throw new IllegalStateException("JAAS login file missing/unreadable: " + file);

Type guard

boolean jaasFileUsable(String path) {
    return path != null && !path.isEmpty() && new java.io.File(path).isFile();
}

Try / catch

try {
    loginConf = AuthUtils.GetConfiguration(conf);
} catch (RuntimeException e) {
    if (e.getMessage() != null && e.getMessage().contains("could not be found")) {
        LOG.error("JAAS login file missing; check " + loginFileKey + " in storm.yaml", e);
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling AuthUtils.GetConfiguration(Map conf) when conf's login configuration file setting (e.g. storm ThriftCamera/login config key such as java.security.auth.login.config-derived value) points to a path that is null-checked but whose file is absent or unreadable as a File, so Configuration.getInstance fails with cause FileNotFoundException.

Common situations: Missing JAAS file on worker machines even though it exists on the nimbus node; relative path that doesn't resolve in the worker's working directory; typo in the storm.conf login file property; security not provisioned on all nodes in a distributed cluster.

Understand the failure class

Background: "Config file not found": what it means and how to fix it in docker-sync, Maven, Vagrant, Turborepo and other tools — this error's family across 60 libraries.

Related errors


AI-assisted analysis of nathanmarz/storm@cdb116e942 (2026-09-12). Data as JSON: /api/errors/9c834c3fdcd95a0d. Report an issue: GitHub.

Appendix: source

Thrown at storm-core/src/jvm/backtype/storm/security/auth/AuthUtils.java:55

    public static final String SERVICE = "storm_thrift_server";

    /**
     * Construct a JAAS configuration object per storm configuration file 
     * @param storm_conf Storm configuration 
     * @return JAAS configuration object
     */
    public static Configuration GetConfiguration(Map storm_conf) {
        Configuration login_conf = null;

        //find login file configuration from Storm configuration  
        String loginConfigurationFile = (String)storm_conf.get("java.security.auth.login.config");
        if ((loginConfigurationFile != null) && (loginConfigurationFile.length()>0)) { 
            try {
                URI config_uri = new File(loginConfigurationFile).toURI();
                login_conf = Configuration.getInstance("JavaLoginConfig", new URIParameter(config_uri));
            } catch (NoSuchAlgorithmException ex1) {
                if (ex1.getCause() instanceof FileNotFoundException)
                    throw new RuntimeException("configuration file "+loginConfigurationFile+" could not be found");
                else throw new RuntimeException(ex1);
            } catch (Exception ex2) {
                throw new RuntimeException(ex2);
            }
        }
        
        return login_conf;
    }

    /**
     * Construct a transport plugin per storm configuration
     * @param conf storm configuration
     * @return
     */
    public static ITransportPlugin GetTransportPlugin(Map storm_conf, Configuration login_conf) {
        ITransportPlugin  transportPlugin = null;
        try {
            String transport_plugin_klassName = (String) storm_conf.get(Config.STORM_THRIFT_TRANSPORT_PLUGIN);

View on GitHub (pinned to cdb116e942)