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

  1. Rewrite the container metadata in the exact expected form 'name1=<base64>,name2=<base64>' with no trailing or doubled commas.
  2. Remove the malformed entries first: az storage fs metadata update with --remove for the broken keys, then re-add clean values.
  3. Base64-encode all values (this also hides commas inside values).
  4. 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

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


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/f8fcf174e88c41d5. Report an issue: GitHub.