thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (THRIFT-4631) Codegen Creates Invalid Ruby for Recursive Structs
Date Fri, 14 Sep 2018 17:45:00 GMT

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

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

cgardens edited a comment on issue #1592: THRIFT-4631 Fix Ruby codegen to gen valid ruby for
recursive structs
URL: https://github.com/apache/thrift/pull/1592#issuecomment-421433216
 
 
   @jeking3 - thanks for reviewing so quickly! 
   
   It looks like the travis build is failing. I've gone through the logs and I'm not finding
anything in there that's specific to this change, but I know these are famous last words...

   
   From what I'm seeing it looks like the part of the build that's failing is also failing
on master.
   build for this pr: https://travis-ci.org/apache/thrift/builds/427781155?utm_source=github_status&utm_medium=notification
   build for master: https://travis-ci.org/apache/thrift
   
   Am I missing something here? Let me know if there's something more I should be doing. Thanks!

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> Codegen Creates Invalid Ruby for Recursive Structs
> --------------------------------------------------
>
>                 Key: THRIFT-4631
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4631
>             Project: Thrift
>          Issue Type: Bug
>          Components: Ruby - Compiler, Ruby - Library
>    Affects Versions: 0.11.0
>            Reporter: charles giardina
>            Priority: Minor
>
> Though thrift supports defining recursive structs, it appears that the Ruby codegen does
not generate valid Ruby for for recursive structs.
> e.g. Here's an example of what I'm seeing and how to recreate it using Recursive.thrift
in the Thrift test suite.
>  * add {{$(THRIFT) --gen rb ../Recursive.thrift}} to {{test/rb/Makefile.am}}
>  * and add {{require "recursive_types"}} to {{test/rb/generation/test_struct.rb}}
>  * run {{make -k check}} from {{test/rb}}
>  * this ends up raising the following exception:
> {code:java}
> thrift/test/rb/gen-rb/recursive_types.rb:50:in `<class:CoRec>': uninitialized constant
CoRec2 (NameError)
> Did you mean?  CoRec
> 	from thrift/test/rb/gen-rb/recursive_types.rb:45:in `<top (required)>'
> 	from thrift/test/rb/generation/test_struct.rb:22:in `require'
> 	from thrift/test/rb/generation/test_struct.rb:22:in `<top (required)>'
> 	from test_suite.rb:20:in `require'
> 	from test_suite.rb:20:in `block in <main>'
> 	from test_suite.rb:20:in `each'
> 	from test_suite.rb:20:in `<main>'
> make: *** [check] Error 1
> {code}
>  
> I've copied the generated code below. But essentially the issue appears to be that recursive
structs are referencing constants or classes that have not yet been declared. I have some
ideas on how to address this and can post a proposed solution.
>  
> generated code:
> {code:java}
> #
> # Autogenerated by Thrift Compiler (0.11.0)
> #
> # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
> #
> require 'thrift'
> module RecursiveExample
>   class Node < ::Thrift::Union
>     include ::Thrift::Struct_Union
>     class << self
>       def inner_node(val)
>         Node.new(:inner_node, val)
>       end
>       def leaf_node(val)
>         Node.new(:leaf_node, val)
>       end
>     end
>     INNER_NODE = 1
>     LEAF_NODE = 2
>     FIELDS = {
>       INNER_NODE => {:type => ::Thrift::Types::STRUCT, :name => 'inner_node',
:class => ::RecursiveExample::InnerNode, :optional => true},
>       LEAF_NODE => {:type => ::Thrift::Types::STRUCT, :name => 'leaf_node',
:class => ::RecursiveExample::LeafNode, :optional => true}
>     }
>     def struct_fields; FIELDS; end
>     def validate
>       raise(StandardError, 'Union fields are not set.') if get_set_field.nil? || get_value.nil?
>     end
>     ::Thrift::Union.generate_accessors self
>   end
>   class InnerNode
>     include ::Thrift::Struct, ::Thrift::Struct_Union
>     NODE = 1
>     FIELDS = {
>       NODE => {:type => ::Thrift::Types::STRUCT, :name => 'node', :class =>
::RecursiveExample::Node}
>     }
>     def struct_fields; FIELDS; end
>     def validate
>       raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required
field node is unset!') unless @node    end
>     ::Thrift::Struct.generate_accessors self
>   end
>   class LeafNode
>     include ::Thrift::Struct, ::Thrift::Struct_Union
>     FIELDS = {
>     }
>     def struct_fields; FIELDS; end
>     def validate
>     end
>     ::Thrift::Struct.generate_accessors self
>   end
> end
> {code}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message