{"record":{"id":"f1051ca01170111e","repo":"risingwavelabs/risingwave","slug":"private-link-connection-has-been-deprecated","errorCode":null,"errorMessage":"Private Link Connection has been deprecated","messagePattern":"Private Link Connection has been deprecated","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src/meta/service/src/ddl_service.rs","lineNumber":1035,"sourceCode":"    ) -> Result<Response<GetDdlProgressResponse>, Status> {\n        Ok(Response::new(GetDdlProgressResponse {\n            ddl_progress: self.ddl_controller.get_ddl_progress().await?,\n        }))\n    }\n\n    async fn create_connection(\n        &self,\n        request: Request<CreateConnectionRequest>,\n    ) -> Result<Response<CreateConnectionResponse>, Status> {\n        let req = request.into_inner();\n        if req.payload.is_none() {\n            return Err(Status::invalid_argument(\"request is empty\"));\n        }\n\n        match req.payload.unwrap() {\n            #[expect(deprecated)]\n            create_connection_request::Payload::PrivateLink(_) => {\n                panic!(\"Private Link Connection has been deprecated\")\n            }\n            create_connection_request::Payload::ConnectionParams(params) => {\n                let pb_connection = Connection {\n                    id: 0.into(),\n                    schema_id: req.schema_id,\n                    database_id: req.database_id,\n                    name: req.name,\n                    info: Some(ConnectionInfo::ConnectionParams(params)),\n                    owner: req.owner_id,\n                };\n                let version = self\n                    .ddl_controller\n                    .run_command(DdlCommand::CreateConnection(pb_connection))\n                    .await?;\n                Ok(Response::new(CreateConnectionResponse { version }))\n            }\n        }\n    }","sourceCodeStart":1017,"sourceCodeEnd":1053,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/service/src/ddl_service.rs#L1017-L1053","documentation":"create_connection in src/meta/service/src/ddl_service.rs:1035 unconditionally panics with this message when a CreateConnectionRequest carries the legacy PrivateLink payload. Private Link connections were removed from RisingWave; the variant is kept only to fail fast on clients still sending it.","triggerScenarios":"Issuing CREATE CONNECTION with a private-link payload, typically via an old CLI, old SDK, or a hand-built CreateConnectionRequest with `Payload::PrivateLink`.","commonSituations":"Scripts or terraform/tooling written against older RisingWave versions that supported AWS PrivateLink connections, run against a newer cluster.","solutions":["Remove the private link connection usage; use `ConnectionParams` (e.g. Kafka/ES connection params) instead.","Upgrade or rewrite the client/tooling to a version whose CREATE CONNECTION request uses the ConnectionParams payload.","Configure VPC connectivity at the infrastructure layer rather than as a RisingWave connection object."],"exampleFix":"// before (legacy client payload)\npayload: create_connection_request::Payload::Privatelink(privatelink)\n\n// after\npayload: create_connection_request::Payload::ConnectionParams(connection_params)","handlingStrategy":"validation","validationCode":"// client-side guard before building the request\nif (request.getPayloadCase() === CreateConnectionRequest.PayloadCase.PRIVATE_LINK) {\n  throw new Error('Private Link connections are deprecated; use ConnectionParams');\n}","typeGuard":"function isLegacyPrivateLink(payload) {\n  return payload && 'privatelink' in payload;\n}","tryCatchPattern":"// This panics server-side (no catchable status); guard before sending.\ntry {\n  await client.createConnection(req);\n} catch (e) {\n  if (e.message?.includes('Private Link Connection has been deprecated')) {\n    throw new Error('Upgrade client: rebuild request with ConnectionParams payload');\n  }\n  throw e;\n}","preventionTips":["Upgrade RisingWave clients/SDKs when upgrading the cluster; check deprecation notes.","Grep legacy automation (terraform, scripts) for private-link connection creation.","Configure VPC connectivity outside RisingWave instead of private-link connection objects."],"tags":["deprecated","connection","private-link","panic"],"backgroundTag":"deprecated-api-usage","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}