{"record":{"id":"5420482d1e92a321","repo":"apache/seatunnel","slug":"could-not-delete-table-s","errorCode":null,"errorMessage":"Could not delete table %s","messagePattern":"Could not delete table (.+?)","errorType":"exception","errorClass":"CatalogException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/catalog/KuduCatalog.java","lineNumber":240,"sourceCode":"\n    @Override\n    public void createTable(TablePath tablePath, CatalogTable table, boolean ignoreIfExists)\n            throws TableAlreadyExistException, DatabaseNotExistException, CatalogException {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public void dropTable(TablePath tablePath, boolean ignoreIfNotExists)\n            throws TableNotExistException, CatalogException {\n        String tableName = tablePath.getFullName();\n        try {\n            if (tableExists(tablePath)) {\n                kuduClient.deleteTable(tableName);\n            } else if (!ignoreIfNotExists) {\n                throw new TableNotExistException(catalogName, tablePath);\n            }\n        } catch (KuduException e) {\n            throw new CatalogException(\"Could not delete table \" + tableName, e);\n        }\n    }\n\n    @Override\n    public void createDatabase(TablePath tablePath, boolean ignoreIfExists)\n            throws DatabaseAlreadyExistException, CatalogException {\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public void dropDatabase(TablePath tablePath, boolean ignoreIfNotExists)\n            throws DatabaseNotExistException, CatalogException {\n        throw new UnsupportedOperationException();\n    }\n\n    protected Optional<PrimaryKey> getPrimaryKey(List<ColumnSchema> columnSchemaList) {\n        List<String> pkFields =\n                columnSchemaList.stream().map(ColumnSchema::getName).collect(Collectors.toList());","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/catalog/KuduCatalog.java#L222-L258","documentation":"KuduCatalog.dropTable() deletes the Kudu table via kuduClient.deleteTable; if the Kudu RPC throws a KuduException it is wrapped in a CatalogException with this message. Only RPC-level failures produce this — a missing table raises TableNotExistException instead (unless ignoreIfNotExists).","triggerScenarios":"Calling catalog.dropTable(tablePath, ignoreIfNotExists) when tableExists passed but the actual deleteTable RPC failed — leader election in progress, permissions, or connectivity loss.","commonSituations":"Insufficient Kudu ACLs to delete tables; tablet-server unavailability during delete; race where table is dropped concurrently by another job.","solutions":["Check Kudu user permissions for table deletion","Retry after confirming cluster health","Verify the table wasn't concurrently deleted","Inspect the wrapped KuduException cause"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Pre-check: catalog.tableExists(tablePath) and sufficient Kudu ACLs for the user","typeGuard":null,"tryCatchPattern":"try { catalog.dropTable(tablePath, false); } catch (CatalogException e) { /* retry or inspect e.getCause() (KuduException) */ }","preventionTips":["Grant the Kudu user delete permissions on the table","Pass ignoreIfNotExists=true for idempotent cleanup jobs","Avoid concurrent drops of the same table"],"tags":["kudu","catalog","ddl"],"backgroundTag":"database-write-failed","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"}