[ https://issues.apache.org/jira/browse/AVRO-3974?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17836058#comment-17836058 ]
Martin Tzvetanov Grigorov commented on AVRO-3974: ------------------------------------------------- [~mknaw] Please review https://github.com/apache/avro/pull/2847 > [Rust] incorrect compatibility checks with ref fields > ----------------------------------------------------- > > Key: AVRO-3974 > URL: https://issues.apache.org/jira/browse/AVRO-3974 > Project: Apache Avro > Issue Type: Bug > Components: rust > Reporter: mknaw > Priority: Minor > Labels: pull-request-available > Time Spent: 10m > Remaining Estimate: 0h > > A schema with a field that is a ref to a different schema is incompatible > with itself, per `SchemaCompatibility`: > {code:java} > use apache_avro::{schema_compatibility::SchemaCompatibility, Schema}; > fn main() { > let schema_strs = vec![ > r#"{ > "type": "record", > "name": "Child", > "namespace": "avro", > "fields": [ > { > "name": "val", > "type": "int" > } > ] > } > "#, > r#"{ > "type": "record", > "name": "Parent", > "namespace": "avro", > "fields": [ > { > "name": "child", > "type": "avro.Child" > } > ] > } > "#, > ]; > > let schemas = Schema::parse_list(&schema_strs).unwrap(); > if let Err(e) = SchemaCompatibility::can_read( > &schemas[1], > &schemas[1] > ) { > eprintln!("{}", e); > } > } {code} > > Here it is somewhat ambiguous to me how the fix should look. of course the > simplest (and already an improvement over the current state) is just to > verify the names are the same, and maybe it's assumed callers doing compat > checks across a batch will check the compat of the referenced schema > separately from the referencing schema. But this isn't quite satisfactory - > imagine having a complex field that was previously defined inline, but now > want to reuse it across multiple schemas. In this case, it does not seem like > replacing the inline definition with a ref should be incompatible. So, it > seems that some sort of "recursive flattening" of the schema prior to compat > check would be the ideal fix. Or, maybe, the compat check just checks on > names, but callers who want this behavior can do some (new?) "flattening" > operation on some schema among `ResolvedSchema`, and then use that as the > argument for compat checks. > This appears to be the case both on `main` at the time of writing > (`00afbaed`) and `0.16.0`. -- This message was sent by Atlassian Jira (v8.20.10#820010)