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)