X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Ftest%2Fbench%2Frbd_backend.cc;fp=src%2Fceph%2Fsrc%2Ftest%2Fbench%2Frbd_backend.cc;h=792889688155a1fc660b3982597365393c78fdf8;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/test/bench/rbd_backend.cc b/src/ceph/src/test/bench/rbd_backend.cc new file mode 100644 index 0000000..7928896 --- /dev/null +++ b/src/ceph/src/test/bench/rbd_backend.cc @@ -0,0 +1,51 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- + +#include "rbd_backend.h" +#include + +typedef boost::tuple arg_type; + +void on_complete(void *completion, void *_arg) { + arg_type *arg = static_cast(_arg); + librbd::RBD::AioCompletion *comp = + static_cast(completion); + ssize_t r = comp->get_return_value(); + assert(r >= 0); + arg->get<0>()->complete(0); + if (arg->get<1>()) + arg->get<1>()->complete(0); + comp->release(); + delete arg; +} + +void RBDBackend::write( + const string &oid, + uint64_t offset, + const bufferlist &bl, + Context *on_write_applied, + Context *on_commit) +{ + bufferlist &bl_non_const = const_cast(bl); + ceph::shared_ptr image = (*m_images)[oid]; + void *arg = static_cast(new arg_type(on_commit, on_write_applied)); + librbd::RBD::AioCompletion *completion = + new librbd::RBD::AioCompletion(arg, on_complete); + int r = image->aio_write(offset, (size_t) bl_non_const.length(), + bl_non_const, completion); + assert(r >= 0); +} + +void RBDBackend::read( + const string &oid, + uint64_t offset, + uint64_t length, + bufferlist *bl, + Context *on_read_complete) +{ + ceph::shared_ptr image = (*m_images)[oid]; + void *arg = static_cast(new arg_type(on_read_complete, NULL)); + librbd::RBD::AioCompletion *completion = + new librbd::RBD::AioCompletion(arg, on_complete); + int r = image->aio_read(offset, (size_t) length, *bl, completion); + assert(r >= 0); +}