From dde64c3481194945a416b2e2a3d7c65006a329f6 Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Fri, 1 Jul 2022 08:54:32 -0400 Subject: [PATCH] rgwlc: represent lc filter flags as XML elements Suggested by Casey in review, this makes the XML prettier. also: fix filter parsing, remove unused code Signed-off-by: Matt Benjamin --- src/rgw/rgw_lc.cc | 25 ------------------------- src/rgw/rgw_lc.h | 1 - src/rgw/rgw_lc_s3.cc | 7 +++---- src/test/rgw/test_rgw_lc.cc | 11 +++-------- 4 files changed, 6 insertions(+), 38 deletions(-) diff --git a/src/rgw/rgw_lc.cc b/src/rgw/rgw_lc.cc index 14e64bc952a43..f7d9f7cfa90d5 100644 --- a/src/rgw/rgw_lc.cc +++ b/src/rgw/rgw_lc.cc @@ -56,31 +56,6 @@ const char* LC_STATUS[] = { using namespace librados; -static inline std::string_view sv_trim(std::string_view str) { - while (isspace(str.front())) { - str.remove_prefix(1); - } - while (isspace(str.back())) { - str.remove_suffix(1); - } - return str; -} - -uint32_t LCFilter::recognize_flags(const std::string& flag_expr) -{ - uint32_t flags = 0; - ceph::split sp_flags(flag_expr); // default separators are ,;=\t\n - for (auto it = sp_flags.begin(); it != sp_flags.end(); ++it) { - auto token = sv_trim(string_view{*it}); - for (auto& flag_tok : LCFilter::filter_flags) { - if (token == flag_tok.name) { - flags |= LCFilter::make_flag(flag_tok.bit); - } - } - } - return flags; -} - bool LCRule::valid() const { if (id.length() > MAX_ID_LEN) { diff --git a/src/rgw/rgw_lc.h b/src/rgw/rgw_lc.h index 81294bc95f332..42f061d7a3102 100644 --- a/src/rgw/rgw_lc.h +++ b/src/rgw/rgw_lc.h @@ -201,7 +201,6 @@ protected: uint32_t flags; public: -static uint32_t recognize_flags(const std::string& flag_expr); LCFilter() : flags(make_flag(LCFlagType::none)) {} diff --git a/src/rgw/rgw_lc_s3.cc b/src/rgw/rgw_lc_s3.cc index 4b966238e823b..b815a6ecc6adf 100644 --- a/src/rgw/rgw_lc_s3.cc +++ b/src/rgw/rgw_lc_s3.cc @@ -146,10 +146,9 @@ void LCFilter_S3::decode_xml(XMLObj *obj) RGWXMLDecoder::decode_xml("Prefix", prefix, o); - /* parse optional flags (extension) */ - auto flags_iter = o->find("Flag"); - while (auto flag_xml = flags_iter.get_next()){ - flags |= LCFilter::recognize_flags(flag_xml->get_data()); + /* parse optional ArchiveZone flag (extension) */ + if (o->find_first("ArchiveZone")) { + flags |= make_flag(LCFlagType::ArchiveZone); } obj_tags.clear(); // why is this needed? diff --git a/src/test/rgw/test_rgw_lc.cc b/src/test/rgw/test_rgw_lc.cc index 2ff992862003c..83a4cac676df9 100644 --- a/src/test/rgw/test_rgw_lc.cc +++ b/src/test/rgw/test_rgw_lc.cc @@ -47,12 +47,7 @@ TEST(TestLCFilterDecoder, XMLDoc1) static const char* xmldoc_2 = R"( - - ArchiveZone - - - ArchiveZone - + spongebob squarepants @@ -69,12 +64,12 @@ TEST(TestLCFilterDecoder, XMLDoc2) LCFilter_S3 filter; auto result = RGWXMLDecoder::decode_xml("Filter", filter, &parser, true); ASSERT_TRUE(result); - /* check repeated Tag element */ + /* check tags */ auto tag_map = filter.get_tags().get_tags(); auto val1 = tag_map.find("spongebob"); ASSERT_EQ(val1->second, "squarepants"); /* check our flags */ - ASSERT_EQ(filter.get_flags(), uint32_t(LCFlagType::ArchiveZone)); + ASSERT_EQ(filter.get_flags(), LCFilter::make_flag(LCFlagType::ArchiveZone)); } // invalid And element placement -- 2.39.5