prestodb/presto · error · UncheckedIOException

Failed to close row encoders

Error message

Failed to close row encoders

What it means

In KafkaPageSink.finish(), after flushing and closing the Kafka producer, the key and message encoders are closed; an IOException during encoder close is rethrown as this UncheckedIOException. It signals that releasing the row-encoder resources failed while finishing a write, wrapping the checked IOException for use in the CompletableFuture-based sink API.

Source

Thrown at presto-kafka/src/main/java/com/facebook/presto/kafka/KafkaPageSink.java:121

                    messageEncoder.appendColumnValue(page.getBlock(channel), position);
                }
            }
            producer.send(new ProducerRecord<>(topicName, keyEncoder.toByteArray(), messageEncoder.toByteArray()), errorCounter);
        }
        return NOT_BLOCKED;
    }

    @Override
    public CompletableFuture<Collection<Slice>> finish()
    {
        producer.flush();
        producer.close();
        try {
            keyEncoder.close();
            messageEncoder.close();
        }
        catch (IOException e) {
            throw new UncheckedIOException("Failed to close row encoders", e);
        }

        if (errorCounter.getErrorCount() > 0) {
            throw new PrestoException(KAFKA_PRODUCER_ERROR, format("%d producer record('s) failed to send", errorCounter.getErrorCount()));
        }
        return completedFuture(ImmutableList.of());
    }

    @Override
    public void abort()
    {
        producer.close();
    }
}

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Inspect the wrapped IOException via getCause() for the encoder close failure
  2. Ensure encoder output streams are healthy and not already closed before finish()
  3. Catch UncheckedIOException where the sink's completion future is consumed
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at presto-kafka/src/main/java/com/facebook/presto/kafka/KafkaPageSink.java:121 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/65a74e984c73f2af. Report an issue: GitHub.