Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-4079

Generated perl code that returns structures from included thrift files is missing a necessary use clause

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments


    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.8, 0.10.0
    • Fix Version/s: 0.11.0
    • Component/s: Perl - Compiler
    • Labels:
    • Environment:

      Ubuntu 14.04 LTS (perl 5.18.2) with thrift 0.10.0


      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:


      namespace perl org.fiction.rpc
      struct ForeignInfo
          1: string someData

      Then I define a service in another namespace like this:


      namespace perl org.real
      include "ForeignInfo.thrift"
      service Company
          ForeignInfo.ForeignInfo getForeignInfoList();

      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:

      require 5.6.0;
      use strict;
      use warnings;
      use Thrift;
      use org::real::Types;

      Later on in the file we have:

          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);

      If you put a simple wrapper around this call, the client gets an exception:

      Undefined subroutine &org::fiction::rpc::ForeignInfo called at gen-perl/org/real/Company.pm line 98

      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:

      use org::fiction::rpc::Types;

      Then everything works.


        1. THRIFT-4079-reopened.tgz
          1 kB
          James E. King III
        2. THRIFT-4079-example.tgz
          0.9 kB
          James E. King III



            • Assignee:
              jking3 James E. King III
              jking3 James E. King III


              • Created:

                Issue deployment