You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Rik Heijdens (Jira)" <ji...@apache.org> on 2023/07/26 13:40:00 UTC

[jira] [Created] (AVRO-3814) Schema resolution fails when extending a nested record with a union type

Rik Heijdens created AVRO-3814:
----------------------------------

             Summary: Schema resolution fails when extending a nested record with a union type
                 Key: AVRO-3814
                 URL: https://issues.apache.org/jira/browse/AVRO-3814
             Project: Apache Avro
          Issue Type: Bug
          Components: rust
            Reporter: Rik Heijdens


Consider the following schema:

{noformat}
{
    "type": "record",
    "name": "MyOuterRecord",
    "fields": [
        {
            "name": "inner_record",
            "type": [
                "null",
                {
                    "type": "record",
                    "name": "MyRecord",
                    "fields": [
                        {"name": "a", "type": "string"}
                    ]
                }
            ],
            "default": null
        }
    ]
}
{noformat}

Over time one might decide to add a new optional enum field 'b' to `MyRecord`, resulting in the following schema:

{noformat}
{
    "type": "record",
    "name": "MyOuterRecord",
    "fields": [
        {
            "name": "inner_record",
            "type": [
                "null",
                {
                    "type": "record",
                    "name": "MyRecord",
                    "fields": [
                        {"name": "a", "type": "string"},
                        {
                            "name": "b",
                            "type": [
                                "null",
                                {
                                    "type": "enum",
                                    "name": "MyEnum",
                                    "symbols": ["A", "B", "C"],
                                    "default": "C"
                                }
                            ],
                            "default": null
                        }
                    ]
                }
            ]
        }
    ],
    "default": null
}
{noformat}

When one then serializes a message with the updated schema, and then attempts to deserialize it using the updated schema, while attempting to resolve it with the earlier schema, then schema resolution in Value::resolve_union() fails with `Error::FindUnionVariant`. This appears to be caused by `UnionSchema.find_schema_with_known_schemata()` failing to resolve the schema appropriately.

I would not expect schema resolution to fail in this case. I will accompany this ticket with a test-case that allows reproduction.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)