apache/seatunnel · error · CatalogException

Dropping table %s exception.

Error message

Dropping table %s exception.

What it means

Thrown by HudiCatalog.dropTable when recursively deleting the table's HDFS/storage path (fs.delete) fails with an IOException, after existence checks already passed. It wraps the filesystem-level deletion error, not a catalog lookup failure.

Source

Thrown at seatunnel-connectors-v2/connector-hudi/src/main/java/org/apache/seatunnel/connectors/seatunnel/hudi/catalog/HudiCatalog.java:265

        }
    }

    @Override
    public void dropTable(TablePath tablePath, boolean ignoreIfNotExists)
            throws TableNotExistException, CatalogException {
        if (!tableExists(tablePath)) {
            if (ignoreIfNotExists) {
                return;
            } else {
                throw new TableNotExistException(catalogName, tablePath);
            }
        }

        Path path = new Path(inferTablePath(tableParentDfsPathStr, tablePath));
        try {
            this.fs.delete(path, true);
        } catch (IOException e) {
            throw new CatalogException(String.format("Dropping table %s exception.", tablePath), e);
        }
    }

    @Override
    public void truncateTable(TablePath tablePath, boolean ignoreIfNotExists)
            throws TableNotExistException, CatalogException {
        throw new UnsupportedOperationException("Hudi catalog not support truncate table.");
    }

    @Override
    public void createDatabase(TablePath tablePath, boolean ignoreIfExists)
            throws DatabaseAlreadyExistException, CatalogException {
        if (databaseExists(tablePath.getDatabaseName())) {
            if (ignoreIfExists) {
                return;
            } else {
                throw new DatabaseAlreadyExistException(catalogName, tablePath.getDatabaseName());
            }

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Stop any jobs writing to the table, then retry the drop.
  2. Grant the connector user delete permission on the table path.
  3. Delete the path manually with hadoop fs -rm -r if the connector account cannot.
  4. Check the wrapped IOException cause for the concrete storage error.
Defensive patterns

Strategy: try-catch

Validate before calling

// Java
Path p = new Path(tablePathPath);
FileSystem fs = p.getFileSystem(conf);
if (!fs.exists(p)) { /* nothing to drop */ }
// check writability: fs.exists only proves read; deletes need write perms on parent

Try / catch

// Java
try {
    catalog.dropTable(tablePath, false);
} catch (CatalogException e) {
    if (e.getCause() instanceof IOException) {
        // stop writers, verify permissions, then retry
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling dropTable on an existing table when fs.delete(path, true) throws IOException: permission denied, HDFS/s3 outage, or files locked/being written by a running job.

Common situations: Connector user lacks delete permission on the table directory; concurrent SeaTunnel/Hudi job still writing to the table; cloud storage eventual-consistency or throttling errors.

Understand the failure class

Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/6a9ea61a606d473e. Report an issue: GitHub.