You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/03/22 16:35:41 UTC

[jira] [Commented] (THRIFT-4079) Generated perl code that returns structures from included thrift files is missing a necessary use clause

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

ASF GitHub Bot commented on THRIFT-4079:
----------------------------------------

GitHub user jeking3 opened a pull request:

    https://github.com/apache/thrift/pull/1219

    THRIFT-4079: emit use clauses in Types.pm generated files as well (fix reopened defect)

    The original fix only took care of the generated file for the service, if the service has a method that uses a structure from an included thrift file, use clauses were emitted.
    
    The issue was re-opened because if a structure in one thrift file contains a field for a structure defined in another thrift file, the perl generated code doesn't work properly as described in the defect since these live in Types.pm, and it needs the same use clauses emitted.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/jeking3/thrift THRIFT-4079

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/thrift/pull/1219.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1219
    
----
commit bfefdc33a0510b436efc7687fd29bf054e7d1ba8
Author: James E. King, III <ji...@simplivity.com>
Date:   2017-03-22T16:31:35Z

    THRIFT-4079: emit use clauses in Types.pm generated files as well (fix reopened defect)

----


> Generated perl code that returns structures from included thrift files is missing a necessary use clause
> --------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-4079
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4079
>             Project: Thrift
>          Issue Type: Bug
>          Components: Perl - Compiler
>    Affects Versions: 0.8, 0.10.0
>         Environment: Ubuntu 14.04 LTS (perl 5.18.2) with thrift 0.10.0
>            Reporter: James E. King, III
>            Assignee: James E. King, III
>             Fix For: 0.11.0
>
>         Attachments: THRIFT-4079-example.tgz, THRIFT-4079-reopened.tgz
>
>
> I made a very simple example which I will attach, however in a nutshell if I define a structure in one thrift file like this:
> {{ForeignInfo.thrift:}}
> {noformat}
> namespace perl org.fiction.rpc
> struct ForeignInfo
> {
>     1: string someData
> }
> {noformat}
> Then I define a service in another namespace like this:
> {{SomeService.thrift:}}
> {noformat}
> namespace perl org.real
> include "ForeignInfo.thrift"
> service Company
> {
>     ForeignInfo.ForeignInfo getForeignInfoList();
> }
> {noformat}
> Then I compile both of them, the resulting generated perl code in {{gen-perl/org/real/Company.pm}} has the following use clauses in it:
> {noformat}
> require 5.6.0;
> use strict;
> use warnings;
> use Thrift;
> use org::real::Types;
> {noformat}
> Later on in the file we have:
> {noformat}
>     SWITCH: for($fid)
>     {
>       /^0$/ && do{      if ($ftype == TType::STRUCT) {
>         $self->{success} = new org::fiction::rpc::ForeignInfo();
>         $xfer += $self->{success}->read($input);
>       } else {
>         $xfer += $input->skip($ftype);
>       }
>       last; };
>         $xfer += $input->skip($ftype);
>     }
> {noformat}
> If you put a simple wrapper around this call, the client gets an exception:
> {noformat}
> Undefined subroutine &org::fiction::rpc::ForeignInfo called at gen-perl/org/real/Company.pm line 98
> {noformat}
> Line 98 is where {{org::fiction::rpc::ForeignInfo}} is mentioned.  Without a use clause for the Types defined by the include it cannot be used.
> If I add this line to the generated code in Company.pm:
> {noformat}
> use org::fiction::rpc::Types;
> {noformat}
> Then everything works.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)