GitHub user nevzheng created a discussion: Error taxonomy: we collapse every 
failure into HTTP 500 — a gateway shouldn't

## The problem

Gravitino is a **gateway** that federates external catalogs (Iceberg REST, Hive 
Metastore, JDBC, Kafka, filesets), but it handles failures with an 
**overly-broad catch** discipline. Across the catalog layer, the recurring 
shape is:

```java
} catch (Exception e) {
  throw new RuntimeException(e);
}
```

The server then renders that as HTTP **500 Internal Server Error**. The 
consequence: three fundamentally different kinds of failure become 
**indistinguishable** to callers and to us in production:

1. **A dependency is down** — Hive Metastore unreachable, Iceberg REST 
returning 503, a JDBC connection drop → *not our fault, often retriable.*
2. **The caller made a mistake** — bad argument, not-found, already-exists, 
unauthorized → *the caller's fault, never retriable.*
3. **Gravitino itself has a bug** — a broken invariant → *our fault, must be 
investigated.*

Today all three look like the same generic 500. This is a recognized 
anti-pattern ([CWE-396: Declaration of Catch for Generic 
Exception](https://cwe.mitre.org/data/definitions/396.html) — broad catches 
"obscure the source of the exception and make debugging more difficult"), not 
just a style preference.

## The data

`throw new RuntimeException(...)` in catalog code (`catalogs/*/src/main`, 
branch `main`):

| Module | sites | | Module | sites |
|---|--:|---|---|--:|
| catalog-hive | 24 | | catalog-lakehouse-iceberg | 5 |
| catalog-fileset | 19 | | catalog-lakehouse-paimon | 5 |
| catalog-kafka | 15 | | catalog-glue | 5 |
| hive-metastore-common | 15 | | catalog-lakehouse-hudi | 4 |
| catalog-model | 14 | | catalog-common | 3 |
| catalog-lakehouse-generic | 9 | | catalog-jdbc-doris | 2 |
| hadoop-common | 5 | | catalog-jdbc-common / starrocks | 1 / 1 |

**~127 sites in catalog code** (full `file:line` list attached). Not every site 
swallows a *backend* exception — some are genuine internal invariants — but the 
ones catching `Exception`/`IOException`/`SQLException`/`TException` around a 
backend call are where dependency-vs-us and retriable-vs-terminal information 
is erased. Concretely today:

- Only **JDBC** and **Hive** have real exception converters. **Iceberg 
(operational paths), Paimon, Kafka, Fileset, Model have none** and collapse 
everything — including backend-unavailable — into `RuntimeException`.
- On the server (`server/.../web/rest/ExceptionHandlers.java`), 
`ConnectionFailedException → 502` is mapped by **exactly one** of 22 per-entity 
handlers (`CatalogExceptionHandler`); everywhere else it falls through to 
**500**. `UnauthorizedException` (error code 1011) is emitted by **no** 
handler. There is **no** `ExceptionMapper<Throwable>` safety net.
- The Java client has **no retry, no backoff, no `Retry-After`** awareness; 
`INTERNAL_ERROR` becomes a bare `RuntimeException`.

## Why this matters — and why it grows over time

**Operationally / for deployments.** We are a gateway; per [RFC 9110 
§15.6](https://www.rfc-editor.org/rfc/rfc9110#name-server-error-5xx) an 
upstream outage is **502/503/504**, not 500. Returning 500 for a dependency 
being down is a spec misuse that routes the wrong on-call to the wrong system. 
A 500 should mean "a Gravitino invariant broke" and should be **rare** — when 
it's the catch-all, real bugs hide inside a flood of dependency errors and 
every incident starts from zero.

> **This is not hypothetical — it is one of the most expensive failure modes at 
> scale.** At BigQuery, 500-class errors are the single hardest category to 
> debug: the team has spent the equivalent of *years* of engineering time 
> quashing them, is *still* working through the backlog, and continues to burn 
> significant on-call time chasing them. Undifferentiated 500s are a debt that 
> compounds — every generic 500 Gravitino emits today is a deferred instance of 
> that same cost, far cheaper to prevent at the source than to excavate later 
> from logs.

**For users / clients.** Every backend we federate already ships a structural 
*retriable* signal — Kafka `RetriableException`, JDBC 
`SQLTransientException`/`SQLRecoverableException`, Iceberg 
`ServiceUnavailableException`/503, Hive `TTransportException` — and we discard 
all of it at the adapter boundary. Clients can't safely auto-retry because they 
can't tell transient from permanent. ([AIP-194](https://google.aip.dev/194): 
*"retrying a request with an invalid argument will never succeed — only 
transient failures merit automatic retry."*)

**For enterprise adoption and complex deployments (the commercial argument).** 
Good error taxonomy is not cosmetic — it's what makes Gravitino *operable 
inside someone else's production*, which is exactly the bar for enterprise:

- **Integration into a control plane.** Enterprise platform/SRE teams wire 
retries, circuit breakers, autoscaling, alerting, and runbooks to status/error 
codes. If everything is 500, none of that automation can distinguish "retry / 
back off" from "page a human." A gateway that can't say whose fault a failure 
is creates integration friction that stalls POCs.
- **SLAs / error budgets.** Enterprise contracts define availability targets. 
You cannot honor — or even *measure* — an SLA if upstream-catalog outages are 
counted as Gravitino 500s. A clean taxonomy lets us attribute failures (ours vs 
dependency) and defend an SLA, which is a prerequisite for enterprise 
commitments.
- **MTTR & support cost.** Typed, attributed errors cut mean-time-to-resolution 
and support-ticket volume — the actual cost centers in enterprise support 
agreements.
- **Security / compliance review.** Generic 500s that leak stack traces and 
internal paths are flagged in security reviews ([CWE-209: information exposure 
through an error message](https://cwe.mitre.org/data/definitions/209.html)). 
Sanitized, typed errors pass.
- **Trust / accountability boundary.** As a federation layer between callers 
and many backends, being able to say "your Hive Metastore is down, not us" is 
an accountability boundary ops teams demand *before* they'll put Gravitino on 
the critical path.

In one line: clean error semantics convert Gravitino from "a black box that 
returns 500" into "a well-behaved gateway component" — a procurement and 
integration checkbox, not a nice-to-have.

## A possible direction (for discussion, not a decision)

The standard remedy is a small **closed** taxonomy where the category itself 
tells the caller who's at fault and whether to retry — the model used by [gRPC 
status codes](https://grpc.io/docs/guides/status-codes/), [Google 
AIP-193](https://google.aip.dev/193), and HTTP. Mapped to our gateway role, 
roughly four buckets + a `retriable` bit:

| Bucket | HTTP | Retriable | gRPC analog |
|---|---|---|---|
| **Caller error** (bad-request / not-found / already-exists / unsupported) | 
400 / 404 / 409 / 405 | no | `INVALID_ARGUMENT`, `NOT_FOUND`, `ALREADY_EXISTS`, 
`FAILED_PRECONDITION` |
| **Auth error** (authn / authz) | 401 / 403 | no | `UNAUTHENTICATED`, 
`PERMISSION_DENIED` |
| **Dependency unavailable** (upstream down / transient / timeout) | 503 
(+`Retry-After`) / 504 | **yes** | `UNAVAILABLE` |
| **Dependency failure** (upstream returned a broken response) | 502 | no | 
(upstream `INTERNAL`) |
| **Internal error** (a Gravitino invariant broke — *only* our bugs) | 500 | no 
| `INTERNAL` |

Guiding principle: **classify-then-preserve** rather than 
swallow-then-whitelist — classify a failure once, at the adapter boundary where 
the native exception still carries meaning, and preserve that classification 
(incl. the `retriable` bit) all the way to the HTTP response and the client.

### Two dimensions the bucket alone doesn't capture

*Which bucket* is only one axis. An error carries two more independent facets — 
both straight from the same standard playbook (Google's `google.rpc.Status` / 
`ErrorInfo`, Abseil `Status`):

- **Error domain — which subsystem produced this?** `gravitino-core` vs 
`iceberg-rest` vs `hive-metastore` vs `jdbc:<vendor>`. A machine-readable 
domain (AIP-193's `ErrorInfo.domain` + `reason`) lets callers *and our own 
tooling* attribute and route failures by blast radius instead of grepping 
message strings. For a gateway this is arguably **the** central concept — you 
cannot reason about "whose fault" without naming the domain. (Cf. *["Ow! My 
Foot!"](https://n8z.dev/posts/ow-my-foot/)* — "think in error domains and blast 
radius"; "error domains are everything.")
- **Public vs internal — who is the audience?** Every error has two: a 
**public** face (safe, actionable, stable — what the caller sees) and 
**internal** detail (full cause chain, stack, possibly sensitive config — 
logs/traces only). A generic 500 does the *opposite* of both at once: it leaks 
internals to the caller 
([CWE-209](https://cwe.mitre.org/data/definitions/209.html)) *and* strips the 
useful detail from the response. These must be explicitly separated so we can 
be verbose internally and disciplined externally.

## Open questions / other categories to work through

- **Authorization vs authentication (401 vs 403).** Today 401 is effectively 
dead taxonomy and backend auth failures (Kafka `AuthorizationException`, JDBC 
SQLState `28`, Iceberg 401/403) collapse to 500. How do we surface upstream 
authz failures vs Gravitino's own access control?
- **Rate limiting / backpressure (429 + `Retry-After`).** Exists only for the 
lineage sink today — should the gateway propagate upstream throttling?
- **Timeouts (504 vs 503).** Distinguish "upstream slow" from "upstream down"?
- **Non-obvious retriability traps** the converters must encode: Iceberg 
`CommitStateUnknownException` → **never** auto-retry (possible double-write); 
`CommitFailedException` → retry the whole commit, not the request; Kafka 
`UnknownTopicOrPartitionException` is marked retriable but is semantically 404; 
JDBC — classify on the marker hierarchy before SQLState (class `08` is 
ambiguous).
- **Error-message hygiene** — sanitize what crosses the boundary to callers 
([CWE-209](https://cwe.mitre.org/data/definitions/209.html)) while keeping full 
detail in logs.
- **Error-code stability** — once clients depend on codes they become API 
surface; how do we version them (per AIP-193's backwards-compat guidance)?
- **Scope / sequencing.** Is a cheap first win worthwhile (hoist 
`ConnectionFailed`/`Unauthorized`/`Forbidden` into `BaseExceptionHandler` + add 
an `ExceptionMapper<Throwable>` safety net) before the larger taxonomy + 
per-catalog converters + client retry?

## References

*The anti-pattern:* [CWE-396](https://cwe.mitre.org/data/definitions/396.html) 
/ [CWE-397](https://cwe.mitre.org/data/definitions/397.html) (generic 
catch/throw) · [CWE-209](https://cwe.mitre.org/data/definitions/209.html) 
(error-message info exposure) · [Oracle Java Tutorials — 
Exceptions](https://docs.oracle.com/javase/tutorial/essential/exceptions/) · 
*Effective Java* Item 77 · Nygard, *[Release 
It!](https://pragprog.com/titles/mnee2/release-it-second-edition/)*

*Error domains, public/internal split, and cross-language design:* [*"Ow! My 
Foot!"* — a survey of error handling across C, Go, Rust, and 
Abseil](https://n8z.dev/posts/ow-my-foot/) (nevzheng, 2026) — "think in error 
domains and blast radius"; "the silent swallow and the invisible rethrow"; 
"error domains are everything."

*The taxonomy to adopt:* [gRPC status 
codes](https://grpc.io/docs/guides/status-codes/) · [AIP-193 
Errors](https://google.aip.dev/193) / [AIP-194 
Retry](https://google.aip.dev/194) · [RFC 9110 
§15.6](https://www.rfc-editor.org/rfc/rfc9110#name-server-error-5xx)

Related: #11943, #11959 (the Iceberg REST `warehouse` fail-fast fix that 
surfaced this).

<details>
<summary><b>Data appendix — full <code>file:line</code> list of the ~127 
sites</b> (click to expand)</summary>


Generated from `grep -rn 'throw new RuntimeException' catalogs/*/src/main 
--include='*.java'` on branch claude/dazzling-knuth-703829 @ 799c50c73.
Count = 127 across catalog modules. (Not every site swallows a *backend* 
exception — some are internal invariants; the ones that catch 
`Exception`/`IOException`/`SQLException` from a backend call are the ones that 
erase dependency/retriability semantics.)

## catalog-common (3)
```
catalog-common/src/main/java/org/apache/gravitino/catalog/hive/StorageFormat.java:64:
    if (inputFormat == null) throw new RuntimeException("inputFormat must not 
be null");
catalog-common/src/main/java/org/apache/gravitino/catalog/hive/StorageFormat.java:65:
    if (outputFormat == null) throw new RuntimeException("outputFormat must not 
be null");
catalog-common/src/main/java/org/apache/gravitino/catalog/hive/StorageFormat.java:66:
    if (serde == null) throw new RuntimeException("serde must not be null");
```

## catalog-fileset (19)
```
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:324:
      throw new RuntimeException("Failed to list filesets under namespace " + 
namespace, e);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:346:
      throw new RuntimeException("Failed to load fileset %s" + ident, ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:393:
      throw new RuntimeException("Failed to list files in fileset" + 
filesetIdent, e);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:421:
      throw new RuntimeException("Failed to check if fileset " + ident + " 
exists", ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:431:
      throw new RuntimeException("Failed to load schema " + schemaIdent, ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:510:
              throw new RuntimeException(
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:534:
        throw new RuntimeException("Failed to create fileset " + ident, ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:568:
      throw new RuntimeException("Failed to create fileset " + ident, ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:631:
      throw new RuntimeException("Failed to load fileset " + ident, ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:651:
      throw new RuntimeException("Failed to update fileset " + ident, ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:656:
      throw new RuntimeException(
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:713:
      throw new RuntimeException("Failed to delete fileset " + ident, ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:737:
      throw new RuntimeException("Failed to check if schema " + ident + " 
exists", ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:759:
                  throw new RuntimeException(
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:781:
              throw new RuntimeException(
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:798:
      throw new RuntimeException("Failed to check if schema " + ident + " 
exists", ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:935:
      throw new RuntimeException("Failed to delete schema " + ident + " 
location", ioe);
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:1080:
                throw new RuntimeException(
catalog-fileset/src/main/java/org/apache/gravitino/catalog/fileset/FilesetCatalogOperations.java:1426:
      throw new RuntimeException("Interrupted when getting FileSystem for path: 
" + path, e);
```

## catalog-glue (5)
```
catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueTableOperations.java:102:
      throw new RuntimeException("Failed to list partitions for table " + 
tableName, e);
catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueTableOperations.java:124:
      throw new RuntimeException("Failed to list partitions for table " + 
tableName, e);
catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueTableOperations.java:144:
      throw new RuntimeException("Failed to get partition " + partitionName, e);
catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueTableOperations.java:184:
      throw new RuntimeException("Failed to add partition " + partition.name(), 
e);
catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueTableOperations.java:213:
      throw new RuntimeException("Failed to drop partition " + partitionName, 
e);
```

## catalog-hive (24)
```
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:221:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:265:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:286:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:335:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:361:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:412:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:497:
      throw new RuntimeException(
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:669:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:767:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveCatalogOperations.java:1066:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:93:
      throw new RuntimeException("Failed to list Hive views in " + namespace, 
e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:160:
      throw new RuntimeException("Failed to create Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:162:
      throw new RuntimeException("Failed to create Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:267:
      throw new RuntimeException("Failed to alter Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:269:
      throw new RuntimeException("Failed to alter Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:314:
      throw new RuntimeException("Failed to drop Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:316:
      throw new RuntimeException("Failed to drop Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:352:
      throw new RuntimeException("Failed to load Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveViewCatalogOperations.java:354:
      throw new RuntimeException("Failed to load Hive view " + ident, e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveTableOperations.java:59:
      throw new RuntimeException(
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveTableOperations.java:73:
      throw new RuntimeException(
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveTableOperations.java:84:
      throw new RuntimeException(
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveTableOperations.java:131:
      throw new RuntimeException(e);
catalog-hive/src/main/java/org/apache/gravitino/catalog/hive/HiveTableOperations.java:175:
      throw new RuntimeException(
```

## catalog-jdbc-common (1)
```
catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/MySQLProtocolCompatibleCatalogOperations.java:57:
      throw new RuntimeException(
```

## catalog-jdbc-doris (2)
```
catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/operation/DorisTableOperations.java:208:
        throw new RuntimeException("Failed to get the number of backend 
servers", e);
catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java:220:
    throw new RuntimeException("Failed to extract distribution info in sql:" + 
createTableSql);
```

## catalog-jdbc-starrocks (1)
```
catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/utils/StarRocksUtils.java:193:
    throw new RuntimeException("Failed to extract distribution info in sql:" + 
createTableSql);
```

## catalog-kafka (15)
```
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:160:
      throw new RuntimeException("Failed to create Kafka AdminClient", e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:177:
      throw new RuntimeException(
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:183:
      throw new RuntimeException("Failed to list topics under the schema " + 
namespace, e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:231:
        throw new RuntimeException("Failed to load topic " + ident.name() + " 
from Kafka", e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:234:
      throw new RuntimeException("Failed to load topic " + ident.name() + " 
from Kafka", e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:310:
        throw new RuntimeException("Failed to create topic in Kafka" + ident, 
e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:313:
      throw new RuntimeException("Failed to create topic in Kafka" + ident, e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:386:
        throw new RuntimeException("Failed to drop topic " + ident.name() + " 
from Kafka", e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:389:
      throw new RuntimeException("Failed to drop topic " + ident.name() + " 
from Kafka", e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:402:
      throw new RuntimeException("Failed to list schemas under namespace " + 
namespace, e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:431:
      throw new RuntimeException("Failed to load schema " + ident, ioe);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:540:
      throw new RuntimeException("Failed to increase partition count for topic 
" + topicName, e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:554:
      throw new RuntimeException("Failed to alter topic properties for topic " 
+ topicName, e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:595:
      throw new RuntimeException("Failed to check if schema " + 
defaultSchemaIdent + " exists", e);
catalog-kafka/src/main/java/org/apache/gravitino/catalog/kafka/KafkaCatalogOperations.java:622:
      throw new RuntimeException("Failed to create default schema for Kafka 
catalog", ioe);
```

## catalog-lakehouse-generic (9)
```
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceTableOperations.java:349:
      throw new RuntimeException("Failed to purge Lance dataset for table " + 
ident, e);
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceTableOperations.java:383:
      throw new RuntimeException("Failed to drop Lance dataset for table " + 
ident, e);
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceTableOperations.java:401:
        throw new RuntimeException("Failed to delete Lance dataset at " + 
location, e);
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceTableOperations.java:479:
      throw new RuntimeException("Failed to create Lance dataset at location " 
+ location, e);
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceTableOperations.java:559:
      throw new RuntimeException("Failed to repair table " + ident, e);
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceTableOperations.java:670:
      throw new RuntimeException("Failed to record empty version for table " + 
ident, e);
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceTableOperations.java:795:
      throw new RuntimeException(
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/generic/GenericCatalogOperations.java:359:
        throw new RuntimeException(
catalog-lakehouse-generic/src/main/java/org/apache/gravitino/catalog/lakehouse/generic/GenericCatalogOperations.java:362:
        throw new RuntimeException(
```

## catalog-lakehouse-hudi (4)
```
catalog-lakehouse-hudi/src/main/java/org/apache/gravitino/catalog/lakehouse/hudi/backend/hms/HudiHMSBackendOps.java:103:
      throw new RuntimeException(e);
catalog-lakehouse-hudi/src/main/java/org/apache/gravitino/catalog/lakehouse/hudi/backend/hms/HudiHMSBackendOps.java:116:
      throw new RuntimeException(e);
catalog-lakehouse-hudi/src/main/java/org/apache/gravitino/catalog/lakehouse/hudi/backend/hms/HudiHMSBackendOps.java:155:
      throw new RuntimeException(e);
catalog-lakehouse-hudi/src/main/java/org/apache/gravitino/catalog/lakehouse/hudi/backend/hms/HudiHMSBackendOps.java:174:
      throw new RuntimeException(e);
```

## catalog-lakehouse-iceberg (5)
```
catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogOperations.java:242:
      throw new RuntimeException(e);
catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogOperations.java:338:
      throw new RuntimeException(e);
catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogOperations.java:365:
      throw new RuntimeException(e);
catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogOperations.java:624:
      throw new RuntimeException(e);
catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/ops/IcebergCatalogWrapperHelper.java:259:
        throw new RuntimeException("RenameTable shouldn't use tableUpdate 
interface");
```

## catalog-lakehouse-paimon (5)
```
catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java:203:
      throw new RuntimeException(e);
catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java:267:
      throw new RuntimeException(e);
catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java:564:
        throw new RuntimeException(e);
catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java:682:
      throw new RuntimeException(e);
catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/utils/CatalogUtils.java:91:
        throw new RuntimeException("Failed to login with kerberos", e);
```

## catalog-model (14)
```
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:109:
      throw new RuntimeException("Failed to list models under namespace " + 
namespace, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:124:
      throw new RuntimeException("Failed to get model " + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:154:
      throw new RuntimeException("Failed to register model " + ident, e);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:171:
      throw new RuntimeException("Failed to delete model " + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:188:
      throw new RuntimeException("Failed to list model versions for model " + 
ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:205:
      throw new RuntimeException("Failed to list model version infos for model 
" + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:262:
      throw new RuntimeException("Failed to link model version " + ident, e);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:314:
      throw new RuntimeException("Failed to alter model " + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:328:
      throw new RuntimeException("Failed to load model " + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:333:
      throw new RuntimeException("Model already exist " + ident.name(), eaee);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:424:
      throw new RuntimeException("Failed to alter model version " + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:438:
      throw new RuntimeException("Failed to load model version " + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:554:
      throw new RuntimeException("Failed to get model version " + ident, ioe);
catalog-model/src/main/java/org/apache/gravitino/catalog/model/ModelCatalogOperations.java:605:
      throw new RuntimeException("Failed to delete model version " + ident, 
ioe);
```

## hadoop-common (5)
```
hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/FileSystemUtils.java:161:
      throw new RuntimeException("Failed to create 
GravitinoFileSystemCredentialProvider", e);
hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/FileSystemUtils.java:223:
      throw new RuntimeException("Failed to create configuration", e);
hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/FileSystemUtils.java:234:
      throw new RuntimeException("Failed to write property: " + key, e);
hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProxy.java:162:
                throw new RuntimeException("Failed to invoke method", e);
hadoop-common/src/main/java/org/apache/gravitino/catalog/hadoop/fs/HDFSFileSystemProxy.java:193:
      throw new RuntimeException("Failed to login with Kerberos", e);
```

## hive-metastore-common (15)
```
hive-metastore-common/src/main/java/org/apache/gravitino/hive/kerberos/HmsKerberosClient.java:111:
      throw new RuntimeException("Failed to create proxy user for Kerberos Hive 
client", e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynConstructors.java:125:
        throw new RuntimeException(e.getCause());
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynConstructors.java:135:
        throw new RuntimeException(e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynFields.java:59:
        throw new RuntimeException(e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynFields.java:68:
        throw new RuntimeException(e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynFields.java:378:
        throw new RuntimeException(
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynMethods.java:103:
        throw new RuntimeException(e.getCause());
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynMethods.java:113:
        throw new RuntimeException(e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/dyn/DynMethods.java:446:
        throw new RuntimeException("Cannot find method: " + name);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/client/HiveClientFactory.java:112:
      throw new RuntimeException("Failed to connect to Hive Metastore", e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/client/HiveClientFactory.java:249:
      throw new RuntimeException("Failed to initialize kerberos client", e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/client/ProxyHiveClientImpl.java:69:
      throw new RuntimeException("Failed to create Kerberos Hive client", ex);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/client/Util.java:56:
      throw new RuntimeException("Failed to create configuration", e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/client/HiveClientImpl.java:183:
      throw new RuntimeException("Failed to close HiveClient", e);
hive-metastore-common/src/main/java/org/apache/gravitino/hive/client/HiveClientImpl.java:192:
      throw new RuntimeException("Failed to get current user", e);
```


</details>

GitHub link: https://github.com/apache/gravitino/discussions/11982

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to