[
https://issues.apache.org/jira/browse/AVRO-3974?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17836057#comment-17836057
]
ASF subversion and git services commented on AVRO-3974:
-------------------------------------------------------
Commit c1167fd3ac673cb40ebd9ed717a5587926e9db43 in avro's branch
refs/heads/avro-3974-compatibility-check-for-schema-refs from Martin Tzvetanov
Grigorov
[ https://gitbox.apache.org/repos/asf?p=avro.git;h=c1167fd3a ]
AVRO-3974: [Rust] Support schema compatibility for Schema::Ref
Signed-off-by: Martin Tzvetanov Grigorov <[email protected]>
> [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
>
> 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)