risingwavelabs/risingwave · error · ConnectorError

No allow_alter_on_fly fields registered for connector: {conn

Error message

No allow_alter_on_fly fields registered for connector: {connector_name}

What it means

The connector name was recognized, but no allow_alter_on_fly field allowlist is registered for it, so on-the-fly field alteration cannot be validated for this source connector. The connector simply does not support altering fields on the fly (yet).

Source

Thrown at src/connector/src/allow_alter_on_fly_fields.rs:473

/// Get all connection names that have `allow_alter_on_fly` fields
pub fn get_connection_names_with_allow_alter_on_fly_fields() -> Vec<&'static str> {
    CONNECTION_ALLOW_ALTER_ON_FLY_FIELDS.keys().map(|s| s.as_str()).collect()
}

/// Checks if all given fields are allowed to be altered on the fly for the specified source connector.
/// Returns Ok(()) if all fields are allowed, otherwise returns a `ConnectorError`.
pub fn check_source_allow_alter_on_fly_fields(
    connector_name: &str,
    fields: &[String],
) -> crate::error::ConnectorResult<()> {
    // Convert connector name to the type name key
    let Some(type_name) = source_properties::source_name_to_prop_type_name(connector_name) else {
        return Err(ConnectorError::from(anyhow::anyhow!(
            "Unknown source connector: {connector_name}"
        )));
    };
    let Some(allowed_fields) = SOURCE_ALLOW_ALTER_ON_FLY_FIELDS.get(type_name) else {
    return Err(ConnectorError::from(anyhow::anyhow!(
        "No allow_alter_on_fly fields registered for connector: {connector_name}"
    )));
    };
    for field in fields {
        if !allowed_fields.contains(field) {
            return Err(ConnectorError::from(anyhow::anyhow!(
                "Field '{field}' is not allowed to be altered on the fly for connector: {connector_name}"
            )));
        }
    }
    Ok(())
}

pub fn check_connection_allow_alter_on_fly_fields(
    connection_name: &str,
    fields: &[String],
) -> crate::error::ConnectorResult<()> {
    use crate::source::connection_name_to_prop_type_name;

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Do not attempt alter-on-the-fly for this connector; recreate the source with the desired fields instead
  2. Upgrade RisingWave if the connector gained allow_alter_on_fly support in a later release
  3. Contribute/register the connector's allowed fields if you maintain a custom connector

Example fix

// before: ALTER SOURCE s ADD COLUMN ... (unsupported connector)
// after: recreate
DROP SOURCE s;
CREATE SOURCE s (... new fields ...) WITH (connector = 'nexmark', ...);
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check support before issuing alter-on-the-fly
if !SUPPORTS_ALTER_ON_FLY.contains(&connector) {
    plan_recreate_source(connector, new_fields)?; // avoid unsupported ALTER
}

Try / catch

match res {
    Err(e) if e.to_string().contains("No allow_alter_on_fly fields registered") => {
        // fall back to drop-and-recreate workflow
    }
    other => other?,
}

Prevention

When it happens

Trigger: Running ALTER SOURCE (alter on the fly) for a source whose connector exists in source_name_to_prop_type_name but has no entry in SOURCE_ALLOW_ALTER_ON_FLY_FIELDS.

Common situations: Attempting on-the-fly field changes on connectors that haven't opted in to the feature; running a newer feature against an older connector registration set.

Related errors


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