// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- #include "rados_backend.h" #include typedef boost::tuple arg_type; void on_applied(void *completion, void *_arg) { arg_type *arg = static_cast(_arg); arg->get<1>()->complete(0); } void on_complete(void *completion, void *_arg) { arg_type *arg = static_cast(_arg); arg->get<0>()->complete(0); arg->get<2>()->release(); delete arg; } void RadosBackend::write( const string &oid, uint64_t offset, const bufferlist &bl, Context *on_write_applied, Context *on_commit) { librados::AioCompletion *completion = librados::Rados::aio_create_completion(); void *arg = static_cast(new arg_type(on_commit, on_write_applied, completion)); completion->set_safe_callback( arg, on_complete); completion->set_complete_callback( arg, on_applied); ioctx->aio_write(oid, completion, bl, bl.length(), offset); } void RadosBackend::read( const string &oid, uint64_t offset, uint64_t length, bufferlist *bl, Context *on_read_complete) { librados::AioCompletion *completion = librados::Rados::aio_create_completion(); void *arg = static_cast(new arg_type(on_read_complete, 0, completion)); completion->set_complete_callback( arg, on_complete); ioctx->aio_read(oid, completion, bl, length, offset); }