[ 
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)

Reply via email to