From: Sage Weil Date: Thu, 9 Sep 2021 16:15:22 +0000 (-0500) Subject: os/bluestore: refactor object key helpers a bit X-Git-Tag: v17.1.0~535^2~30 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ab8ca4368602489149bf3e3960007d21cae665aa;p=ceph.git os/bluestore: refactor object key helpers a bit We want methods that work on partial keys. Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 8899981b8511..897742111140 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -379,20 +379,12 @@ static const char *_key_decode_prefix(const char *p, ghobject_t *oid) #define ENCODED_KEY_PREFIX_LEN (1 + 8 + 4) -template -static int get_key_object(const S& key, ghobject_t *oid) +static int _get_key_object(const char *p, ghobject_t *oid) { int r; - const char *p = key.c_str(); - - if (key.length() < ENCODED_KEY_PREFIX_LEN) - return -1; p = _key_decode_prefix(p, oid); - if (key.length() == ENCODED_KEY_PREFIX_LEN) - return -2; - r = decode_escaped(p, &oid->hobj.nspace); if (r < 0) return -2; @@ -437,10 +429,19 @@ static int get_key_object(const S& key, ghobject_t *oid) } template -static void get_object_key(CephContext *cct, const ghobject_t& oid, S *key) +static int get_key_object(const S& key, ghobject_t *oid) { - key->clear(); + if (key.length() < ENCODED_KEY_PREFIX_LEN) + return -1; + if (key.length() == ENCODED_KEY_PREFIX_LEN) + return -2; + const char *p = key.c_str(); + return _get_key_object(p, oid); +} +template +static void _get_object_key(const ghobject_t& oid, S *key) +{ size_t max_len = ENCODED_KEY_PREFIX_LEN + (oid.hobj.nspace.length() * 3 + 1) + (oid.hobj.get_key().length() * 3 + 1) + @@ -475,6 +476,13 @@ static void get_object_key(CephContext *cct, const ghobject_t& oid, S *key) _key_encode_u64(oid.generation, key); key->push_back(ONODE_KEY_SUFFIX); +} + +template +static void get_object_key(CephContext *cct, const ghobject_t& oid, S *key) +{ + key->clear(); + _get_object_key(oid, key); // sanity check if (true) {