From: Yuval Lifshitz Date: Thu, 21 May 2020 09:52:44 +0000 (+0300) Subject: rgw/tools: add flags to rgw_rados_operate api X-Git-Tag: v16.1.0~2244^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F35172%2Fhead;p=ceph.git rgw/tools: add flags to rgw_rados_operate api currently flags are hardcoded to zero. this prevents some usecases, e.g. passing OPERATION_RETURNVEC flag Signed-off-by: Yuval Lifshitz --- diff --git a/src/rgw/rgw_tools.cc b/src/rgw/rgw_tools.cc index b05fe0a0cc30..af5e05cca64a 100644 --- a/src/rgw/rgw_tools.cc +++ b/src/rgw/rgw_tools.cc @@ -248,7 +248,7 @@ thread_local bool is_asio_thread = false; int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, librados::ObjectReadOperation *op, bufferlist* pbl, - optional_yield y) + int flags, optional_yield y) { #ifdef HAVE_BOOST_CONTEXT // given a yield_context, call async_operate() to yield the coroutine instead @@ -257,7 +257,7 @@ int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, auto& context = y.get_io_context(); auto& yield = y.get_yield_context(); boost::system::error_code ec; - auto bl = librados::async_operate(context, ioctx, oid, op, 0, yield[ec]); + auto bl = librados::async_operate(context, ioctx, oid, op, flags, yield[ec]); if (pbl) { *pbl = std::move(bl); } @@ -268,25 +268,38 @@ int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, dout(20) << "WARNING: blocking librados call" << dendl; } #endif - return ioctx.operate(oid, op, nullptr); + return ioctx.operate(oid, op, nullptr, flags); } int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, - librados::ObjectWriteOperation *op, optional_yield y) + librados::ObjectReadOperation *op, bufferlist* pbl, + optional_yield y) +{ + return rgw_rados_operate(ioctx, oid, op, pbl, 0, y); +} + +int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, + librados::ObjectWriteOperation *op, int flags, optional_yield y) { #ifdef HAVE_BOOST_CONTEXT if (y) { auto& context = y.get_io_context(); auto& yield = y.get_yield_context(); boost::system::error_code ec; - librados::async_operate(context, ioctx, oid, op, 0, yield[ec]); + librados::async_operate(context, ioctx, oid, op, flags, yield[ec]); return -ec.value(); } if (is_asio_thread) { dout(20) << "WARNING: blocking librados call" << dendl; } #endif - return ioctx.operate(oid, op); + return ioctx.operate(oid, op, flags); +} + +int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, + librados::ObjectWriteOperation *op, optional_yield y) +{ + return rgw_rados_operate(ioctx, oid, op, 0, y); } int rgw_rados_notify(librados::IoCtx& ioctx, const std::string& oid, diff --git a/src/rgw/rgw_tools.h b/src/rgw/rgw_tools.h index 8c0065465465..1fca1365bf4c 100644 --- a/src/rgw/rgw_tools.h +++ b/src/rgw/rgw_tools.h @@ -95,8 +95,13 @@ extern thread_local bool is_asio_thread; int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, librados::ObjectReadOperation *op, bufferlist* pbl, optional_yield y); +int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, + librados::ObjectReadOperation *op, bufferlist* pbl, + int flags, optional_yield y); int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, librados::ObjectWriteOperation *op, optional_yield y); +int rgw_rados_operate(librados::IoCtx& ioctx, const std::string& oid, + librados::ObjectWriteOperation *op, int flags, optional_yield y); int rgw_rados_notify(librados::IoCtx& ioctx, const std::string& oid, bufferlist& bl, uint64_t timeout_ms, bufferlist* pbl, optional_yield y);