]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore: fix crash by checking for nullopt in search input
authormyoungwon oh <ohmyoungwon@gmail.com>
Tue, 24 Feb 2026 05:56:46 +0000 (14:56 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Tue, 24 Feb 2026 05:56:46 +0000 (14:56 +0900)
Signed-off-by: Myoungwon Oh <ohmyoungwon@gmail.com>
src/crimson/os/seastore/omap_manager/log/log_node.cc
src/test/crimson/seastore/test_seastore.cc

index fa6b39db24fff7bb8404a3f4f751c3537755a789..4e6c75dfe1e9799949ef091290a3d8fed3a2f9fd 100644 (file)
@@ -182,7 +182,7 @@ void LogNode::for_each_live_entry(F&& fn) {
 void LogNode::list(const std::optional<std::string> &first,
   const std::optional<std::string> &last,
   std::map<std::string, bufferlist> &kvs) {
-  std::string_view s(*first);
+  std::string_view s = first ? std::string_view(*first) : std::string_view{""};
   std::string_view e = last ? std::string_view(*last) : std::string_view{};
   for_each_live_entry([&](const auto& ent, uint32_t index) -> bool {
     const auto k = ent.get_key();
index 891c306564cc56851d4591794e2447973a378dab..2185d54033c65acc6d6fa73652f748ebc8a4f1b1 100644 (file)
@@ -255,8 +255,10 @@ struct seastore_test_t :
 
     auto get_omaps(
       SeaStoreShard &sharded_seastore,
-      std::string start) {
-      ObjectStore::omap_iter_seek_t start_from{"", ObjectStore::omap_iter_seek_t::LOWER_BOUND};
+      std::string start,
+      decltype(ObjectStore::omap_iter_seek_t::seek_type) bound =
+       ObjectStore::omap_iter_seek_t::LOWER_BOUND) {
+      ObjectStore::omap_iter_seek_t start_from{start, bound};
       std::map<std::string, bufferlist> kvs;
       std::function<ObjectStore::omap_iter_ret_t(std::string_view, std::string_view)> callback =
         [&kvs] (std::string_view key, std::string_view value)
@@ -1883,6 +1885,9 @@ TEST_P(seastore_test_t, pgmeta_io)
 
     auto it = std::next(key_for_test_obj.begin(), 2);
     auto target_value = *it;  
+    kvs = test_obj.get_omaps(*sharded_seastore, target_value,
+      ObjectStore::omap_iter_seek_t::UPPER_BOUND);
+    EXPECT_EQ(kvs.size(), 3);
     test_obj.rm_omap_range(*sharded_seastore, std::string(), target_value);
     kvs = test_obj.get_omaps(*sharded_seastore, std::string());
     EXPECT_EQ(kvs.size(), log_count - 3);