Miguel created AVRO-3263:
----------------------------

             Summary: Perl Encoder: schema validation of union of records warns 
when passing over an invalid schema with a long field
                 Key: AVRO-3263
                 URL: https://issues.apache.org/jira/browse/AVRO-3263
             Project: Apache Avro
          Issue Type: Bug
          Components: perl
            Reporter: Miguel


When searching for a valid schema to encode a field that is a union of records, 
the Perl encoder warns if the payload doesn't contain a _long_ field required 
in one of the records' schemas.

Example. The following snippet:
{code:perl}
my $schema = Avro::Schema->parse(<<EOJ);
[
    {
        "type": "record",
        "name": "rectangle",
        "fields": [{ "name": "width", "type": "long" }, { "name": "height", 
"type": "long"}]
    },
    {
        "type": "record",
        "name": "square",
        "fields": [{ "name": "dim", "type": "long" }]
    }
]
EOJ
my $enc = '';
Avro::BinaryEncoder->encode(
    schema  => $schema,
    data    => { dim => 10 },
    emit_cb => sub {
        $enc .= ${ $_[0] }
    },
);
{code}

Throws the following warnings:
{code:java}
Use of uninitialized value $data in pack at 
...avro/lang/perl/lib/Avro/Schema.pm line 287.
Use of uninitialized value $data in string eq at 
...avro/lang/perl/lib/Avro/Schema.pm line 289.
{code}

The same doesn't happen if _width_ and _height_ are _int_'s.

This behavior unnecessarily pollutes the logs and can even cause failures in 
the cases where the encoder is called from a context that doesn't allow 
warnings.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to