prestodb/presto · error · IllegalArgumentException

Unknown block encoding %s

Error message

Unknown block encoding %s

What it means

Deserialization lookup failure: the encoding name read from the wire is not present in the block-encoding registry, so the incoming block cannot be decoded (typically a version or registration mismatch between peers).

Source

Thrown at presto-common/src/main/java/com/facebook/presto/common/block/BlockEncodingManager.java:71

    public void addBlockEncoding(BlockEncoding blockEncoding)
    {
        requireNonNull(blockEncoding, "blockEncoding is null");
        BlockEncoding existingEntry = blockEncodings.putIfAbsent(blockEncoding.getName(), blockEncoding);
        if (existingEntry != null) {
            throw new IllegalArgumentException(format("Encoding %s is already registered", blockEncoding.getName()));
        }
    }

    @Override
    public Block readBlock(SliceInput input)
    {
        // read the encoding name
        String encodingName = readLengthPrefixedString(input);

        // look up the encoding factory
        BlockEncoding blockEncoding = blockEncodings.get(encodingName);
        if (blockEncoding == null) {
            throw new IllegalArgumentException(format("Unknown block encoding %s", encodingName));
        }

        // load read the encoding factory from the output stream
        return blockEncoding.readBlock(this, input);
    }

    @Override
    public void writeBlock(SliceOutput output, Block block)
    {
        while (true) {
            // get the encoding name
            String encodingName = block.getEncodingName();

            // look up the BlockEncoding
            BlockEncoding blockEncoding = blockEncodings.get(encodingName);

            // see if a replacement block should be written instead
            Optional<Block> replacementBlock = blockEncoding.replacementBlockForWrite(block);

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Ensure sender and receiver register the same block encodings
  2. Align client/server/worker versions so encoding names match
  3. Register the custom encoding before reading blocks that use it
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at presto-common/src/main/java/com/facebook/presto/common/block/BlockEncodingManager.java:71 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/a895fa2ab2dfc9cb. Report an issue: GitHub.