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

  1. 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).
  2. If using a REST catalog, ensure catalog.type is 'rest' so the warehouse comes from the REST server.
  3. 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

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


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/278b20ee1886b35b. Report an issue: GitHub.