From 1f26b04391cbf5607f3c94f2abe2a0e210382e22 Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Thu, 9 Nov 2023 17:26:57 +0100 Subject: [PATCH] Catch all "not found" exceptions Table/view not found can be indicated by `TrinoException` with `TABLE_NOT_FOUND` error code, but also by `TableNotFoundException` or `ViewNotFoundException` exceptions (both using `NOT_FOUND` error code). The code catching "not found" exceptions should catch all three. --- .../src/main/java/io/trino/metadata/MetadataManager.java | 2 ++ .../main/java/io/trino/spi/connector/ConnectorMetadata.java | 2 ++ .../src/main/java/io/trino/plugin/hive/HiveMetadata.java | 2 +- .../main/java/io/trino/plugin/hive/TrinoViewHiveMetastore.java | 2 +- .../io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java | 3 ++- 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java b/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java index 8146c5430499..585629ef6c1f 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java +++ b/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java @@ -165,6 +165,7 @@ import static io.trino.spi.StandardErrorCode.NOT_SUPPORTED; import static io.trino.spi.StandardErrorCode.SCHEMA_NOT_FOUND; import static io.trino.spi.StandardErrorCode.SYNTAX_ERROR; +import static io.trino.spi.StandardErrorCode.TABLE_NOT_FOUND; import static io.trino.spi.StandardErrorCode.TABLE_REDIRECTION_ERROR; import static io.trino.spi.StandardErrorCode.UNSUPPORTED_TABLE_TYPE; import static io.trino.spi.connector.MaterializedViewFreshness.Freshness.STALE; @@ -600,6 +601,7 @@ public List listTableColumns(Session session, QualifiedTab ErrorCode errorCode = trinoException.getErrorCode(); silent = errorCode.equals(UNSUPPORTED_TABLE_TYPE.toErrorCode()) || // e.g. table deleted concurrently + errorCode.equals(TABLE_NOT_FOUND.toErrorCode()) || errorCode.equals(NOT_FOUND.toErrorCode()) || // e.g. Iceberg/Delta table being deleted concurrently resulting in failure to load metadata from filesystem errorCode.getType() == EXTERNAL; diff --git a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java index 8191761d9924..09842afe22c6 100644 --- a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java +++ b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java @@ -62,6 +62,7 @@ import static io.trino.spi.StandardErrorCode.GENERIC_INTERNAL_ERROR; import static io.trino.spi.StandardErrorCode.NOT_FOUND; import static io.trino.spi.StandardErrorCode.NOT_SUPPORTED; +import static io.trino.spi.StandardErrorCode.TABLE_NOT_FOUND; import static io.trino.spi.StandardErrorCode.UNSUPPORTED_TABLE_TYPE; import static io.trino.spi.connector.SaveMode.IGNORE; import static io.trino.spi.connector.SaveMode.REPLACE; @@ -409,6 +410,7 @@ default Iterator streamRelationComments(ConnectorSessio ErrorCode errorCode = trinoException.getErrorCode(); silent = errorCode.equals(UNSUPPORTED_TABLE_TYPE.toErrorCode()) || // e.g. table deleted concurrently + errorCode.equals(TABLE_NOT_FOUND.toErrorCode()) || errorCode.equals(NOT_FOUND.toErrorCode()) || // e.g. Iceberg/Delta table being deleted concurrently resulting in failure to load metadata from filesystem errorCode.getType() == EXTERNAL; diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java index 38fccc9b136d..376d758689ba 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveMetadata.java @@ -2790,7 +2790,7 @@ public Map getViews(ConnectorSession s else if (e.getErrorCode().equals(HIVE_INVALID_VIEW_DATA.toErrorCode())) { // Ignore views that are not valid } - else if (e.getErrorCode().equals(TABLE_NOT_FOUND.toErrorCode())) { + else if (e.getErrorCode().equals(TABLE_NOT_FOUND.toErrorCode()) || e instanceof TableNotFoundException || e instanceof ViewNotFoundException) { // Ignore view that was dropped during query execution (race condition) } else { diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/TrinoViewHiveMetastore.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/TrinoViewHiveMetastore.java index 89ca55fc702f..759a512f06f3 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/TrinoViewHiveMetastore.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/TrinoViewHiveMetastore.java @@ -143,7 +143,7 @@ public Map getViews(Optional s getView(name).ifPresent(view -> views.put(name, view)); } catch (TrinoException e) { - if (e.getErrorCode().equals(TABLE_NOT_FOUND.toErrorCode())) { + if (e.getErrorCode().equals(TABLE_NOT_FOUND.toErrorCode()) || e instanceof TableNotFoundException || e instanceof ViewNotFoundException) { // Ignore view that was dropped during query execution (race condition) } else { diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java index 922d5293f5f3..769f1c041992 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/AbstractTrinoCatalog.java @@ -35,6 +35,7 @@ import io.trino.spi.connector.ConnectorViewDefinition; import io.trino.spi.connector.SchemaTableName; import io.trino.spi.connector.TableNotFoundException; +import io.trino.spi.connector.ViewNotFoundException; import io.trino.spi.type.ArrayType; import io.trino.spi.type.CharType; import io.trino.spi.type.MapType; @@ -169,7 +170,7 @@ public Map getViews(ConnectorSession s getView(session, name).ifPresent(view -> views.put(name, view)); } catch (TrinoException e) { - if (e.getErrorCode().equals(TABLE_NOT_FOUND.toErrorCode())) { + if (e.getErrorCode().equals(TABLE_NOT_FOUND.toErrorCode()) || e instanceof TableNotFoundException || e instanceof ViewNotFoundException) { // Ignore view that was dropped during query execution (race condition) } else {