Skip to content

Commit 415fb34

Browse files
committed
os: eliminate get_omap_keys method
One can use omap_iterate instead. The primary goal of this change is to cleanup ObjectStore API Signed-off-by: Garry Drankovich <[email protected]>
1 parent 0473c8f commit 415fb34

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
@@ -721,13 +721,6 @@ class ObjectStore {
721721
bool allow_eio = false ///< [in] don't assert on eio
722722
) = 0;
723723

724-
/// Get keys defined on oid
725-
virtual int omap_get_keys(
726-
CollectionHandle &c, ///< [in] Collection containing oid
727-
const ghobject_t &oid, ///< [in] Object containing omap
728-
std::set<std::string> *keys ///< [out] Keys defined on oid
729-
) = 0;
730-
731724
/// Get key values
732725
virtual int omap_get_values(
733726
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
@@ -13731,59 +13731,6 @@ int BlueStore::omap_get_header(
1373113731
return r;
1373213732
}
1373313733

13734-
int BlueStore::omap_get_keys(
13735-
CollectionHandle &c_, ///< [in] Collection containing oid
13736-
const ghobject_t &oid, ///< [in] Object containing omap
13737-
set<string> *keys ///< [out] Keys defined on oid
13738-
)
13739-
{
13740-
Collection *c = static_cast<Collection *>(c_.get());
13741-
dout(15) << __func__ << " " << c->get_cid() << " oid " << oid << dendl;
13742-
if (!c->exists)
13743-
return -ENOENT;
13744-
auto start1 = mono_clock::now();
13745-
std::shared_lock l(c->lock);
13746-
int r = 0;
13747-
OnodeRef o = c->get_onode(oid, false);
13748-
if (!o || !o->exists) {
13749-
r = -ENOENT;
13750-
goto out;
13751-
}
13752-
if (!o->onode.has_omap())
13753-
goto out;
13754-
o->flush();
13755-
{
13756-
const string& prefix = o->get_omap_prefix();
13757-
string head, tail;
13758-
o->get_omap_key(string(), &head);
13759-
o->get_omap_tail(&tail);
13760-
KeyValueDB::Iterator it = db->get_iterator(prefix, 0, KeyValueDB::IteratorBounds{head, tail});
13761-
it->lower_bound(head);
13762-
while (it->valid()) {
13763-
if (it->key() >= tail) {
13764-
dout(30) << __func__ << " reached tail" << dendl;
13765-
break;
13766-
}
13767-
string user_key;
13768-
o->decode_omap_key(it->key(), &user_key);
13769-
dout(20) << __func__ << " got " << pretty_binary_string(it->key())
13770-
<< " -> " << user_key << dendl;
13771-
keys->insert(user_key);
13772-
it->next();
13773-
}
13774-
}
13775-
out:
13776-
c->store->log_latency(
13777-
__func__,
13778-
l_bluestore_omap_get_keys_lat,
13779-
mono_clock::now() - start1,
13780-
c->store->cct->_conf->bluestore_log_omap_iterator_age);
13781-
13782-
dout(10) << __func__ << " " << c->get_cid() << " oid " << oid << " = " << r
13783-
<< dendl;
13784-
return r;
13785-
}
13786-
1378713734
int BlueStore::omap_get_values(
1378813735
CollectionHandle &c_, ///< [in] Collection containing oid
1378913736
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
@@ -3367,13 +3367,6 @@ class BlueStore : public ObjectStore,
33673367
bool allow_eio = false ///< [in] don't assert on eio
33683368
) override;
33693369

3370-
/// Get keys defined on oid
3371-
int omap_get_keys(
3372-
CollectionHandle &c, ///< [in] Collection containing oid
3373-
const ghobject_t &oid, ///< [in] Object containing omap
3374-
std::set<std::string> *keys ///< [out] Keys defined on oid
3375-
) override;
3376-
33773370
/// Get key values
33783371
int omap_get_values(
33793372
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
@@ -1645,49 +1645,6 @@ int KStore::omap_get_header(
16451645
return r;
16461646
}
16471647

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

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

src/os/memstore/MemStore.cc

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

500-
int MemStore::omap_get_keys(
501-
CollectionHandle& ch, ///< [in] Collection containing oid
502-
const ghobject_t &oid, ///< [in] Object containing omap
503-
std::set<std::string> *keys ///< [out] Keys defined on oid
504-
)
505-
{
506-
dout(10) << __func__ << " " << ch->cid << " " << oid << dendl;
507-
Collection *c = static_cast<Collection*>(ch.get());
508-
ObjectRef o = c->get_object(oid);
509-
if (!o)
510-
return -ENOENT;
511-
std::lock_guard lock{o->omap_mutex};
512-
for (auto p = o->omap.begin(); p != o->omap.end(); ++p)
513-
keys->insert(p->first);
514-
return 0;
515-
}
516-
517500
int MemStore::omap_get_values(
518501
CollectionHandle& ch, ///< [in] Collection containing oid
519502
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
@@ -346,14 +346,6 @@ class MemStore : public ObjectStore {
346346
bool allow_eio = false ///< [in] don't assert on eio
347347
) override;
348348

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

src/test/objectstore/ObjectStoreImitator.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -319,12 +319,6 @@ class ObjectStoreImitator : public ObjectStore {
319319
) override {
320320
return 0;
321321
}
322-
int omap_get_keys(CollectionHandle &c, ///< [in] Collection containing oid
323-
const ghobject_t &oid, ///< [in] Object containing omap
324-
std::set<std::string> *keys ///< [out] Keys defined on oid
325-
) override {
326-
return 0;
327-
}
328322
int omap_get_values(CollectionHandle &c, ///< [in] Collection containing oid
329323
const ghobject_t &oid, ///< [in] Object containing omap
330324
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
@@ -6139,10 +6139,6 @@ TEST_P(StoreTest, OMapTest) {
61396139
ASSERT_EQ(cur_attrs.size(), size_t(1));
61406140
ASSERT_TRUE(bl_eq(bl1, bl3));
61416141

6142-
set<string> keys;
6143-
r = store->omap_get_keys(ch, hoid, &keys);
6144-
ASSERT_EQ(r, 0);
6145-
ASSERT_EQ(keys.size(), size_t(1));
61466142
}
61476143

61486144
// test omap_clear, omap_rmkey_range

0 commit comments

Comments
 (0)