]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore/bluestore_types: test {find,seek}_lextents
authorSage Weil <sage@redhat.com>
Tue, 10 May 2016 18:48:40 +0000 (14:48 -0400)
committerSage Weil <sage@redhat.com>
Wed, 1 Jun 2016 15:38:45 +0000 (11:38 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/bluestore_types.h
src/test/objectstore/test_bluestore_types.cc

index d485a0586ead5b570228515af3068d16a3abcde0..8c98faa190708b2f62af2d19ecea111d2fbf6a52 100644 (file)
@@ -496,6 +496,7 @@ struct bluestore_onode_t {
       expected_write_size(0),
       alloc_hint_flags(0) {}
 
+  /// find a lextent that includes offset
   map<uint64_t,bluestore_lextent_t>::iterator find_lextent(uint64_t offset) {
     map<uint64_t,bluestore_lextent_t>::iterator fp =
       extent_map.lower_bound(offset);
@@ -510,6 +511,7 @@ struct bluestore_onode_t {
     return fp;
   }
 
+  /// seek to the first lextent including or after offset
   map<uint64_t,bluestore_lextent_t>::iterator seek_lextent(uint64_t offset) {
     map<uint64_t,bluestore_lextent_t>::iterator fp =
       extent_map.lower_bound(offset);
index b0870c009956627fd402d9b01b5148c7e194401e..d721e6c0a3ffb8b2672027504871a1d0c866bb2f 100644 (file)
@@ -188,6 +188,89 @@ TEST(bluestore_extent_ref_map_t, intersects)
   ASSERT_FALSE(m.intersects(55, 1));
 }
 
+TEST(bluestore_onode_t, find_lextent)
+{
+  bluestore_onode_t on;
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(0));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(100));
+
+  on.extent_map[100] = bluestore_lextent_t(1, 0, 100, 0);
+  map<uint64_t,bluestore_lextent_t>::iterator a = on.extent_map.find(100);
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(0));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(99));
+  ASSERT_EQ(a, on.find_lextent(100));
+  ASSERT_EQ(a, on.find_lextent(101));
+  ASSERT_EQ(a, on.find_lextent(199));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(200));
+
+  on.extent_map[200] = bluestore_lextent_t(2, 0, 100, 0);
+  map<uint64_t,bluestore_lextent_t>::iterator b = on.extent_map.find(200);
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(0));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(99));
+  ASSERT_EQ(a, on.find_lextent(100));
+  ASSERT_EQ(a, on.find_lextent(101));
+  ASSERT_EQ(a, on.find_lextent(199));
+  ASSERT_EQ(b, on.find_lextent(200));
+  ASSERT_EQ(b, on.find_lextent(299));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(300));
+
+  on.extent_map[400] = bluestore_lextent_t(4, 0, 100, 0);
+  map<uint64_t,bluestore_lextent_t>::iterator d = on.extent_map.find(400);
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(0));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(99));
+  ASSERT_EQ(a, on.find_lextent(100));
+  ASSERT_EQ(a, on.find_lextent(101));
+  ASSERT_EQ(a, on.find_lextent(199));
+  ASSERT_EQ(b, on.find_lextent(200));
+  ASSERT_EQ(b, on.find_lextent(299));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(300));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(399));
+  ASSERT_EQ(d, on.find_lextent(400));
+  ASSERT_EQ(d, on.find_lextent(499));
+  ASSERT_EQ(on.extent_map.end(), on.find_lextent(500));
+}
+
+TEST(bluestore_onode_t, seek_lextent)
+{
+  bluestore_onode_t on;
+  ASSERT_EQ(on.extent_map.end(), on.seek_lextent(0));
+  ASSERT_EQ(on.extent_map.end(), on.seek_lextent(100));
+
+  on.extent_map[100] = bluestore_lextent_t(1, 0, 100, 0);
+  map<uint64_t,bluestore_lextent_t>::iterator a = on.extent_map.find(100);
+  ASSERT_EQ(a, on.seek_lextent(0));
+  ASSERT_EQ(a, on.seek_lextent(99));
+  ASSERT_EQ(a, on.seek_lextent(100));
+  ASSERT_EQ(a, on.seek_lextent(101));
+  ASSERT_EQ(a, on.seek_lextent(199));
+  ASSERT_EQ(on.extent_map.end(), on.seek_lextent(200));
+
+  on.extent_map[200] = bluestore_lextent_t(2, 0, 100, 0);
+  map<uint64_t,bluestore_lextent_t>::iterator b = on.extent_map.find(200);
+  ASSERT_EQ(a, on.seek_lextent(0));
+  ASSERT_EQ(a, on.seek_lextent(99));
+  ASSERT_EQ(a, on.seek_lextent(100));
+  ASSERT_EQ(a, on.seek_lextent(101));
+  ASSERT_EQ(a, on.seek_lextent(199));
+  ASSERT_EQ(b, on.seek_lextent(200));
+  ASSERT_EQ(b, on.seek_lextent(299));
+  ASSERT_EQ(on.extent_map.end(), on.seek_lextent(300));
+
+  on.extent_map[400] = bluestore_lextent_t(4, 0, 100, 0);
+  map<uint64_t,bluestore_lextent_t>::iterator d = on.extent_map.find(400);
+  ASSERT_EQ(a, on.seek_lextent(0));
+  ASSERT_EQ(a, on.seek_lextent(99));
+  ASSERT_EQ(a, on.seek_lextent(100));
+  ASSERT_EQ(a, on.seek_lextent(101));
+  ASSERT_EQ(a, on.seek_lextent(199));
+  ASSERT_EQ(b, on.seek_lextent(200));
+  ASSERT_EQ(b, on.seek_lextent(299));
+  ASSERT_EQ(d, on.seek_lextent(300));
+  ASSERT_EQ(d, on.seek_lextent(399));
+  ASSERT_EQ(d, on.seek_lextent(400));
+  ASSERT_EQ(d, on.seek_lextent(499));
+  ASSERT_EQ(on.extent_map.end(), on.seek_lextent(500));
+}
 TEST(bluestore_onode_t, punch_hole)
 {
   bluestore_onode_t on;