From 117835ba02f78486574c42bd801da71c2a9e9ffd Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 10 May 2016 14:48:40 -0400 Subject: [PATCH] os/bluestore/bluestore_types: test {find,seek}_lextents Signed-off-by: Sage Weil --- src/os/bluestore/bluestore_types.h | 2 + src/test/objectstore/test_bluestore_types.cc | 83 ++++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index d485a0586ea..8c98faa1907 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 b0870c00995..d721e6c0a3f 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; -- 2.39.5