prestodb/presto · error · IllegalArgumentException

Encoding %s is already registered

Error message

Encoding %s is already registered

What it means

Registry uniqueness guard: a BlockEncoding with the same name was already registered (putIfAbsent returned an existing entry), so re-registering encodings would silently change serialization behavior.

Source

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

        addBlockEncoding(new IntArrayBlockEncoding());
        addBlockEncoding(new LongArrayBlockEncoding());
        addBlockEncoding(new Int128ArrayBlockEncoding());
        addBlockEncoding(new DictionaryBlockEncoding());
        addBlockEncoding(new ArrayBlockEncoding());
        addBlockEncoding(new MapBlockEncoding());
        addBlockEncoding(new SingleMapBlockEncoding());
        addBlockEncoding(new RowBlockEncoding());
        addBlockEncoding(new SingleRowBlockEncoding());
        addBlockEncoding(new RunLengthBlockEncoding());
        addBlockEncoding(new LazyBlockEncoding());
    }

    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);
    }

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Register each encoding name only once at bootstrap
  2. Check for duplicate encoding registrations in custom plugin code
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-common/src/main/java/com/facebook/presto/common/block/BlockEncodingManager.java:58 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/54aabf5202d70407. Report an issue: GitHub.