You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@avro.apache.org by Marcelo Elias Del Valle <mv...@gmail.com> on 2014/09/10 19:27:01 UTC

problems with python RPC

Hi,

I am new to avro and I am trying to use it for RPC calls from Python to
Python.

I follow the same structure shown in
https://github.com/phunt/avro-rpc-quickstart/blob/master/src/main/python/

When my message returns just a string, everything works fine.
However, when it should return a list of a complex type, it gives me a
weird exception with no clue of where the error could be. I used the exact
same structure shown in the github project above.

What could I do to get more info about the error? Any clue of what could I
be doing wrong?

My code
def invoke(self, msg, req):
        result = []
        return (result)

The exception:
Traceback (most recent call last):
  File "./client.py", line 47, in <module>
    result = perform_call("list_categories", params)
  File "./client.py", line 33, in perform_call
    result = requestor.request(message, args)
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/ipc.py",
line 145, in request
    return self.issue_request(call_request, message_name, request_datum)
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/ipc.py",
line 262, in issue_request
    return self.read_call_response(message_name, buffer_decoder)
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/ipc.py",
line 238, in read_call_response
    return self.read_response(writers_schema, readers_schema, decoder)
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/ipc.py",
line 246, in read_response
    result = datum_reader.read(decoder)
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/io.py",
line 445, in read
    return self.read_data(self.writers_schema, self.readers_schema, decoder)
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/io.py",
line 488, in read_data
    return self.read_union(writers_schema, readers_schema, decoder)
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/io.py",
line 646, in read_union
    index_of_schema = int(decoder.read_long())
  File "/home/mvalle/pyve01/local/lib/python2.7/site-packages/avro/io.py",
line 184, in read_long
    b = ord(self.read(1))
TypeError: ord() expected a character, but string of length 0 found


My protocol definition:

{
   "protocol":"s1mbi0se",
   "namespace":"modules.service_bus",
   "messages":{
      "list_categories":{
         "request":[
            {
               "type":"string",
               "name":"prefix"
            },
            {
               "type":"string",
               "name":"type"
            }
         ],
         "response":[
            {
               "type":"Category",
               "name":"category"
            }
         ]
      }
   },
   "types":[
      {
         "fields":[
            {
               "type":"string",
               "name":"tos"
            },
            {
               "type":"string",
               "name":"froms"
            },
            {
               "type":"string",
               "name":"bodys"
            }
         ],
         "type":"record",
         "name":"Category"
      }
   ]
}

Best regards,
-- 
Marcelo Elias Del Valle
http://mvalle.com - @mvallebr