apache/hadoop · error
EINVAL
EINVAL
Error message
Unable to determine the configured value for %s.
What it means
fuse_dfs (the Hadoop FUSE mount) initializes its cached-connection layer in fuseConnectInit (fuse_connect.c:138-142). It reads the Hadoop configuration key hadoop.fuse.timer.period via libhdfs hdfsConfGetInt (default 5 seconds); a nonzero return — the key exists but its value cannot be parsed as an integer, or configuration loading itself failed — prints this message to stderr and aborts the mount with EINVAL.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/fuse-dfs/fuse_connect.c:140
authConf = AUTH_CONF_UNKNOWN;
else if (!val)
authConf = AUTH_CONF_OTHER;
else if (!strcmp(val, "kerberos"))
authConf = AUTH_CONF_KERBEROS;
else
authConf = AUTH_CONF_OTHER;
free(val);
return authConf;
}
int fuseConnectInit(const char *nnUri, int port)
{
int ret;
gTimerPeriod = FUSE_CONN_DEFAULT_TIMER_PERIOD;
ret = hdfsConfGetInt(HADOOP_FUSE_TIMER_PERIOD, &gTimerPeriod);
if (ret) {
fprintf(stderr, "Unable to determine the configured value for %s.",
HADOOP_FUSE_TIMER_PERIOD);
return -EINVAL;
}
if (gTimerPeriod < 1) {
fprintf(stderr, "Invalid value %d given for %s.\n",
gTimerPeriod, HADOOP_FUSE_TIMER_PERIOD);
return -EINVAL;
}
gExpiryPeriod = FUSE_CONN_DEFAULT_EXPIRY_PERIOD;
ret = hdfsConfGetInt(HADOOP_FUSE_CONNECTION_TIMEOUT, &gExpiryPeriod);
if (ret) {
fprintf(stderr, "Unable to determine the configured value for %s.",
HADOOP_FUSE_CONNECTION_TIMEOUT);
return -EINVAL;
}
if (gExpiryPeriod < 1) {
fprintf(stderr, "Invalid value %d given for %s.\n",
gExpiryPeriod, HADOOP_FUSE_CONNECTION_TIMEOUT);View on GitHub (pinned to 2add963021)
Solutions
- Set the value to a plain integer number of seconds: <value>5</value>.
- Remove the property to fall back to the built-in default (5 seconds).
- Verify config readability in the same environment: run `hdfs getconf -confKey hadoop.fuse.timer.period` as the mounting user.
- Fix HADOOP_CONF_DIR/CLASSPATH for the fuse_dfs process and xmllint the XML files.
Example fix
<!-- before --> <property><name>hadoop.fuse.timer.period</name><value>5s</value></property> <!-- after --> <property><name>hadoop.fuse.timer.period</name><value>5</value></property>
Defensive patterns
Strategy: validation
Validate before calling
#!/bin/bash # pre-mount check: fuse keys must be integers when present bad=0 for k in hadoop.fuse.timer.period hadoop.fuse.connection.timeout; do v=$(hdfs getconf -confKey "$k" 2>/dev/null) if [ -n "$v" ] && ! [[ "$v" =~ ^-?[0-9]+$ ]]; then echo "non-integer $k=$v"; bad=1; fi done exit $bad
Prevention
- fuse config values are plain integers (seconds) — never units like 5s.
- Verify with `hdfs getconf -confKey` under the exact env/user that mounts.
- Add the pre-mount config check to the mount script; fuse_dfs reads config once at startup.
When it happens
Trigger: hdfs-site.xml or core-site.xml contains <name>hadoop.fuse.timer.period</name><value>5s</value> (non-numeric); HADOOP_CONF_DIR/CLASSPATH points to unparseable XML so the libhdfs config load fails; fuse_dfs launched from a minimal environment (fstab/systemd) that lacks the normal Hadoop env.
Common situations: Operators copy time-period style values ('5s', '5000ms') from other Hadoop configs into fuse keys; JAVA_HOME/CLASSPATH not exported into the mount context so configuration never loads.
Related errors
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/795ef572daa7e593.
Report an issue: GitHub.