risingwavelabs/risingwave · error
`warehouse.path` must be set in {} catalog
Error message
`warehouse.path` must be set in {} catalog What it means
When creating an Iceberg source/sink, the catalog's warehouse path must be supplied via the catalog's storage config; if the storage (S3/GCS/OSS/...) bucket/path block is absent, the connector requires `warehouse.path` unless the catalog is a REST catalog (which carries its own warehouse). This bail happens while populating Iceberg catalog configs.
Source
Thrown at src/connector/src/connector_common/iceberg/mod.rs:949
.with_context(|| {
format!(
"Invalid s3 path: {}, bucket is missing",
warehouse_path
)
})?
.to_owned();
let root = url.path().trim_start_matches('/').to_owned();
(Some(bucket), Some(root))
}
};
if let Some(bucket) = bucket {
iceberg_configs.insert("iceberg.table.io.bucket".to_owned(), bucket);
}
}
None => {
if catalog_impl != JniCatalogImpl::Rest {
bail!("`warehouse.path` must be set in {} catalog", catalog_type);
}
}
}
iceberg_configs.insert(
S3_DISABLE_CONFIG_LOAD.to_owned(),
(!enable_config_load).to_string(),
);
iceberg_configs.insert(
GCS_DISABLE_CONFIG_LOAD.to_owned(),
(!enable_config_load).to_string(),
);
iceberg_configs.insert(
S3_PATH_STYLE_ACCESS.to_owned(),
self.effective_s3_path_style_access().to_string(),
);
View on GitHub (pinned to 6469eb736d)
Solutions
- Set the warehouse location field in with-props (e.g. 'warehouse.path' or the storage path key for your catalog, like s3.path with bucket).
- If using a REST catalog, ensure catalog.type is 'rest' so the warehouse comes from the REST server.
- Verify the catalog type in the DDL matches the storage config actually supplied.
Example fix
-- before WITH ( 'catalog.type' = 'glue' ) -- after WITH ( 'catalog.type' = 'glue', 'warehouse.path' = 's3a://my-bucket/warehouse' )
Defensive patterns
Strategy: validation
Validate before calling
-- pre-flight: every non-rest iceberg catalog must carry a warehouse location SELECT catalog_type, warehouse_path FROM my_catalogs WHERE catalog_type = 'iceberg' AND (catalog_impl <> 'rest' AND warehouse_path IS NULL);
Prevention
- Always include the warehouse/storage path key in iceberg catalog with-props.
- Set catalog.type = 'rest' only when the REST server supplies the warehouse.
- Lint DDL templates so the storage block is never omitted.
When it happens
Trigger: CREATE SOURCE/SINK with an iceberg catalog whose catalog.type is hive/glue/jdbc/sql and whose with-props lack the storage location (e.g. s3.path / warehouse location) — the storage path block is None and catalog_impl != Rest.
Common situations: Defining a Glue or Hive catalog without a warehouse location; forgetting the endpoint/s3.path style fields; using a REST catalog config but forgetting catalog.type=rest so validation treats it as non-REST.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- `catalog.type` must be set
- create iceberg catalog for pk-index sink
- Failed to list iceberg namespaces.
- Failed to load iceberg table.
- Failed to drop iceberg table.
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/278b20ee1886b35b.
Report an issue: GitHub.