apache/hadoop · error · IllegalArgumentException
Not a valid Boolean value for {property}
Error message
Not a valid Boolean value for {property} What it means
Live reconfiguration of dfs.disk.balancer.enabled in reconfDiskBalancerParameters accepts only "true" or "false" (case-insensitive); any other non-null value raises IllegalArgumentException('Not a valid Boolean value for ...') which the method wraps into ReconfigurationException. A null newVal resets to the DFS_DISK_BALANCER_ENABLED default and never fails. The old value stays in effect when the change is rejected.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java:1035
}
}
}
LOG.info("RECONFIGURE* changed {} to {}", property, newVal);
return result;
} catch (IllegalArgumentException | IOException | ClassNotFoundException e) {
throw new ReconfigurationException(property, newVal, getConf().get(property), e);
}
}
private String reconfDiskBalancerParameters(String property, String newVal)
throws ReconfigurationException {
String result = null;
try {
LOG.info("Reconfiguring {} to {}", property, newVal);
if (property.equals(DFS_DISK_BALANCER_ENABLED)) {
if (newVal != null && !newVal.equalsIgnoreCase("true")
&& !newVal.equalsIgnoreCase("false")) {
throw new IllegalArgumentException("Not a valid Boolean value for " + property);
}
boolean enable = (newVal == null ? DFS_DISK_BALANCER_ENABLED_DEFAULT :
Boolean.parseBoolean(newVal));
getDiskBalancer().setDiskBalancerEnabled(enable);
result = Boolean.toString(enable);
} else if (property.equals(DFS_DISK_BALANCER_PLAN_VALID_INTERVAL)) {
if (newVal == null) {
// set to default
long defaultInterval = getConf().getTimeDuration(
DFS_DISK_BALANCER_PLAN_VALID_INTERVAL,
DFS_DISK_BALANCER_PLAN_VALID_INTERVAL_DEFAULT,
TimeUnit.MILLISECONDS);
getDiskBalancer().setPlanValidityInterval(defaultInterval);
result = DFS_DISK_BALANCER_PLAN_VALID_INTERVAL_DEFAULT;
} else {
long newInterval = getConf()
.getTimeDurationHelper(DFS_DISK_BALANCER_PLAN_VALID_INTERVAL,
newVal, TimeUnit.MILLISECONDS);View on GitHub (pinned to 2add963021)
Solutions
- Resubmit exactly true or false with no surrounding whitespace
- Fix the template/source that produced the value so it emits only true/false
- Verify with hdfs dfsadmin -reconfig datanode <dn:ipc> status that the old value survived
Example fix
// before $ hdfs dfsadmin -reconfig datanode dn1:9867 start ... dfs.disk.balancer.enabled=1 // after $ hdfs dfsadmin -reconfig datanode dn1:9867 start ... dfs.disk.balancer.enabled=true
Defensive patterns
Strategy: validation
Validate before calling
static boolean isDnBooleanLiteral(String v) {
return v == null || v.equalsIgnoreCase("true") || v.equalsIgnoreCase("false");
}
if (!isDnBooleanLiteral(newVal)) throw new IllegalArgumentException("dfs.disk.balancer.enabled accepts only true/false"); Try / catch
catch (ReconfigurationException e) {
// cause IllegalArgumentException('Not a valid Boolean value for ...'); old value retained
LOG.warn("Rejected: {}", e.getMessage());
} Prevention
- Use exactly true/false; whitespace-padded values like ' true' are rejected
- Trim values in templates before submission
- Centralize boolean formatting in one helper used by all reconfig tooling
When it happens
Trigger: Calling 'hdfs dfsadmin -reconfig datanode ... start' or the reconfig JMX/HTTP API for dfs.disk.balancer.enabled with "1", "yes", "on", an empty string, or whitespace-padded values like " true" (equalsIgnoreCase fails on any extra characters).
Common situations: Turning disk balancer on/off across a fleet with scripts that use 1/0; config templates rendering booleans inconsistently per key; copy-paste from docs that show 'enable: yes'.
Related errors
- Not a valid Boolean value for {property} in reconfSlowPeerPa
- No directory is specified.
- FsDatasetSpi has not been initialized
- Changing storage type is not allowed.
- Attempt to remove all volumes.
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/6a18518f527ba721.
Report an issue: GitHub.