risingwavelabs/risingwave · error · RpcError

wait version not set

Error message

wait version not set

What it means

create_connection expects the meta node to return a WaitVersion in resp.version, which the frontend awaits to know when the DDL change is visible. If the response omits version (None), this error is raised. It indicates the meta service returned a response that violates the expected contract.

Solutions

  1. Upgrade the meta node to match the client's expected response contract
  2. Check meta node logs for the create_connection failure that left version unset
  3. Handle resp.status on the meta side so failures return an error instead of an empty version
  4. Retry the operation after confirming meta node health
Defensive patterns

Strategy: retry

Validate before calling

// verify meta node version supports WaitVersion in connection responses
// e.g. check /health or cluster version before issuing DDL

Try / catch

let resp = client.create_connection(req).await
    .with_context(|| "create_connection: empty WaitVersion returned by meta")?;

Prevention

When it happens

Trigger: Calling MetaClient::create_connection when the meta node returns a CreateConnectionResponse with no version field set (older meta node, or meta-side failure silently swallowed — see the TODO about resp.status).

Common situations: Version skew between client and meta node where the old meta does not populate version; meta node hitting an internal error path that skips setting version.

Related errors


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

Appendix: source

Thrown at src/rpc_client/src/meta_client.rs:209

    pub async fn create_connection(
        &self,
        connection_name: String,
        database_id: DatabaseId,
        schema_id: SchemaId,
        owner_id: UserId,
        req: create_connection_request::Payload,
    ) -> Result<WaitVersion> {
        let request = CreateConnectionRequest {
            name: connection_name,
            database_id,
            schema_id,
            owner_id,
            payload: Some(req),
        };
        let resp = self.inner.create_connection(request).await?;
        Ok(resp
            .version
            .ok_or_else(|| anyhow!("wait version not set"))?)
    }

    pub async fn create_secret(
        &self,
        secret_name: String,
        database_id: DatabaseId,
        schema_id: SchemaId,
        owner_id: UserId,
        value: Vec<u8>,
    ) -> Result<WaitVersion> {
        let request = CreateSecretRequest {
            name: secret_name,
            database_id,
            schema_id,
            owner_id,
            value,
        };
        let resp = self.inner.create_secret(request).await?;

View on GitHub (pinned to 6469eb736d)