apache/hadoop · error · InvalidFileSystemPropertyException
%s is invalid.
Error message
%s is invalid.
What it means
When ABFS reads filesystem-level metadata, it parses the x-ms-properties header into name/value pairs. The header is a comma-separated list where every entry must be a non-empty name=base64(value) pair. This variant throws InvalidFileSystemPropertyException when split(',') yields an empty segment - a leading, trailing, or doubled comma - and includes the whole raw header in the message.
Source
Thrown at hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystemStore.java:1986
&& resourceType.equalsIgnoreCase(AbfsHttpConstants.DIRECTORY);
}
private Hashtable<String, String> parseCommaSeparatedXmsProperties(String xMsProperties) throws
InvalidFileSystemPropertyException, InvalidAbfsRestOperationException {
Hashtable<String, String> properties = new Hashtable<>();
final CharsetDecoder decoder = Charset.forName(XMS_PROPERTIES_ENCODING).newDecoder();
if (xMsProperties != null && !xMsProperties.isEmpty()) {
String[] userProperties = xMsProperties.split(AbfsHttpConstants.COMMA);
if (userProperties.length == 0) {
return properties;
}
for (String property : userProperties) {
if (property.isEmpty()) {
throw new InvalidFileSystemPropertyException(xMsProperties);
}
String[] nameValue = property.split(AbfsHttpConstants.EQUAL, 2);
if (nameValue.length != 2) {
throw new InvalidFileSystemPropertyException(xMsProperties);
}
byte[] decodedValue = Base64.decode(nameValue[1]);
final String value;
try {
value = decoder.decode(ByteBuffer.wrap(decodedValue)).toString();
} catch (CharacterCodingException ex) {
throw new InvalidAbfsRestOperationException(ex);
}
properties.put(nameValue[0], value);
}
}View on GitHub (pinned to 2add963021)
Solutions
- Rewrite the container metadata in the exact expected form 'name1=<base64>,name2=<base64>' with no trailing or doubled commas.
- Remove the malformed entries first: az storage fs metadata update with --remove for the broken keys, then re-add clean values.
- Base64-encode all values (this also hides commas inside values).
- After fixing, verify with a filesystem status read that the mount initializes.
Example fix
# before: metadata serialized as 'owner=alice,,' or 'owner=alice,' -> throws # after (values base64-encoded, no trailing comma) Metadata key=owner value=$(printf %s 'alice' | base64)
Defensive patterns
Strategy: try-catch
Try / catch
try {
fs.getStatus(root); // triggers filesystem-property parsing
} catch (InvalidFileSystemPropertyException e) {
// x-ms-properties has a dangling comma; fix container metadata via az storage fs metadata update
} Prevention
- Write container metadata only as name=base64(value), comma-separated with no trailing comma.
- Use one tool for metadata management on Hadoop-facing containers.
- Normalize values through base64 to hide commas and unicode.
When it happens
Trigger: The filesystem (container) has metadata whose serialized x-ms-properties form contains a dangling comma, e.g. 'key1=aGVsbG8=,'. Surfaced by code paths calling AbfsDfsClient.getXMSProperties(), such as filesystem property/status reads on the DFS endpoint.
Common situations: Container metadata written by external tools (az storage fs metadata, Storage SDK, Portal) that append commas or emit empty entries; hand-edited metadata; metadata migrated from other systems without normalization.
Related errors
- Parsing of XML List Response Failed in BlobClient.
- WASB Driver using wasb(s) schema is no longer supported. Ins
- "%s" must be set for user-bound SAS auth type.
- Unable to load user-bound SAS token provider class: {e}
- ABFS endpoint is not set correctly : %s, Do not specify sche
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/f8fcf174e88c41d5.
Report an issue: GitHub.