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
- Create the JAAS login configuration file at the configured path, or fix the storm config value to point at the existing file.
- Verify the file exists and is readable on every node (nimbus, supervisors, UI) where the error appears: ls -l <loginConfigurationFile>.
- Use an absolute path instead of a relative one in the config.
- 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
- Ship the JAAS file to every node and reference it with an absolute path.
- Check file existence/readability at startup before enabling SASL.
- Keep login file path in one config key and validate it in your launch scripts.
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
- Could not find a ' ' entry in this configuration.
- Could not find a ' ' entry in this configuration: Client…
- Could not find a ' ' entry in this configuration: Server…
- Blowfish encryption key not specified
- Blowfish encryption key invalid
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)