summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-10-22 19:38:54 -0700
committerSage Weil <sage@inktank.com>2013-10-22 19:40:50 -0700
commit85b9b38b19601436eae23e34ba2e6f9731170f5f (patch)
tree47603f780f3caa10eb2a53fbe31d2101b4e70d38
parent0194baddc8ac620eb491cdb03d1a19ba53669e24 (diff)
downloadceph-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.hpp1
-rw-r--r--src/librados/IoCtxImpl.cc4
-rw-r--r--src/librados/IoCtxImpl.h3
-rw-r--r--src/librados/librados.cc41
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);