risingwavelabs/risingwave · error

`warehouse.path` must be set in glue catalog

Error message

`warehouse.path` must be set in glue catalog

What it means

Configuration validation error raised while building AWS Glue catalog config for an Iceberg sink/source: the glue catalog requires a `warehouse.path` property (the S3 warehouse location where Iceberg tables are stored) and it was absent from the user's with-clause options. Without it the catalog cannot resolve table locations.

Source

Thrown at src/connector/src/connector_common/iceberg/mod.rs:751

        }
        if let Some(access_key) = &self.s3_access_key {
            iceberg_configs.insert(S3_ACCESS_KEY_ID.to_owned(), access_key.clone());
        }
        if let Some(secret_key) = &self.s3_secret_key {
            iceberg_configs.insert(S3_SECRET_ACCESS_KEY.to_owned(), secret_key.clone());
        }
        if let Some(role_arn) = &self.s3_iam_role_arn {
            iceberg_configs.insert(S3_ASSUME_ROLE_ARN.to_owned(), role_arn.clone());
        }
        iceberg_configs.insert(
            S3_PATH_STYLE_ACCESS.to_owned(),
            self.effective_s3_path_style_access().to_string(),
        );
        iceberg_configs.insert(
            iceberg_catalog_glue::GLUE_CATALOG_PROP_WAREHOUSE.to_owned(),
            self.warehouse_path
                .clone()
                .ok_or_else(|| anyhow!("`warehouse.path` must be set in glue catalog"))?,
        );
        if let Some(uri) = self.catalog_uri.as_deref() {
            iceberg_configs.insert(
                iceberg_catalog_glue::GLUE_CATALOG_PROP_URI.to_owned(),
                uri.to_owned(),
            );
        }

        Ok(CatalogBuildPlan::NativeGlue(iceberg_configs))
    }

    /// For both V1 and V2.
    fn build_jni_catalog_configs(
        &self,
        catalog_impl: JniCatalogImpl,
        java_catalog_props: &HashMap<String, String>,
    ) -> ConnectorResult<(HashMap<String, String>, HashMap<String, String>)> {
        let mut iceberg_configs = HashMap::new();

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Add `warehouse.path` (e.g. 's3://bucket/warehouse') to the with-options.
  2. Ensure it matches the S3 bucket/region configured for Glue databases.
  3. Verify other Glue props (s3.region, credentials) are set alongside it.

Example fix

// before
with ( connector='iceberg', catalog.type='glue', s3.region='us-east-1' )
// after
with (
  connector='iceberg', catalog.type='glue',
  s3.region='us-east-1',
  warehouse.path='s3://my-bucket/warehouse'
)
Defensive patterns

Strategy: validation

Validate before calling

if (catalogType === 'glue' && !opts['warehouse.path']) {
  throw new Error("`warehouse.path` must be set in glue catalog");
}

Try / catch

catch (e) { if (String(e).includes('glue catalog')) { /* ask for warehouse.path and resubmit */ } else { throw e; } }

Prevention

When it happens

Trigger: Creating an Iceberg sink/source with `catalog.type = 'glue'` without a `warehouse.path` with-option.

Common situations: Assuming Glue infers the warehouse (iceberg-java may not require it); config copied from a Hive-catalog setup; omitted during migration to Glue.

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/0a3408d864a7ef6a. Report an issue: GitHub.