quickwit-oss/quickwit · error

Kinesis region or endpoint cannot be updated

Error message

Kinesis region or endpoint cannot be updated

What it means

Alongside the stream name, a Kinesis source's `region_or_endpoint` is also immutable across updates: checkpoints keyed by shard IDs assume a single stream, and changing the region/endpoint would silently point at a different stream with colliding shard IDs. `KinesisSourceParams::validate_update` rejects any update that changes this field.

Source

Thrown at quickwit/quickwit-config/src/source_config/mod.rs:506

pub struct KinesisSourceParams {
    pub stream_name: String,
    #[serde(flatten)]
    pub region_or_endpoint: Option<RegionOrEndpoint>,
    /// When backfill mode is enabled, the source exits after reaching the end of the stream.
    #[serde(skip_serializing_if = "is_false")]
    pub enable_backfill_mode: bool,
}

impl KinesisSourceParams {
    fn validate_update(&self, other: &Self) -> anyhow::Result<()> {
        // Changing the stream would likely mess up the checkpoints because the
        // Kinesis shard IDs are used as metastore checkpoint PartitionId, and
        // there uniqueness is only guaranteed within a stream.
        ensure!(
            self.stream_name == other.stream_name,
            "Kinesis stream_name cannot be updated"
        );
        ensure!(
            self.region_or_endpoint == other.region_or_endpoint,
            "Kinesis region or endpoint cannot be updated"
        );
        Ok(())
    }
}

#[derive(Clone, Debug, Eq, PartialEq, Deserialize)]
#[serde(deny_unknown_fields)]
struct KinesisSourceParamsInner {
    pub stream_name: String,
    pub region: Option<String>,
    pub endpoint: Option<String>,
    #[serde(default)]
    pub enable_backfill_mode: bool,
}

impl TryFrom<KinesisSourceParamsInner> for KinesisSourceParams {

View on GitHub (pinned to a39730c5cd)

Solutions

  1. Delete the existing Kinesis source and create a new one with the new region_or_endpoint.
  2. Keep `region_or_endpoint` identical to the stored value and change only mutable params.
  3. If the region changed only in formatting, submit the value exactly as originally configured (same string) to pass the equality check.

Example fix

// before: update with region_or_endpoint: us-east-2 (stored: us-east-1) -> rejected

// after: recreate source
quickwit source delete --index my-index --source kinesis-src
quickwit source create --index my-index --source-config kinesis-use2.json
Defensive patterns

Strategy: validation

Validate before calling

let current = client.get_source(index_id, source_id).await?;
if current.params.region_or_endpoint != new_params.region_or_endpoint {
    return Err("Kinesis region_or_endpoint is immutable; recreate the source".into());
}
client.update_source(index_id, source_id, new_params).await?;

Try / catch

match client.update_source(index_id, source_id, params).await {
    Err(e) if e.to_string().contains("region or endpoint cannot be updated") => {
        client.delete_source(index_id, source_id).await?;
        client.create_source(index_id, source_config_new_region).await?;
    }
    other => other?,
}

Prevention

When it happens

Trigger: Updating a Kinesis source config where `region_or_endpoint` differs from the stored value (e.g. changing region string or custom endpoint URL), failing validate_update.

Common situations: Moving the cluster or index to another AWS region and trying to retarget the source; switching between a localstack/custom endpoint and real AWS; region string format normalized differently between config and stored value.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08). Data as JSON: /api/errors/0d7d64e2a0b337a4. Report an issue: GitHub.