{"record":{"id":"c31b7c1ea7cf4e5b","repo":"apache/seatunnel","slug":"failed-to-open-catalog-s-c31b7c","errorCode":null,"errorMessage":"Failed to open catalog %s","messagePattern":"Failed to open catalog (.+?)","errorType":"exception","errorClass":"CatalogException","httpStatus":null,"severity":"critical","filePath":"seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/catalog/HbaseCatalog.java","lineNumber":66,"sourceCode":"    private final String catalogName;\n    private final String defaultDatabase;\n    private final HbaseParameters hbaseParameters;\n\n    private HbaseClient hbaseClient;\n\n    public HbaseCatalog(\n            String catalogName, String defaultDatabase, HbaseParameters hbaseParameters) {\n        this.catalogName = checkNotNull(catalogName, \"catalogName cannot be null\");\n        this.defaultDatabase = defaultDatabase;\n        this.hbaseParameters = checkNotNull(hbaseParameters, \"Hbase Config cannot be null\");\n    }\n\n    @Override\n    public void open() throws CatalogException {\n        try {\n            hbaseClient = HbaseClient.createInstance(hbaseParameters);\n        } catch (Exception e) {\n            throw new CatalogException(String.format(\"Failed to open catalog %s\", catalogName), e);\n        }\n    }\n\n    @Override\n    public void close() throws CatalogException {\n        hbaseClient.close();\n    }\n\n    @Override\n    public String name() {\n        return catalogName;\n    }\n\n    @Override\n    public String getDefaultDatabase() throws CatalogException {\n        return defaultDatabase;\n    }\n","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/catalog/HbaseCatalog.java#L48-L84","documentation":"HbaseCatalog.open() wraps any failure while creating the internal HbaseClient instance in a CatalogException with this message. Client creation typically validates HBase connection parameters (quorum, znode, auth) and establishes a connection handle, so configuration or connectivity problems surface here.","triggerScenarios":"Calling HbaseCatalog.open() when hbaseParameters contain invalid values (bad hbase.zookeeper.quorum, wrong ports) or when ZooKeeper/HBase is unreachable and HbaseClient.createInstance throws.","commonSituations":"Misconfigured zookeeper quorum host/port; HBase cluster down or firewalled; kerberos/security settings missing or wrong; typo in namespace-related config keys.","solutions":["Verify hbase.zookeeper.quorum and hbase.zookeeper.property.clientPort in the connector config match the running HBase cluster.","Check network reachability from the SeaTunnel node to ZooKeeper/HBase (telnet/nc the ports).","Inspect the wrapped cause exception for the root failure (e.g. connection timeout, auth error).","Confirm kerberos/keytab or SASL settings are correct if the cluster is secured."],"exampleFix":"// before\nHbase {\n  zookeeper.quorum = \"localhost\"\n}\n// after\nHbase {\n  zookeeper.quorum = \"hbase-host1,hbase-host2,hbase-host3\"\n  zookeeper.znode.parent = \"/hbase\"\n}","handlingStrategy":"try-catch","validationCode":"// Precheck ZooKeeper reachability before opening the catalog\ntry (Socket s = new Socket()) {\n    s.connect(new InetSocketAddress(zkQuorumHost, zkPort), 5000); // must succeed\n}","typeGuard":null,"tryCatchPattern":"try {\n    catalog.open();\n} catch (CatalogException e) {\n    LOG.error(\"HBase catalog open failed; check quorum/network/security config\", e.getCause());\n    throw new JobConfigException(\"Invalid HBase connection settings: \" + e.getCause().getMessage());\n}","preventionTips":["Validate zookeeper.quorum/znode config against the live cluster before job submission.","Test connectivity to ZooKeeper and HBase ports from SeaTunnel nodes.","Keep the wrapped cause when logging — it carries the root reason.","Verify kerberos/keytab settings for secured clusters."],"tags":["hbase","catalog","connection"],"backgroundTag":"connection-refused","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}