risingwavelabs/risingwave · error · SinkError

connector not specified when alter sink

Error message

connector not specified when alter sink

What it means

When altering sink properties at runtime, the controller reads the sink's existing `connector` WITH option to know which connector's validation to apply. If the sink has no `connector` property in its stored properties, the alter is rejected with `SinkError::Config("connector not specified when alter sink")`. Every sinkable object must declare its connector type.

Source

Thrown at src/meta/src/controller/streaming_job.rs:3647

                        match_sink_name_str!(
                            connector_type.as_str(),
                            SinkType,
                            {
                                let mut new_sink_props = sink.properties.0.clone();
                                new_sink_props.extend(alter_props.clone());
                                SinkType::validate_alter_config_change(
                                    &new_sink_props,
                                    &alter_props,
                                )
                            },
                            |sink: &str| Err(SinkError::Config(anyhow!(
                                "unsupported sink type {}",
                                sink
                            )))
                        )?
                    }
                    None => {
                        return Err(SinkError::Config(anyhow!(
                            "connector not specified when alter sink"
                        ))
                        .into());
                    }
                };

                let mut new_sink_props = sink.properties.0.clone();
                new_sink_props.extend(alter_props.clone());

                // Prepare sink update
                let active_sink = sink::ActiveModel {
                    sink_id: Set(sink_id),
                    properties: Set(risingwave_meta_model::Property(new_sink_props.clone())),
                    ..Default::default()
                };
                sink_updates.push(active_sink);

                // Prepare fragment updates for this sink

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Recreate the sink including a valid `connector = '<type>'` WITH option.
  2. Verify the sink's stored properties with `SHOW SINK <name>` to confirm the connector is missing.
  3. Restore the connector property by re-creating the sink with the correct options, since runtime alteration cannot add it.
  4. Ensure the client issuing CREATE SINK always includes the connector option.

Example fix

-- before
CREATE SINK s FROM mv WITH (properties.a = '1'); -- no connector
-- after
CREATE SINK s FROM mv WITH (connector = 'kafka', properties.a = '1');
Defensive patterns

Strategy: validation

Validate before calling

-- verify the connector option exists before altering
SELECT properties FROM rw_sinks WHERE name = 'my_sink'; -- 'connector' key must be present

Prevention

When it happens

Trigger: ALTER SINK ... ALTER CONNECTOR PROPS on a sink whose stored properties lack the `connector` key — either the sink was created without a connector option or its properties were stripped/corrupted.

Common situations: Sinks created through unusual/legacy paths without a connector option; catalog rows whose properties were manually edited; upstream clients resetting connector property.

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