risingwavelabs/risingwave · error
protobuf file location not provided
Error message
protobuf file location not provided
What it means
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.
Source
Thrown at src/connector/src/parser/config.rs:223
topic: get_kafka_topic(&options_with_secret)?.clone(),
}
} else {
SchemaLocation::File {
url: info.row_schema_location,
aws_auth_props: Some(
serde_json::from_value::<AwsAuthProps>(
serde_json::to_value(format_encode_options_with_secret).unwrap(),
)
.map_err(|e| anyhow::anyhow!(e))?,
),
}
};
EncodingProperties::Avro(config)
}
(SourceFormat::Plain, SourceEncode::Protobuf)
| (SourceFormat::Upsert, SourceEncode::Protobuf) => {
if info.row_schema_location.is_empty() {
bail!("protobuf file location not provided");
}
let mut messages_as_jsonb = if let Some(messages_as_jsonb) =
format_encode_options_with_secret.get(PROTOBUF_MESSAGES_AS_JSONB)
{
messages_as_jsonb.split(',').map(|s| s.to_owned()).collect()
} else {
HashSet::new()
};
messages_as_jsonb.insert("google.protobuf.Any".to_owned());
let mut config = ProtobufProperties {
message_name: info.proto_message_name.clone(),
key_message_name: info.key_message_name.clone(),
messages_as_jsonb,
..Default::default()
};
config.schema_location = if info.use_schema_registry {
SchemaLocation::Confluent {View on GitHub (pinned to 6469eb736d)
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
Example fix
-- before FORMAT PLAIN ENCODE PROTOBUF () -- after FORMAT PLAIN ENCODE PROTOBUF (row_schema_location='/path/to/schema.pb', row_message='my.package.MyMessage')
Defensive patterns
Strategy: validation
Validate before calling
if (!protobufOptions.row_schema_location) throw new Error("row_schema_location is required for ENCODE PROTOBUF"); Prevention
- 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
When it happens
Trigger: Creating a source with FORMAT PLAIN/Upsert ENCODE PROTOBUF without setting row_schema_location, or setting it to ''.
Common situations: 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.
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
- unused FORMAT ENCODE option: key.message='{name}'
- Unsupported format {:?} encode {:?}
- Can't find message proto {}
- {e}
- query_epoch not set in distributed lookup join
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/c3f39af1652cb560.
Report an issue: GitHub.