From 6474b77e37fd4da69b4bb5b2f171f3afa16898eb Mon Sep 17 00:00:00 2001 From: Yuval Lifshitz Date: Thu, 21 May 2020 12:52:44 +0300 Subject: [PATCH] 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 --- src/rgw/rgw_tools.cc | 25 +++++++++++++++++++------ src/rgw/rgw_tools.h | 5 +++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/rgw/rgw_tools.cc b/src/rgw/rgw_tools.cc index b05fe0a0cc3..af5e05cca64 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 8c006546546..1fca1365bf4 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); -- 2.39.5