Hi,

we'd like to use Avro for inter process communication between C and Java using regular sockets and we noted that there is not yet an implementation ready for RPC with Avro-C.

Our requirements do not include to have a full 'block-mode' RPC and therefore we would be happy with an asynchronous mode where no return value is expected when a message is sent. So using the IDL, that's equivalent to defining messages as methods with a void return value. With the current implementation of Avro-C, we see the following questions and would like to know if anybody has answers or has already thought about a solution - or even better code that is ready to go ;-)

- On August 25, there were commits reverted in preparation for 1.4.0
  branch (949400, 947962, 947389, 947385, and 947299) for AVRO-441,
  AVRO-464, AVRO-466, AVRO-549, and AVRO-552. Do you plan to plan to
  incorporate them back in a near future - since the branch for 1.4.x
  now exists ?
  Specifically:
  AVRO-551 / 552  - Build for Win32
  AVRO-549 - Route memory management through an allocator interface

- We would like to avoid any unnecessary data copies when transferring byte arrays (defined with "type" : "bytes" in the schema).

In java the binary encoder takes care of encoding the messages in a list of buffers - this is called 'Message Framing' in the Avro specification - which can then be transferred as such on the wire. For arrays of bytes this often mean they're simply passed through and sent separately which means they're nicely read from the wire and processed at no cost when decoding.

My understanding is that such framing does not exists in Avro-C. Has anybody already written this or have stub for it (and similar for decoding) ?

Using this message framing would then allow to use the avro_reader_memory (a modified version of it). Another way to go would be to write an avro_socket_reader (to be added in the avro_io_type_t enum)

  Any hint, what's the best way to go ?

Thanks,
-- Gilles

Reply via email to