Skip to content

Commit 70eecf4

Browse files
Merge pull request ceph#65763 from gardran/wip-gardran-kill-get-omap-keys
os: eliminate ObjectStore::get_omap_keys method
2 parents 7cb2650 + 415fb34 commit 70eecf4

File tree

10 files changed

+8
-154
lines changed

10 files changed

+8
-154
lines changed

src/os/FuseStore.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,14 @@ static int os_readdir(const char *path,
538538
case FN_OBJECT_OMAP:
539539
{
540540
set<string> keys;
541-
fs->store->omap_get_keys(ch, oid, &keys);
541+
fs->store->omap_iterate(
542+
ch, oid,
543+
ObjectStore::omap_iter_seek_t::min_lower_bound(),
544+
[&keys]
545+
(std::string_view key, std::string_view) mutable {
546+
keys.emplace(key);
547+
return ObjectStore::omap_iter_ret_t::NEXT;
548+
});
542549
unsigned skip = offset;
543550
for (auto k : keys) {
544551
if (skip) {

src/os/ObjectStore.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -722,13 +722,6 @@ class ObjectStore {
722722
bool allow_eio = false ///< [in] don't assert on eio
723723
) = 0;
724724

725-
/// Get keys defined on oid
726-
virtual int omap_get_keys(
727-
CollectionHandle &c, ///< [in] Collection containing oid
728-
const ghobject_t &oid, ///< [in] Object containing omap
729-
std::set<std::string> *keys ///< [out] Keys defined on oid
730-
) = 0;
731-
732725
/// Get key values
733726
virtual int omap_get_values(
734727
CollectionHandle &c, ///< [in] Collection containing oid

src/os/bluestore/BlueStore.cc

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -13796,59 +13796,6 @@ int BlueStore::omap_get_header(
1379613796
return r;
1379713797
}
1379813798

13799-
int BlueStore::omap_get_keys(
13800-
CollectionHandle &c_, ///< [in] Collection containing oid
13801-
const ghobject_t &oid, ///< [in] Object containing omap
13802-
set<string> *keys ///< [out] Keys defined on oid
13803-
)
13804-
{
13805-
Collection *c = static_cast<Collection *>(c_.get());
13806-
dout(15) << __func__ << " " << c->get_cid() << " oid " << oid << dendl;
13807-
if (!c->exists)
13808-
return -ENOENT;
13809-
auto start1 = mono_clock::now();
13810-
std::shared_lock l(c->lock);
13811-
int r = 0;
13812-
OnodeRef o = c->get_onode(oid, false);
13813-
if (!o || !o->exists) {
13814-
r = -ENOENT;
13815-
goto out;
13816-
}
13817-
if (!o->onode.has_omap())
13818-
goto out;
13819-
o->flush();
13820-
{
13821-
const string& prefix = o->get_omap_prefix();
13822-
string head, tail;
13823-
o->get_omap_key(string(), &head);
13824-
o->get_omap_tail(&tail);
13825-
KeyValueDB::Iterator it = db->get_iterator(prefix, 0, KeyValueDB::IteratorBounds{head, tail});
13826-
it->lower_bound(head);
13827-
while (it->valid()) {
13828-
if (it->key() >= tail) {
13829-
dout(30) << __func__ << " reached tail" << dendl;
13830-
break;
13831-
}
13832-
string user_key;
13833-
o->decode_omap_key(it->key(), &user_key);
13834-
dout(20) << __func__ << " got " << pretty_binary_string(it->key())
13835-
<< " -> " << user_key << dendl;
13836-
keys->insert(user_key);
13837-
it->next();
13838-
}
13839-
}
13840-
out:
13841-
c->store->log_latency(
13842-
__func__,
13843-
l_bluestore_omap_get_keys_lat,
13844-
mono_clock::now() - start1,
13845-
c->store->cct->_conf->bluestore_log_omap_iterator_age);
13846-
13847-
dout(10) << __func__ << " " << c->get_cid() << " oid " << oid << " = " << r
13848-
<< dendl;
13849-
return r;
13850-
}
13851-
1385213799
int BlueStore::omap_get_values(
1385313800
CollectionHandle &c_, ///< [in] Collection containing oid
1385413801
const ghobject_t &oid, ///< [in] Object containing omap

src/os/bluestore/BlueStore.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3385,13 +3385,6 @@ class BlueStore : public ObjectStore,
33853385
bool allow_eio = false ///< [in] don't assert on eio
33863386
) override;
33873387

3388-
/// Get keys defined on oid
3389-
int omap_get_keys(
3390-
CollectionHandle &c, ///< [in] Collection containing oid
3391-
const ghobject_t &oid, ///< [in] Object containing omap
3392-
std::set<std::string> *keys ///< [out] Keys defined on oid
3393-
) override;
3394-
33953388
/// Get key values
33963389
int omap_get_values(
33973390
CollectionHandle &c, ///< [in] Collection containing oid

src/os/kstore/KStore.cc

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1646,49 +1646,6 @@ int KStore::omap_get_header(
16461646
return r;
16471647
}
16481648

1649-
int KStore::omap_get_keys(
1650-
CollectionHandle& ch, ///< [in] Collection containing oid
1651-
const ghobject_t &oid, ///< [in] Object containing omap
1652-
set<string> *keys ///< [out] Keys defined on oid
1653-
)
1654-
{
1655-
dout(15) << __func__ << " " << ch->cid << " oid " << oid << dendl;
1656-
Collection *c = static_cast<Collection*>(ch.get());
1657-
std::shared_lock l{c->lock};
1658-
int r = 0;
1659-
OnodeRef o = c->get_onode(oid, false);
1660-
if (!o || !o->exists) {
1661-
r = -ENOENT;
1662-
goto out;
1663-
}
1664-
if (!o->onode.omap_head)
1665-
goto out;
1666-
o->flush();
1667-
{
1668-
KeyValueDB::Iterator it = db->get_iterator(PREFIX_OMAP);
1669-
string head, tail;
1670-
get_omap_key(o->onode.omap_head, string(), &head);
1671-
get_omap_tail(o->onode.omap_head, &tail);
1672-
it->lower_bound(head);
1673-
while (it->valid()) {
1674-
if (it->key() >= tail) {
1675-
dout(30) << __func__ << " reached tail" << dendl;
1676-
break;
1677-
}
1678-
string user_key;
1679-
decode_omap_key(it->key(), &user_key);
1680-
dout(30) << __func__ << " got " << pretty_binary_string(it->key())
1681-
<< " -> " << user_key << dendl;
1682-
ceph_assert(it->key() < tail);
1683-
keys->insert(user_key);
1684-
it->next();
1685-
}
1686-
}
1687-
out:
1688-
dout(10) << __func__ << " " << ch->cid << " oid " << oid << " = " << r << dendl;
1689-
return r;
1690-
}
1691-
16921649
int KStore::omap_get_values(
16931650
CollectionHandle& ch, ///< [in] Collection containing oid
16941651
const ghobject_t &oid, ///< [in] Object containing omap

src/os/kstore/KStore.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -503,14 +503,6 @@ class KStore : public ObjectStore {
503503
bool allow_eio = false ///< [in] don't assert on eio
504504
) override;
505505

506-
using ObjectStore::omap_get_keys;
507-
/// Get keys defined on oid
508-
int omap_get_keys(
509-
CollectionHandle& c, ///< [in] Collection containing oid
510-
const ghobject_t &oid, ///< [in] Object containing omap
511-
std::set<std::string> *keys ///< [out] Keys defined on oid
512-
) override;
513-
514506
using ObjectStore::omap_get_values;
515507
/// Get key values
516508
int omap_get_values(

src/os/memstore/MemStore.cc

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -499,23 +499,6 @@ int MemStore::omap_get_header(
499499
return 0;
500500
}
501501

502-
int MemStore::omap_get_keys(
503-
CollectionHandle& ch, ///< [in] Collection containing oid
504-
const ghobject_t &oid, ///< [in] Object containing omap
505-
std::set<std::string> *keys ///< [out] Keys defined on oid
506-
)
507-
{
508-
dout(10) << __func__ << " " << ch->cid << " " << oid << dendl;
509-
Collection *c = static_cast<Collection*>(ch.get());
510-
ObjectRef o = c->get_object(oid);
511-
if (!o)
512-
return -ENOENT;
513-
std::lock_guard lock{o->omap_mutex};
514-
for (auto p = o->omap.begin(); p != o->omap.end(); ++p)
515-
keys->insert(p->first);
516-
return 0;
517-
}
518-
519502
int MemStore::omap_get_values(
520503
CollectionHandle& ch, ///< [in] Collection containing oid
521504
const ghobject_t &oid, ///< [in] Object containing omap

src/os/memstore/MemStore.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -347,14 +347,6 @@ class MemStore : public ObjectStore {
347347
bool allow_eio = false ///< [in] don't assert on eio
348348
) override;
349349

350-
using ObjectStore::omap_get_keys;
351-
/// Get keys defined on oid
352-
int omap_get_keys(
353-
CollectionHandle& c, ///< [in] Collection containing oid
354-
const ghobject_t &oid, ///< [in] Object containing omap
355-
std::set<std::string> *keys ///< [out] Keys defined on oid
356-
) override;
357-
358350
using ObjectStore::omap_get_values;
359351
/// Get key values
360352
int omap_get_values(

src/test/objectstore/ObjectStoreImitator.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -320,12 +320,6 @@ class ObjectStoreImitator : public ObjectStore {
320320
) override {
321321
return 0;
322322
}
323-
int omap_get_keys(CollectionHandle &c, ///< [in] Collection containing oid
324-
const ghobject_t &oid, ///< [in] Object containing omap
325-
std::set<std::string> *keys ///< [out] Keys defined on oid
326-
) override {
327-
return 0;
328-
}
329323
int omap_get_values(CollectionHandle &c, ///< [in] Collection containing oid
330324
const ghobject_t &oid, ///< [in] Object containing omap
331325
const std::set<std::string> &keys, ///< [in] Keys to get

src/test/objectstore/store_test.cc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6141,10 +6141,6 @@ TEST_P(StoreTest, OMapTest) {
61416141
ASSERT_EQ(cur_attrs.size(), size_t(1));
61426142
ASSERT_TRUE(bl_eq(bl1, bl3));
61436143

6144-
set<string> keys;
6145-
r = store->omap_get_keys(ch, hoid, &keys);
6146-
ASSERT_EQ(r, 0);
6147-
ASSERT_EQ(keys.size(), size_t(1));
61486144
}
61496145

61506146
// test omap_clear, omap_rmkey_range

0 commit comments

Comments
 (0)