From: Sage Weil Date: Tue, 10 May 2016 18:48:40 +0000 (-0400) Subject: os/bluestore/bluestore_types: test {find,seek}_lextents X-Git-Tag: v11.0.0~359^2~106 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=117835ba02f78486574c42bd801da71c2a9e9ffd;p=ceph.git os/bluestore/bluestore_types: test {find,seek}_lextents Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index d485a0586ead..8c98faa19070 100644 --- a/src/os/bluestore/bluestore_types.h +++ b/src/os/bluestore/bluestore_types.h @@ -496,6 +496,7 @@ struct bluestore_onode_t { expected_write_size(0), alloc_hint_flags(0) {} + /// find a lextent that includes offset map::iterator find_lextent(uint64_t offset) { map::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::iterator seek_lextent(uint64_t offset) { map::iterator fp = extent_map.lower_bound(offset); diff --git a/src/test/objectstore/test_bluestore_types.cc b/src/test/objectstore/test_bluestore_types.cc index b0870c009956..d721e6c0a3ff 100644 --- a/src/test/objectstore/test_bluestore_types.cc +++ b/src/test/objectstore/test_bluestore_types.cc @@ -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::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::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::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::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::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::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;