{"record":{"id":"c3f39af1652cb560","repo":"risingwavelabs/risingwave","slug":"protobuf-file-location-not-provided","errorCode":null,"errorMessage":"protobuf file location not provided","messagePattern":"protobuf file location not provided","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/parser/config.rs","lineNumber":223,"sourceCode":"                        topic: get_kafka_topic(&options_with_secret)?.clone(),\n                    }\n                } else {\n                    SchemaLocation::File {\n                        url: info.row_schema_location,\n                        aws_auth_props: Some(\n                            serde_json::from_value::<AwsAuthProps>(\n                                serde_json::to_value(format_encode_options_with_secret).unwrap(),\n                            )\n                            .map_err(|e| anyhow::anyhow!(e))?,\n                        ),\n                    }\n                };\n                EncodingProperties::Avro(config)\n            }\n            (SourceFormat::Plain, SourceEncode::Protobuf)\n            | (SourceFormat::Upsert, SourceEncode::Protobuf) => {\n                if info.row_schema_location.is_empty() {\n                    bail!(\"protobuf file location not provided\");\n                }\n                let mut messages_as_jsonb = if let Some(messages_as_jsonb) =\n                    format_encode_options_with_secret.get(PROTOBUF_MESSAGES_AS_JSONB)\n                {\n                    messages_as_jsonb.split(',').map(|s| s.to_owned()).collect()\n                } else {\n                    HashSet::new()\n                };\n                messages_as_jsonb.insert(\"google.protobuf.Any\".to_owned());\n\n                let mut config = ProtobufProperties {\n                    message_name: info.proto_message_name.clone(),\n                    key_message_name: info.key_message_name.clone(),\n                    messages_as_jsonb,\n                    ..Default::default()\n                };\n                config.schema_location = if info.use_schema_registry {\n                    SchemaLocation::Confluent {","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/parser/config.rs#L205-L241","documentation":"When the encode format is Protobuf, the `row_schema_location` option (path/URL to the .pb protobuf descriptor or schema file) is mandatory. An empty value means the parser cannot obtain message descriptors, so parser construction fails immediately.","triggerScenarios":"Creating a source with FORMAT PLAIN/Upsert ENCODE PROTOBUF without setting row_schema_location, or setting it to ''.","commonSituations":"Forgetting the option in the CREATE SOURCE DDL; copying a config from a non-protobuf source; the schema file path removed/left blank by templating.","solutions":["Add `row_schema_location = 'path/to/file.pb'` to the ENCODE PROTOBUF options, pointing at the compiled FileDescriptorSet","Generate the descriptor with protoc --descriptor_set_out if only .proto files exist","Verify the option is present via SHOW SOURCE after creation"],"exampleFix":"-- before\nFORMAT PLAIN ENCODE PROTOBUF ()\n-- after\nFORMAT PLAIN ENCODE PROTOBUF (row_schema_location='/path/to/schema.pb', row_message='my.package.MyMessage')","handlingStrategy":"validation","validationCode":"if (!protobufOptions.row_schema_location) throw new Error(\"row_schema_location is required for ENCODE PROTOBUF\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Generate and commit the .pb descriptor alongside source definitions","Use a CREATE SOURCE checklist requiring row_schema_location + row_message for protobuf","Template protobuf sources with both fields pre-filled"],"tags":["protobuf","config","source-definition"],"backgroundTag":"missing-required-config-field","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}