You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2021/12/15 17:28:00 UTC

[jira] [Commented] (AVRO-3263) Perl Encoder: schema validation of union of records warns when passing over an invalid schema with a long field

    [ https://issues.apache.org/jira/browse/AVRO-3263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17460120#comment-17460120 ] 

ASF subversion and git services commented on AVRO-3263:
-------------------------------------------------------

Commit 8a5fc3cd17bdf6211097daf237e1e149efa78b56 in avro's branch refs/heads/master from Miguel E. Hernández Cuervo
[ https://gitbox.apache.org/repos/asf?p=avro.git;h=8a5fc3c ]

AVRO-3263: Fix warning in Perl encoder when validating a long field (#1422)

* AVRO-3258: Fix warning in Perl encoder when validating a long field

- Disable warnings in the limited scope of "long" validation that uses pack and unpack. It is unnecessary as warnings don't affect the validation outcome and in some scenarios this validation is expected to fail.
- Add test cases to validate the fix

* AVRO-3258: Fix warning in Perl encoder when validating a long field

- Check explicitly and return early if $data is undefined.

> 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
>            Assignee: Miguel
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: 1.11.1
>
>   Original Estimate: 2h
>          Time Spent: 20m
>  Remaining Estimate: 1h 40m
>
> 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)