avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Doug Cutting (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AVRO-1177) IPC interoperability problems with handshake
Date Fri, 05 Oct 2012 16:46:02 GMT

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

Doug Cutting commented on AVRO-1177:
------------------------------------

The patch looks reasonable to me (not a Ruby hacker).

Note that this bug does not exist for http-based RPC, only for socket.  So using HTTP is a
workaround.

It would be good to have a test for this bug.  The share/test/interop/bin/test_rpc_interop.sh
currently makes HTTP-based RPC calls between Java, Ruby and Python, but it only makes one
call per client and server instantiation.  So we could change the rpcsend and rpcreceive commands
in Java, Ruby and Python to accept a parameter naming the number of times the client should
send the request and the server should respond before exiting, and the Ruby and Python versions
to accept 'avro:" uri's to indicate simple socket connections (Java already does this).  Finally,
test_rpc_interop.sh would be changed to pass '2' for this parameter, to test that repeated
requests are processed correctly, and to use "avro:" uris in addition to "http:" uris.  Phew!
 That's a fair amount of work.
                
> IPC interoperability problems with handshake
> --------------------------------------------
>
>                 Key: AVRO-1177
>                 URL: https://issues.apache.org/jira/browse/AVRO-1177
>             Project: Avro
>          Issue Type: Bug
>          Components: ruby
>    Affects Versions: 1.7.2
>            Reporter: Georg Franz
>              Labels: patch
>         Attachments: avro_ruby_ipc.diff
>
>
> I tried to get a simple echo service working using Java (client) to Ruby (server).
> The service should be called repeatedly in a loop. I tried several things, but the best
result I got was that it would work once, then raising this exception on the ruby side:
> {noformat}lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:46:in `byte!': undefined
method `unpack' for nil:NilClass (NoMethodError)
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:63:in `read_long'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:380:in `read_union'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:316:in `read_data'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:391:in `block in read_record'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:389:in `each'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:389:in `read_record'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:317:in `read_data'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/io.rb:282:in `read'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/ipc.rb:309:in `process_handshake'
> from lib/ruby/gems/1.9.1/gems/avro-1.7.2/lib/avro/ipc.rb:253:in `respond'
> {noformat}
> On investigation, I found out that the ruby Responder expects a handshake on every request
whereas the Java Requestor just sends a handshake the first time around.
> I quickly hacked up Ruby support for multiple calls on the same connection similar to
what the Java code does.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message