Andrei Leibovski created AVRO-3528:
--------------------------------------

             Summary: Optionally support strict LogicalType parsing
                 Key: AVRO-3528
                 URL: https://issues.apache.org/jira/browse/AVRO-3528
             Project: Apache Avro
          Issue Type: Improvement
          Components: java
    Affects Versions: 1.11.0
            Reporter: Andrei Leibovski


My organization uses Avro schemas extensively. We use Confluent schema registry 
for data governance, enforcing data contracts between various components. We 
are seeing proliferation of questionable LogicalType structures within our 
schemas, like the following:
{code:java}
{
  "namespace": "org.apache.avro.example",
  "type": "record",
  "name": "BadLogical",
  "fields": [
   {
     "name": "f0",
     "type":{
       "type": "string",
       "java-class": "java.math.BigDecimal",
       "logicalType": "decimal",
       "precision": 9,
       "scale": 2
     }
   }
  ]
} {code}
There are two issues in the above structure:
 # string is not allowed to back the decimal LogicalType
 # java-class property and some others, are incompatible for any LogicalType

Currently Avro allows such structures to pass validation and has no option to 
disallow them. Since Confluent schema registry delegates all avro schema 
validation to Avro, these structures are allowed to be registered.

*Proposition:*

Implement an option to switch avro Schema.Parser to LogicalType strict mode 
where such structures will be detected and disallowed.

The change is fairly trivial, most of the plumbing is already there. I have 
implemented the required functionality and covered it with with tests, but I 
would like to solicit some feedback on this proposal before submitting my PR.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to