diff options
author | Sage Weil <sage@inktank.com> | 2013-10-22 19:38:54 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-22 19:40:50 -0700 |
commit | 85b9b38b19601436eae23e34ba2e6f9731170f5f (patch) | |
tree | 47603f780f3caa10eb2a53fbe31d2101b4e70d38 | |
parent | 0194baddc8ac620eb491cdb03d1a19ba53669e24 (diff) | |
download | ceph-85b9b38b19601436eae23e34ba2e6f9731170f5f.tar.gz |
librados: add an aio_operate that takes a write and flags
Until now you could only pass flags to read operations.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/include/rados/librados.hpp | 1 | ||||
-rw-r--r-- | src/librados/IoCtxImpl.cc | 4 | ||||
-rw-r--r-- | src/librados/IoCtxImpl.h | 3 | ||||
-rw-r--r-- | src/librados/librados.cc | 41 |
4 files changed, 33 insertions, 16 deletions
diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 12b3655954e..64eeb8cd219 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -733,6 +733,7 @@ namespace librados int operate(const std::string& oid, ObjectWriteOperation *op); int operate(const std::string& oid, ObjectReadOperation *op, bufferlist *pbl); int aio_operate(const std::string& oid, AioCompletion *c, ObjectWriteOperation *op); + int aio_operate(const std::string& oid, AioCompletion *c, ObjectWriteOperation *op, int flags); /** * Schedule an async write operation with explicit snapshot parameters * diff --git a/src/librados/IoCtxImpl.cc b/src/librados/IoCtxImpl.cc index b31bf86f758..627bd3b2140 100644 --- a/src/librados/IoCtxImpl.cc +++ b/src/librados/IoCtxImpl.cc @@ -601,7 +601,7 @@ int librados::IoCtxImpl::aio_operate_read(const object_t &oid, int librados::IoCtxImpl::aio_operate(const object_t& oid, ::ObjectOperation *o, AioCompletionImpl *c, - const SnapContext& snap_context) + const SnapContext& snap_context, int flags) { utime_t ut = ceph_clock_now(client->cct); /* can't write to a snapshot */ @@ -615,7 +615,7 @@ int librados::IoCtxImpl::aio_operate(const object_t& oid, queue_aio_write(c); Mutex::Locker l(*lock); - objecter->mutate(oid, oloc, *o, snap_context, ut, 0, onack, oncommit, + objecter->mutate(oid, oloc, *o, snap_context, ut, flags, onack, oncommit, &c->objver); return 0; diff --git a/src/librados/IoCtxImpl.h b/src/librados/IoCtxImpl.h index d748db43b95..aa94aa83bba 100644 --- a/src/librados/IoCtxImpl.h +++ b/src/librados/IoCtxImpl.h @@ -142,7 +142,8 @@ struct librados::IoCtxImpl { int operate(const object_t& oid, ::ObjectOperation *o, time_t *pmtime); int operate_read(const object_t& oid, ::ObjectOperation *o, bufferlist *pbl); int aio_operate(const object_t& oid, ::ObjectOperation *o, - AioCompletionImpl *c, const SnapContext& snap_context); + AioCompletionImpl *c, const SnapContext& snap_context, + int flags); int aio_operate_read(const object_t& oid, ::ObjectOperation *o, AioCompletionImpl *c, int flags, bufferlist *pbl); diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 7980afc5a62..e11cfd84769 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -941,6 +941,22 @@ int librados::IoCtx::omap_rm_keys(const std::string& oid, return operate(oid, &op); } + + +static int translate_flags(int flags) +{ + int op_flags = 0; + if (flags & librados::OPERATION_BALANCE_READS) + op_flags |= CEPH_OSD_FLAG_BALANCE_READS; + if (flags & librados::OPERATION_LOCALIZE_READS) + op_flags |= CEPH_OSD_FLAG_LOCALIZE_READS; + if (flags & librados::OPERATION_ORDER_READS_WRITES) + op_flags |= CEPH_OSD_FLAG_RWORDERED; + if (flags & librados::OPERATION_IGNORE_OVERLAY) + op_flags |= CEPH_OSD_FLAG_IGNORE_OVERLAY; + return op_flags; +} + int librados::IoCtx::operate(const std::string& oid, librados::ObjectWriteOperation *o) { object_t obj(oid); @@ -958,7 +974,15 @@ int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c, { object_t obj(oid); return io_ctx_impl->aio_operate(obj, (::ObjectOperation*)o->impl, c->pc, - io_ctx_impl->snapc); + io_ctx_impl->snapc, 0); +} +int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c, + ObjectWriteOperation *o, int flags) +{ + object_t obj(oid); + return io_ctx_impl->aio_operate(obj, (::ObjectOperation*)o->impl, c->pc, + io_ctx_impl->snapc, + translate_flags(flags)); } int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c, @@ -972,7 +996,7 @@ int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c, snv[i] = snaps[i]; SnapContext snapc(snap_seq, snv); return io_ctx_impl->aio_operate(obj, (::ObjectOperation*)o->impl, c->pc, - snapc); + snapc, 0); } int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c, @@ -989,20 +1013,11 @@ int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c, snap_t snapid, int flags, bufferlist *pbl) { object_t obj(oid); - int op_flags = 0; - if (flags & OPERATION_BALANCE_READS) - op_flags |= CEPH_OSD_FLAG_BALANCE_READS; - if (flags & OPERATION_LOCALIZE_READS) - op_flags |= CEPH_OSD_FLAG_LOCALIZE_READS; - if (flags & OPERATION_ORDER_READS_WRITES) - op_flags |= CEPH_OSD_FLAG_RWORDERED; - if (flags & OPERATION_IGNORE_OVERLAY) - op_flags |= CEPH_OSD_FLAG_IGNORE_OVERLAY; - return io_ctx_impl->aio_operate_read(obj, (::ObjectOperation*)o->impl, c->pc, - op_flags, pbl); + translate_flags(flags), pbl); } + void librados::IoCtx::snap_set_read(snap_t seq) { io_ctx_impl->set_snap_read(seq); |