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
- Inspect the wrapped IOException via getCause() for the encoder close failure
- Ensure encoder output streams are healthy and not already closed before finish()
- 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.