diff options
author | Sage Weil <sage@inktank.com> | 2013-10-22 17:24:21 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-22 17:24:21 -0700 |
commit | 189e38a0ba95c574177c6f472e4f9811ebfffd02 (patch) | |
tree | 510afc1b10ca678a5862eca9dd94db086f7af333 | |
parent | 90e56eb017925ea1ad4f50a0d8eded1eee4319ab (diff) | |
download | ceph-189e38a0ba95c574177c6f472e4f9811ebfffd02.tar.gz |
ceph_test_rados_api_tier: verify delete creates whiteouts
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/test/librados/tier.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/test/librados/tier.cc b/src/test/librados/tier.cc index 140f87f1eab..3aaba6eafa8 100644 --- a/src/test/librados/tier.cc +++ b/src/test/librados/tier.cc @@ -161,6 +161,69 @@ TEST(LibRadosTier, Promote) { ASSERT_EQ(0, destroy_one_pool_pp(base_pool_name, cluster)); } +TEST(LibRadosTier, Whiteout) { + Rados cluster; + std::string base_pool_name = get_temp_pool_name(); + std::string cache_pool_name = base_pool_name + "-cache"; + ASSERT_EQ("", create_one_pool_pp(base_pool_name, cluster)); + ASSERT_EQ(0, cluster.pool_create(cache_pool_name.c_str())); + IoCtx cache_ioctx; + ASSERT_EQ(0, cluster.ioctx_create(cache_pool_name.c_str(), cache_ioctx)); + IoCtx base_ioctx; + ASSERT_EQ(0, cluster.ioctx_create(base_pool_name.c_str(), base_ioctx)); + + // configure cache + bufferlist inbl; + ASSERT_EQ(0, cluster.mon_command( + "{\"prefix\": \"osd tier add\", \"pool\": \"" + base_pool_name + + "\", \"tierpool\": \"" + cache_pool_name + "\"}", + inbl, NULL, NULL)); + ASSERT_EQ(0, cluster.mon_command( + "{\"prefix\": \"osd tier set-overlay\", \"pool\": \"" + base_pool_name + + "\", \"overlaypool\": \"" + cache_pool_name + "\"}", + inbl, NULL, NULL)); + ASSERT_EQ(0, cluster.mon_command( + "{\"prefix\": \"osd tier cache-mode\", \"pool\": \"" + cache_pool_name + + "\", \"mode\": \"writeback\"}", + inbl, NULL, NULL)); + + // wait for maps to settle + cluster.wait_for_latest_map(); + + // create some whiteouts, verify they behave + ASSERT_EQ(-ENOENT, base_ioctx.remove("foo")); + ASSERT_EQ(-ENOENT, base_ioctx.remove("bar")); + ASSERT_EQ(-ENOENT, base_ioctx.remove("foo")); + ASSERT_EQ(-ENOENT, base_ioctx.remove("bar")); + + // verify the whiteouts are there in the cache tier + { + ObjectIterator it = cache_ioctx.objects_begin(); + ASSERT_TRUE(it != cache_ioctx.objects_end()); + ASSERT_TRUE(it->first == string("foo") || it->first == string("bar")); + ++it; + ASSERT_TRUE(it->first == string("foo") || it->first == string("bar")); + ++it; + ASSERT_TRUE(it == cache_ioctx.objects_end()); + } + + // tear down tiers + ASSERT_EQ(0, cluster.mon_command( + "{\"prefix\": \"osd tier remove-overlay\", \"pool\": \"" + base_pool_name + + "\"}", + inbl, NULL, NULL)); + ASSERT_EQ(0, cluster.mon_command( + "{\"prefix\": \"osd tier remove\", \"pool\": \"" + base_pool_name + + "\", \"tierpool\": \"" + cache_pool_name + "\"}", + inbl, NULL, NULL)); + + base_ioctx.close(); + cache_ioctx.close(); + + cluster.pool_delete(cache_pool_name.c_str()); + ASSERT_EQ(0, destroy_one_pool_pp(base_pool_name, cluster)); +} + TEST(LibRadosTier, HitSetNone) { Rados cluster; std::string pool_name = get_temp_pool_name(); |