apache/seatunnel · warning · IOException
Failed to close HBase connection.
Error message
Failed to close HBase connection.
What it means
HbaseSourceReader.close() wraps any exception from hbaseClient.close() into an IOException('Failed to close HBase connection.'). The reader throws this so the framework knows resource cleanup failed when the task is being torn down. It usually indicates an underlying problem shutting down the HBase client/connection (often a wrapped InterruptedException or IOException).
Solutions
- Check the cause chain for the real failure (often InterruptedException during cancel — usually benign)
- Verify HBase cluster/ZK is reachable so close can complete cleanly
- If it only occurs on cancel, it is typically harmless; investigate only if it happens in normal teardown
- Upgrade/check client resource management; ensure close is called once
Defensive patterns
Strategy: try-catch
Try / catch
try {
reader.close();
} catch (IOException e) {
log.warn("HBase reader close failed: {}", e.getCause(), e); // usually benign during cancel
} Prevention
- Treat close failures during job cancellation as benign unless recurring
- Keep HBase/ZK session healthy to allow clean close
- Ensure each reader closes its client exactly once
- Inspect the cause chain (often InterruptedException) before escalating
When it happens
Trigger: Task cancellation or checkpoint/teardown invoking HbaseSourceReader.close() while hbaseClient.close() (closing the Connection/Table resources) throws — e.g. interrupted thread during job cancel or connection already aborted.
Common situations: Cancelling a running job mid-scan; ZK/session already expired so close() fails; thread interrupt during cleanup.
Related errors
- NAMESPACE_DELETE_EXCEPTION
- TABLE_TRUNCATE_EXCEPTION
- CLOSE_CLIENT_FAILED
- CLOSE_CQL_SESSION_FAILED
- close easysearch connection error
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/a012bd426e1edb45.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/source/HbaseSourceReader.java:112
column ->
Preconditions.checkArgument(
column.contains(":") && column.split(":").length == 2,
"Invalid column names, it should be [ColumnFamily:Column] format"));
this.hbaseClient = hbaseClient;
}
@Override
public void open() throws Exception {
// do nothing
}
@Override
public void close() throws IOException {
if (this.hbaseClient != null) {
try {
this.hbaseClient.close();
} catch (Exception e) {
throw new IOException("Failed to close HBase connection.", e);
}
log.info("Current HBase connection is closed.");
}
}
@Override
public void pollNext(Collector<SeaTunnelRow> output) throws Exception {
synchronized (output.getCheckpointLock()) {
final HbaseSourceSplit split = sourceSplits.poll();
if (Objects.nonNull(split)) {
// read logic
try (ResultScanner scanner =
hbaseClient.scan(split, hbaseParameters, this.columnNames)) {
for (Result result : scanner) {
SeaTunnelRow seaTunnelRow =
hbaseDeserializationFormat.deserialize(
convertRawRow(result), seaTunnelRowType);
output.collect(seaTunnelRow);View on GitHub (pinned to cf67b549a7)