[
https://issues.apache.org/jira/browse/AVRO-3370?focusedWorklogId=734110&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-734110
]
ASF GitHub Bot logged work on AVRO-3370:
----------------------------------------
Author: ASF GitHub Bot
Created on: 28/Feb/22 19:12
Start Date: 28/Feb/22 19:12
Worklog Time Spent: 10m
Work Description: opwvhk commented on a change in pull request #1573:
URL: https://github.com/apache/avro/pull/1573#discussion_r816176372
##########
File path: doc/content/en/docs/next/Specification/_index.md
##########
@@ -251,7 +250,9 @@ The fullname of a record, enum or fixed definition is
determined by the required
References to previously defined names are as in the latter two cases above:
if they contain a dot they are a fullname, if they do not contain a dot, the
namespace is the namespace of the enclosing definition.
-Primitive type names have no namespace and their names may not be defined in
any namespace.
+Primitive type names (`null`, `boolean`, `int`, `long`, `float`, `double`,
`bytes`, `string`) have no namespace and their names may not be defined in any
namespace.
+
+Complex types (`record`, `enum`, `array`, `map`, `fixed`) have no namespace,
but their names (as well as `union`) are permitted to be reused as type names.
This can be confusing to the human reader, but is always unambiguous for binary
serialization. Due to the limitations of JSON encoding, it is a best practice
to use a namespace with these names.
Review comment:
Initially, I read this as "it is best to use these names in a
namespace"...
Can we please use phrasing like this instead?
"..., it is a best practice to use a namespace when using these names."
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 734110)
Time Spent: 2h 10m (was: 2h)
> [Spec] Inconsistent behaviour on types as invalid names.
> --------------------------------------------------------
>
> Key: AVRO-3370
> URL: https://issues.apache.org/jira/browse/AVRO-3370
> Project: Apache Avro
> Issue Type: Bug
> Reporter: Ryan Skraba
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.11.1
>
> Time Spent: 2h 10m
> Remaining Estimate: 0h
>
> We've run across this in some code that interoperates between Java and Python.
> The spec [currently
> forbids|https://avro.apache.org/docs/current/spec.html#names] using a
> primitive type name as a keyword: _*Primitive type names have no namespace
> and their names may not be defined in any namespace.*_
> {code:java}
> {"type":"record","name":"long","fields":[{"name":"a1","type":"long"}]} {code}
> That fails in Java with {{"org.apache.avro.AvroTypeException: Schemas may not
> be named after primitives: long"}}
> What do we expect to happen when a named schema uses a complex type?
> {code:java}
> {"type":"record","name":"record","fields":[{"name":"a1","type":"long"}]}
> {code}
> This currently *succeeds* in Java and the schema can be used to serialize and
> deserialize data.
> This currently *fails* in Python with: {{avro.schema.SchemaParseException:
> record is a reserved type name}}
> Which one is the correct behaviour?
> This gets a bit more complicated when we consider using the name as a
> reference.
> The following two schemas both work in Java:
> {code:java}
> {"type":"record","name":"LinkedList",
> "fields":[
> {"name":"value","type":"int},
> {"name":"next","type":["null","LinkedList"]}]}" {code}
> {code:java}
> {"type":"record","name":"LinkedList",
> "fields":[
> {"name":"value","type":"int},
> {"name":"next","type":["null",{"type":"LinkedList"}]}]}"
> {code}
> If we rename {{LinkedList}} to {{record}} the former succeeds in Java and the
> latter fails with {{{}org.apache.avro.SchemaParseException: No name in
> schema: {"type":"record"{}}}}
> {*}Edit{*}: The consensus on the [mailing
> list|https://lists.apache.org/thread/0wmgyx6z69gy07lvj9ndko75752b8cn2] is the
> "permissive" behaviour of Java should be adopted, in order to align the SDKs.
> The specification doesn't currently forbid these, and this should be
> clarified explicitly. We should probably say that it's a best practice to
> avoid doing this, especially in the null namespace, since it can be confusing
> to a reader and potentially cause ambiguities when JSON encoding data.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)