From 68bd54d118bc45f70e2d8a64b60eb0dcab3ee298 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 10 Aug 2011 11:29:17 -0700 Subject: [PATCH] librados: support op flags --- src/include/rados/librados.hpp | 6 ++++++ src/librados.cc | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 40573a1a63f0c..0b634c19757c8 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -103,6 +103,11 @@ namespace librados PoolAsyncCompletionImpl *pc; }; + enum ObjectOperationFlags { + OP_EXCL = 1, + OP_FAILOK = 2, + }; + /* * ObjectOperation : compount object operation * Batch multiple object operations into a single request, to be applied @@ -115,6 +120,7 @@ namespace librados virtual ~ObjectOperation(); size_t size(); + void set_op_flags(ObjectOperationFlags flags); void cmpxattr(const char *name, uint8_t op, const bufferlist& val); void cmpxattr(const char *name, uint8_t op, uint64_t v); diff --git a/src/librados.cc b/src/librados.cc index b19a4f0718160..6986a21e101d5 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -138,6 +138,18 @@ size_t librados::ObjectOperation::size() return o->size(); } +void librados::ObjectOperation::set_op_flags(ObjectOperationFlags flags) +{ + int rados_flags = 0; + if (flags & OP_EXCL) + rados_flags |= CEPH_OSD_OP_FLAG_EXCL; + if (flags & OP_FAILOK) + rados_flags |= CEPH_OSD_OP_FLAG_FAILOK; + + ::ObjectOperation *o = (::ObjectOperation *)impl; + o->set_last_op_flags(rados_flags); +} + void librados::ObjectOperation::cmpxattr(const char *name, uint8_t op, const bufferlist& v) { ::ObjectOperation *o = (::ObjectOperation *)impl; -- 2.39.5