From: Adam Emerson Date: Thu, 10 Aug 2023 03:59:34 +0000 (-0400) Subject: neorados: Improve `cmp_omap` argument structure X-Git-Tag: v19.3.0~349^2~18 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6fab4159ec6c4586d88bd26979a442692a541caf;p=ceph.git neorados: Improve `cmp_omap` argument structure A map from strings to value/op pairs is a bit much and a bit annoying for what's essentially a list of assertions. Just use a vector. Also put op in the middle so it matches `cmpxattr`. Signed-off-by: Adam Emerson --- diff --git a/src/include/neorados/RADOS.hpp b/src/include/neorados/RADOS.hpp index 6268f0219f3..60e57aa5fc9 100644 --- a/src/include/neorados/RADOS.hpp +++ b/src/include/neorados/RADOS.hpp @@ -203,6 +203,12 @@ enum class cmp_op : std::uint8_t { lte = 6 }; +struct cmp_assertion { + std::string attr; + cmp_op op; + ceph::buffer::list bl; +}; + namespace alloc_hint { enum alloc_hint_t { sequential_write = 1, @@ -309,9 +315,7 @@ public: void cmpxattr(std::string_view name, cmp_op op, std::uint64_t val); void assert_version(uint64_t ver); void assert_exists(); - void cmp_omap(const boost::container::flat_map>& assertions); + void cmp_omap(const std::vector& assertions); void exec(std::string_view cls, std::string_view method, const ceph::buffer::list& inbl, @@ -586,15 +590,11 @@ public: return std::move(*this); } - ReadOp& cmp_omap( - const boost::container::flat_map< - std::string, std::pair>& assertions) & { + ReadOp& cmp_omap(const std::vector& assertions) & { Op::cmp_omap(assertions); return *this; } - ReadOp&& cmp_omap( - const boost::container::flat_map< - std::string, std::pair>& assertions) && { + ReadOp&& cmp_omap(const std::vector& assertions) && { Op::cmp_omap(assertions); return std::move(*this); } @@ -970,15 +970,11 @@ public: return std::move(*this); } - WriteOp& cmp_omap( - const boost::container::flat_map< - std::string, std::pair>& assertions) & { + WriteOp& cmp_omap(const std::vector& assertions) & { Op::cmp_omap(assertions); return *this; } - WriteOp&& cmp_omap( - const boost::container::flat_map< - std::string, std::pair>& assertions) && { + WriteOp&& cmp_omap(const std::vector& assertions) && { Op::cmp_omap(assertions); return std::move(*this); } diff --git a/src/neorados/RADOS.cc b/src/neorados/RADOS.cc index 84cc200929f..0c12b861c87 100644 --- a/src/neorados/RADOS.cc +++ b/src/neorados/RADOS.cc @@ -444,13 +444,10 @@ void Op::assert_exists() { static_cast(nullptr), static_cast(nullptr)); } -void Op::cmp_omap(const bc::flat_map< - std::string, std::pair>& assertions) { +void Op::cmp_omap(const std::vector& assertions) { buffer::list bl; encode(uint32_t(assertions.size()), bl); - for (const auto& [key, assertion] : assertions) { - const auto& [value, op] = assertion; + for (const auto& [key, op, value] : assertions) { encode(key, bl); encode(value, bl); encode(int(op), bl);