From 8fdd4c0be07cf6d278b31c917ede100ffe4746b4 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Fri, 18 Feb 2022 15:56:42 -0500 Subject: [PATCH] rgw/dbstore: use string_view for string constants Signed-off-by: Casey Bodley --- src/rgw/store/dbstore/common/dbstore.cc | 11 +- src/rgw/store/dbstore/common/dbstore.h | 379 ++++++++++++------------ 2 files changed, 195 insertions(+), 195 deletions(-) diff --git a/src/rgw/store/dbstore/common/dbstore.cc b/src/rgw/store/dbstore/common/dbstore.cc index 6ea53bb925b80..b242ea2dc4a92 100644 --- a/src/rgw/store/dbstore/common/dbstore.cc +++ b/src/rgw/store/dbstore/common/dbstore.cc @@ -89,7 +89,8 @@ int DB::Destroy(const DoutPrefixProvider *dpp) } -DBOp *DB::getDBOp(const DoutPrefixProvider *dpp, string Op, struct DBOpParams *params) +DBOp *DB::getDBOp(const DoutPrefixProvider *dpp, std::string_view Op, + const DBOpParams *params) { if (!Op.compare("InsertUser")) return dbops.InsertUser; @@ -238,7 +239,7 @@ out: return ret; } -int DB::ProcessOp(const DoutPrefixProvider *dpp, string Op, struct DBOpParams *params) { +int DB::ProcessOp(const DoutPrefixProvider *dpp, std::string_view Op, DBOpParams *params) { int ret = -1; class DBOp *db_op; @@ -251,11 +252,9 @@ int DB::ProcessOp(const DoutPrefixProvider *dpp, string Op, struct DBOpParams *p ret = db_op->Execute(dpp, params); if (ret) { - ldpp_dout(dpp, 0)<<"In Process op Execute failed for fop(" \ - <. For regular object, it is '0.0' * @@ -590,7 +590,7 @@ class DBOp { FOREIGN KEY (BucketName) \ REFERENCES '{}' (BucketName) ON DELETE CASCADE ON UPDATE CASCADE \n);"; - const std::string CreateObjectViewQ = + static constexpr std::string_view CreateObjectViewQ = /* This query creats temporary view with entries from ObjectData table which have * corresponding head object (i.e, with same ObjName, ObjInstance, ObjNS, ObjID) * in the Object table. @@ -606,7 +606,7 @@ class DBOp { (ObjName, BucketName, ObjInstance, ObjID);"; - const std::string CreateQuotaTableQ = + static constexpr std::string_view CreateQuotaTableQ = "CREATE TABLE IF NOT EXISTS '{}' ( \ QuotaID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE , \ MaxSizeSoftThreshold INTEGER , \ @@ -616,7 +616,7 @@ class DBOp { Enabled Boolean , \ CheckOnRaw Boolean \n);"; - const std::string CreateLCEntryTableQ = + static constexpr std::string_view CreateLCEntryTableQ = "CREATE TABLE IF NOT EXISTS '{}' ( \ LCIndex TEXT NOT NULL , \ BucketName TEXT NOT NULL , \ @@ -626,63 +626,62 @@ class DBOp { FOREIGN KEY (BucketName) \ REFERENCES '{}' (BucketName) ON DELETE CASCADE ON UPDATE CASCADE \n);"; - const std::string CreateLCHeadTableQ = + static constexpr std::string_view CreateLCHeadTableQ = "CREATE TABLE IF NOT EXISTS '{}' ( \ LCIndex TEXT NOT NULL , \ Marker TEXT , \ StartDate INTEGER , \ PRIMARY KEY (LCIndex) \n);"; - const std::string DropQ = "DROP TABLE IF EXISTS '{}'"; - const std::string ListAllQ = "SELECT * from '{}'"; + static constexpr std::string_view DropQ = "DROP TABLE IF EXISTS '{}'"; + static constexpr std::string_view ListAllQ = "SELECT * from '{}'"; public: DBOp() {} virtual ~DBOp() {} std::mutex mtx; // to protect prepared stmt - std::string CreateTableSchema(std::string type, DBOpParams *params) { + std::string CreateTableSchema(std::string_view type, + const DBOpParams *params) { if (!type.compare("User")) - return fmt::format(CreateUserTableQ.c_str(), - params->user_table.c_str()); + return fmt::format(CreateUserTableQ, + params->user_table); if (!type.compare("Bucket")) - return fmt::format(CreateBucketTableQ.c_str(), - params->bucket_table.c_str(), - params->user_table.c_str()); + return fmt::format(CreateBucketTableQ, + params->bucket_table, + params->user_table); if (!type.compare("Object")) - return fmt::format(CreateObjectTableQ.c_str(), - params->object_table.c_str(), - params->bucket_table.c_str()); + return fmt::format(CreateObjectTableQ, + params->object_table, + params->bucket_table); if (!type.compare("ObjectData")) - return fmt::format(CreateObjectDataTableQ.c_str(), - params->objectdata_table.c_str(), - params->bucket_table.c_str()); + return fmt::format(CreateObjectDataTableQ, + params->objectdata_table, + params->bucket_table); if (!type.compare("ObjectView")) - return fmt::format(CreateObjectTableQ.c_str(), - params->object_view.c_str(), - params->objectdata_table.c_str(), - params->object_table.c_str()); + return fmt::format(CreateObjectTableQ, + params->object_view, + params->objectdata_table, + params->object_table); if (!type.compare("Quota")) - return fmt::format(CreateQuotaTableQ.c_str(), - params->quota_table.c_str()); + return fmt::format(CreateQuotaTableQ, + params->quota_table); if (!type.compare("LCHead")) - return fmt::format(CreateLCHeadTableQ.c_str(), - params->lc_head_table.c_str()); + return fmt::format(CreateLCHeadTableQ, + params->lc_head_table); if (!type.compare("LCEntry")) - return fmt::format(CreateLCEntryTableQ.c_str(), - params->lc_entry_table.c_str(), - params->bucket_table.c_str()); + return fmt::format(CreateLCEntryTableQ, + params->lc_entry_table, + params->bucket_table); - lsubdout(params->cct, rgw, 0) << "rgw dbstore: Incorrect table type("< {} ORDER BY BucketName ASC"; @@ -1332,18 +1331,18 @@ class GetLCEntryOp: virtual public DBOp { std::string Schema(DBOpPrepareParams ¶ms) { if (params.op.query_str == "get_next_entry") { - return fmt::format(NextQuery.c_str(), params.lc_entry_table.c_str(), + return fmt::format(NextQuery, params.lc_entry_table, params.op.lc_entry.index, params.op.lc_entry.bucket_name); } // default - return fmt::format(Query.c_str(), params.lc_entry_table.c_str(), + return fmt::format(Query, params.lc_entry_table, params.op.lc_entry.index, params.op.lc_entry.bucket_name); } }; class ListLCEntriesOp: virtual public DBOp { private: - const std::string Query = "SELECT \ + static constexpr std::string_view Query = "SELECT \ LCIndex, BucketName, StartTime, Status \ FROM '{}' WHERE LCIndex = {} AND BucketName > {} ORDER BY BucketName ASC LIMIT {}"; @@ -1351,15 +1350,15 @@ class ListLCEntriesOp: virtual public DBOp { virtual ~ListLCEntriesOp() {} std::string Schema(DBOpPrepareParams ¶ms) { - return fmt::format(Query.c_str(), params.lc_entry_table.c_str(), - params.op.lc_entry.index.c_str(), params.op.lc_entry.min_marker.c_str(), - params.op.list_max_count.c_str()); + return fmt::format(Query, params.lc_entry_table, + params.op.lc_entry.index, params.op.lc_entry.min_marker, + params.op.list_max_count); } }; class InsertLCHeadOp: virtual public DBOp { private: - const std::string Query = + static constexpr std::string_view Query = "INSERT OR REPLACE INTO '{}' \ (LCIndex, Marker, StartDate) \ VALUES ({}, {}, {})"; @@ -1368,7 +1367,7 @@ class InsertLCHeadOp: virtual public DBOp { virtual ~InsertLCHeadOp() {} std::string Schema(DBOpPrepareParams ¶ms) { - return fmt::format(Query.c_str(), params.lc_head_table.c_str(), + return fmt::format(Query, params.lc_head_table, params.op.lc_head.index, params.op.lc_head.marker, params.op.lc_head.start_date); } @@ -1376,21 +1375,21 @@ class InsertLCHeadOp: virtual public DBOp { class RemoveLCHeadOp: virtual public DBOp { private: - const std::string Query = + static constexpr std::string_view Query = "DELETE from '{}' where LCIndex = {}"; public: virtual ~RemoveLCHeadOp() {} std::string Schema(DBOpPrepareParams ¶ms) { - return fmt::format(Query.c_str(), params.lc_head_table.c_str(), + return fmt::format(Query, params.lc_head_table, params.op.lc_head.index); } }; class GetLCHeadOp: virtual public DBOp { private: - const std::string Query = "SELECT \ + static constexpr std::string_view Query = "SELECT \ LCIndex, Marker, StartDate \ from '{}' where LCIndex = {}"; @@ -1398,7 +1397,7 @@ class GetLCHeadOp: virtual public DBOp { virtual ~GetLCHeadOp() {} std::string Schema(DBOpPrepareParams ¶ms) { - return fmt::format(Query.c_str(), params.lc_head_table.c_str(), + return fmt::format(Query, params.lc_head_table, params.op.lc_head.index); } }; @@ -1507,8 +1506,8 @@ class DB { int Unlock(const DoutPrefixProvider *dpp); int InitializeParams(const DoutPrefixProvider *dpp, std::string Op, DBOpParams *params); - int ProcessOp(const DoutPrefixProvider *dpp, std::string Op, DBOpParams *params); - DBOp* getDBOp(const DoutPrefixProvider *dpp, std::string Op, struct DBOpParams *params); + int ProcessOp(const DoutPrefixProvider *dpp, std::string_view Op, DBOpParams *params); + DBOp* getDBOp(const DoutPrefixProvider *dpp, std::string_view Op, const DBOpParams *params); int objectmapInsert(const DoutPrefixProvider *dpp, std::string bucket, class ObjectOp* ptr); int objectmapDelete(const DoutPrefixProvider *dpp, std::string bucket); @@ -1578,16 +1577,18 @@ class DB { // db raw obj string is of format - // "____" - const std::string raw_obj_oid = "{0}_{1}_{2}_{3}_{4}"; + static constexpr std::string_view raw_obj_oid = "{0}_{1}_{2}_{3}_{4}"; - inline std::string to_oid(const std::string& bucket, const std::string& obj_name, const std::string& obj_instance, const std::string& obj_id, - std::string mp_str, uint64_t partnum) { - std::string s = fmt::format(raw_obj_oid.c_str(), bucket, obj_name, obj_instance, obj_id, mp_str, partnum); - return s; + std::string to_oid(std::string_view bucket, std::string_view obj_name, + std::string_view obj_instance, std::string_view obj_id, + std::string_view mp_str, uint64_t partnum) { + return fmt::format(raw_obj_oid, bucket, obj_name, obj_instance, obj_id, mp_str, partnum); } - inline int from_oid(const std::string& oid, std::string& bucket, std::string& obj_name, std::string& obj_id, + int from_oid(const std::string& oid, std::string& bucket, std::string& obj_name, std::string& obj_id, std::string& obj_instance, std::string& mp_str, uint64_t& partnum) { + // TODO: use ceph::split() from common/split.h + // XXX: doesn't this break if obj_name has underscores in it? std::vector result; boost::split(result, oid, boost::is_any_of("_")); bucket = result[0]; -- 2.39.5