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

  1. Set the value to a plain integer number of seconds: <value>5</value>.
  2. Remove the property to fall back to the built-in default (5 seconds).
  3. Verify config readability in the same environment: run `hdfs getconf -confKey hadoop.fuse.timer.period` as the mounting user.
  4. 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

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.