Approaches to wrapping aio_exec

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've built a custom protocol on top of Rados::exec that uses serialized versions of InputObject and OutputObject to implement the protocol. Here's simple pseudo-code that provides my_service::exec:

 void my_service::exec(oid, input_params, bufferlist& out) {
  bufferlist inbl, outbl;
  InputObject in(input_params);
  ::encode(in, inbl);

  librados::exec(oid, inbl, outbl);

  OutputObject reply;
  ::decode(reply, outbl);
  out = reply.payload;
 }

I'd like to provide a my_service::aio_exec that wraps librados::aio_exec, but doing so doesn't seem to be straight-forward with the current async interface.

Notice in the above example that the callers output bufferlist must be unpacked from the reply protocol. However, the librados::aio_exec interface unpacks the output directly into the caller parameter:

int librados::aio_exec(oid, …, bufferlist *outbl)
{
...
   objecter->read(oid, oloc, rd, snap_seq, outbl, 0, onack, &c->objver);
}

What's needed is a intermediate bufferlist that can be decoded when the data is available.

One way to do this would be wrap AioCompletion and intercept ack and safe callbacks to do the data unpacking. The problem with this is that we have to introduce a new AioCompletion type, or new AioCompletionImpl. I started to do this, but it feels quite clunky.

Any suggestions for handling this?

Thanks,
Noah--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux