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]