[
https://issues.apache.org/jira/browse/AVRO-3466?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Martin Tzvetanov Grigorov resolved AVRO-3466.
---------------------------------------------
Fix Version/s: 1.11.1
1.12.0
Resolution: Fixed
> Rust: serialize Schema to JSON loses inner namespace names
> ----------------------------------------------------------
>
> Key: AVRO-3466
> URL: https://issues.apache.org/jira/browse/AVRO-3466
> Project: Apache Avro
> Issue Type: Bug
> Components: rust
> Affects Versions: 1.11.1
> Environment: stable-x86_64-apple-darwin (default)
> rustc 1.56.1 (59eed8a2a 2021-11-01)
> apache-avro git commit a4e42112cea95 (master at the time)
>
> Reporter: Kevin
> Assignee: Jack Klamer
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.11.1, 1.12.0
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> Inner namespace for {{enum}} type in a Record field is lost when Schema
> serialized to JSON.
> An example failing Unit test for {{schema.rs}} demonstrates the problem:
> {code:java}
> #[test]
> fn kvc_test_to_json_inner_enum_inner_namespace() {
> let schema = r#"
> {
> "name": "record_name",
> "namespace": "space",
> "type": "record",
> "fields": [
> {
> "name": "outer_field_1",
> "type": [
> "null",
> {
> "type":"enum",
> "name":"inner_enum_name",
> "namespace": "inner_space",
> "symbols":["Extensive","Testing"]
> }
> ]
> },
> {
> "name": "outer_field_2",
> "type" : "inner_space.inner_enum_name"
> }
> ]
> }
> "#;
> let schema = Schema::parse_str(schema).unwrap();
> let rs = ResolvedSchema::try_from(&schema).expect("Schema didn't
> successfully parse");
> // confirm we have expected 2 full-names
> assert!(rs.get_names().len() == 2);
> for s in &["space.record_name", "inner_space.inner_enum_name"] {
> assert!(rs.get_names().contains_key(&Name::new(s).unwrap()));
> }
> // convert Schema back to JSON string
> // BUG: this operation loses the inner enum namespace "inner_space"
> let schema = serde_json::to_string(&schema).expect("test failed");
> println!("{}", schema);
> // confirm we can parse it again, this fails because JSON string lost
> inner enum namespace
> let _schema = Schema::parse_str(&schema).expect("test failed");
> } {code}
> above run against recent {{master}} (commit {{{}66827318f0a134e8f6{}}}) fails
> with:
> {code:java}
> {"type":"record","namespace":"space","name":"record_name","fields":[{"name":"outer_field_1","type":["null",{"type":"enum","name":"inner_enum_name","symbols":["Extensive","Testing"]}]},{"name":"outer_field_2","type":"inner_space.inner_enum_name"}]}test
> failed: ParsePrimitive("inner_space.inner_enum_name")
> thread 'schema::tests::kvc_test_to_json_inner_enum_inner_namespace' panicked
> at 'test failed: ParsePrimitive("inner_space.inner_enum_name")',
> avro/src/schema.rs:2862:50
> {code}
> Notice in the above that {{inner_enum_name}} in the output JSON is lacking
> the {{namespace}} attribute of the input JSON.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)