apache/seatunnel · error · IllegalArgumentException
Gravitino metalake is required. Please configure…
Error message
Gravitino metalake is required. Please configure 'seatunnel.engine.datasource.metalake' in seatunnel.yaml
What it means
GravitinoMetadataProvider.init validated its configuration and found 'seatunnel.engine.datasource.metalake' missing or empty. The metalake name scopes all catalog/datasource lookups in Gravitino, so the provider refuses to start without it even when the URI is configured.
Solutions
- Set seatunnel.engine.datasource.metalake to an existing Gravitino metalake in seatunnel.yaml
- Verify the metalake actually exists in the Gravitino instance (list metalakes via the Gravitino API/CLI)
- Restart the node after saving the configuration
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metadata/gravitino/GravitinoMetadataProvider.java:145 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/fb4cb15f74fff313.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metadata/gravitino/GravitinoMetadataProvider.java:145
@Override
public String kind() {
return "gravitino";
}
@Override
public void init(Config config) {
// Extract Gravitino-specific configuration
String uri = config.getString(URI.key());
String metalake = config.getString(METALAKE.key());
log.info("Gravitino server URI: {}", uri);
log.info("Gravitino metalake name: {}", metalake);
// Validate required parameters
if (uri == null || uri.isEmpty()) {
throw new IllegalArgumentException(
"Gravitino URI is required. Please configure 'seatunnel.engine.datasource.uri' in seatunnel.yaml");
}
if (metalake == null || metalake.isEmpty()) {
throw new IllegalArgumentException(
"Gravitino metalake is required. Please configure 'seatunnel.engine.datasource.metalake' in seatunnel.yaml");
}
this.uri = uri;
this.metalake = metalake;
this.client = new GravitinoClient();
this.tableSchemaConvertor = new GravitinoTableSchemaConvertor();
}
@Override
public Map<String, Object> datasourceMap(
String connectorIdentifier, String metaDataDatasourceId) {
if (!JDBC_CONNECTOR.equalsIgnoreCase(connectorIdentifier)) {
log.warn(
"Unsupported connector '{}' for Gravitino provider, only '{}' is supported",
connectorIdentifier,
JDBC_CONNECTOR);
return Collections.emptyMap();
}View on GitHub (pinned to cf67b549a7)