]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
test/crimson/seastore/test_btree_lba_manager: add single transaction split/merge...
authorSamuel Just <sjust@redhat.com>
Mon, 19 Oct 2020 22:14:28 +0000 (15:14 -0700)
committerSamuel Just <sjust@redhat.com>
Tue, 20 Oct 2020 19:27:12 +0000 (12:27 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/test/crimson/seastore/test_btree_lba_manager.cc

index b02d34427b180ce1933c62b4528524174bc74b9c..78d47d4da05703c9fb08f0dd4df52c2cb3229ee0 100644 (file)
@@ -249,6 +249,15 @@ struct btree_lba_manager_test :
     return addresses;
   }
 
+  std::vector<laddr_t> get_mapped_addresses(test_transaction_t &t) {
+    std::vector<laddr_t> addresses;
+    addresses.reserve(t.mappings.size());
+    for (auto &i: t.mappings) {
+      addresses.push_back(i.first);
+    }
+    return addresses;
+  }
+
   void check_mappings() {
     auto t = create_transaction();
     check_mappings(t);
@@ -354,3 +363,45 @@ TEST_F(btree_lba_manager_test, force_split_merge)
     submit_test_transaction(std::move(t));
   });
 }
+
+TEST_F(btree_lba_manager_test, single_transaction_split_merge)
+{
+  run_async([this] {
+    {
+      auto t = create_transaction();
+      for (unsigned i = 0; i < 600; ++i) {
+       alloc_mapping(t, 0, block_size, get_paddr());
+      }
+      check_mappings(t);
+      submit_test_transaction(std::move(t));
+    }
+    check_mappings();
+
+    {
+      auto addresses = get_mapped_addresses();
+      auto t = create_transaction();
+      for (unsigned i = 0; i != addresses.size(); ++i) {
+       if (i % 4 != 0) {
+         decref_mapping(t, addresses[i]);
+       }
+      }
+      check_mappings(t);
+      submit_test_transaction(std::move(t));
+    }
+    check_mappings();
+
+    {
+      auto t = create_transaction();
+      for (unsigned i = 0; i < 600; ++i) {
+       alloc_mapping(t, 0, block_size, get_paddr());
+      }
+      auto addresses = get_mapped_addresses(t);
+      for (unsigned i = 0; i != addresses.size(); ++i) {
+       decref_mapping(t, addresses[i]);
+      }
+      check_mappings(t);
+      submit_test_transaction(std::move(t));
+    }
+    check_mappings();
+  });
+}