This is tested with thrift 0.7.0, and as it is pretty sensitive (removing
or changing the type of any of these definitions seems to make the problem
go away)
The failures are typically those of validation errors as you see below, but
other have been seen as well.
Has anyone seen anything like this?
Thanks
-Nevo
--8<------------test.thrift-----------------------------------------------
enum En1 {
EN1_0 = 1
}
struct MapEl {
1: required En1 x1 = En1.EN1_0,
2: required i32 x2 = 2,
7: optional i32 x3 = 3,
8: optional i32 x4 = 4,
}
struct topStruct {
1: required i32 y1 = 1,
2: required i16 y2 = 2,
3: required i32 y3 = 3,
4: optional map<i32,MapEl> y4 = {},
}
--8<------------test.rb----------------------------------------------------
#!/usr/bin/ruby
require 'thrift'
require 'gen-rb/test_types'
begin
v=TopStruct.new
for i in 1..124 do
v.y4[i]=MapEl.new()
end
ruby_binary_protocol =
Thrift::BinaryProtocol.new(Thrift::MemoryBufferTransport.new)
v.write(ruby_binary_protocol)
TopStruct.new.read(ruby_binary_protocol)
# drop read data on the floor
rescue Exception => tx
print "Caught #{tx.class} exception: #{tx.message}\n"
print "Trace:\n ", tx.backtrace.join("\n "), "\n"
end
nil
--8<----------------------------------------------------------------------
$ /usr/bin/thrift --gen rb test.thrift && ruby test.rb
Caught Thrift::ProtocolException exception: Invalid value of field x1!
Trace:
./gen-rb/test_types.rb:34:in `validate'
test.rb:15:in `read'
test.rb:15