Marco Lugo created AVRO-4011:
--------------------------------
Summary: Schema generated via AvroSchema is not compatible with
itself
Key: AVRO-4011
URL: https://issues.apache.org/jira/browse/AVRO-4011
Project: Apache Avro
Issue Type: Bug
Components: rust
Affects Versions: 1.11.3
Environment: Rust 1.79.0
Reporter: Marco Lugo
We encountered an issue where our Avro schema generated with the AvroSchema
macro is not compatible with itself. That is, the
[can_read|https://docs.rs/apache-avro/latest/apache_avro/schema_compatibility/struct.SchemaCompatibility.html#method.can_read]
function fails to read the generated schema. Here's a minimal reproducible
example:
{code:c}
use apache_avro::AvroSchema;
#[derive(AvroSchema)]
struct Foo {
a: Vec<Bar>,
b: Vec<Bar>,
}
#[derive(AvroSchema)]
struct Bar {
value: i32,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn schema_reflexivity() {
let schema = Foo::get_schema();
println!("{}", &schema.canonical_form());
assert_eq!(&schema, &schema);
assert!(apache_avro::schema_compatibility::SchemaCompatibility::can_read(&schema,
&schema)); // this fails
}
}
{code}
This is with the only dependency in Cargo.toml being:
{code:java}
apache-avro = { version = "0.16.0", features = ["derive"] }
{code}
The automatically generated Avro schema is:
{code:json}
{
"name": "Foo",
"type": "record",
"fields": [
{
"name": "a",
"type": {
"type": "array",
"items": {
"name": "Bar",
"type": "record",
"fields": [
{
"name": "value",
"type": "int"
}
]
}
}
},
{
"name": "b",
"type": {
"type": "array",
"items": "Bar"
}
}
]
}
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)