From: Sage Weil Date: Wed, 18 May 2016 21:57:26 +0000 (-0400) Subject: librados: add get_pool_is_selfmanaged_snaps_mode() function X-Git-Tag: v11.0.0~382^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8a9769a1d5fd42c265c2e6690d9e5117e7181f5a;p=ceph.git librados: add get_pool_is_selfmanaged_snaps_mode() function This exposes through librados whether a pool has (or had) selfmanaged snaps. Signed-off-by: Sage Weil --- diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 5c6abdb63f0e..b6b78cfb7f84 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -1189,7 +1189,7 @@ namespace librados // Features useful for test cases void test_blacklist_self(bool set); - /* listing objects */ + /* pool info */ int pool_list(std::list& v); int pool_list2(std::list >& v); int get_pool_stats(std::list& v, @@ -1201,6 +1201,9 @@ namespace librados int get_pool_stats(std::list& v, std::string& category, std::map& stats); + /// check if pool has selfmanaged snaps + bool get_pool_is_selfmanaged_snaps_mode(const std::string& poolname); + int cluster_stat(cluster_stat_t& result); int cluster_fsid(std::string *fsid); diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 38dcb092dfa8..8bd25c576509 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -595,6 +595,18 @@ int librados::RadosClient::get_pool_stats(std::list& pools, return ret; } +bool librados::RadosClient::get_pool_is_selfmanaged_snaps_mode( + const std::string& pool) +{ + bool ret = false; + objecter->with_osdmap([&](const OSDMap& osdmap) { + int64_t poolid = osdmap.lookup_pg_pool_name(pool); + if (poolid >= 0) + ret = osdmap.get_pg_pool(poolid)->is_unmanaged_snaps_mode(); + }); + return ret; +} + int librados::RadosClient::get_fs_stats(ceph_statfs& stats) { Mutex mylock ("RadosClient::get_fs_stats::mylock"); diff --git a/src/librados/RadosClient.h b/src/librados/RadosClient.h index 217c7823b29b..f495ba5966c2 100644 --- a/src/librados/RadosClient.h +++ b/src/librados/RadosClient.h @@ -104,6 +104,7 @@ public: int pool_list(std::list >& ls); int get_pool_stats(std::list& ls, map& result); int get_fs_stats(ceph_statfs& result); + bool get_pool_is_selfmanaged_snaps_mode(const std::string& pool); /* -1 was set as the default value and monitor will pickup the right crush rule with below order: diff --git a/src/librados/librados.cc b/src/librados/librados.cc index aa18fd0e2c1d..8f9cc28591ce 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -2348,6 +2348,11 @@ int librados::Rados::get_pool_stats(std::list& v, return -EOPNOTSUPP; } +bool librados::Rados::get_pool_is_selfmanaged_snaps_mode(const std::string& pool) +{ + return client->get_pool_is_selfmanaged_snaps_mode(pool); +} + int librados::Rados::cluster_stat(cluster_stat_t& result) { ceph_statfs stats; diff --git a/src/test/librados/snapshots.cc b/src/test/librados/snapshots.cc index 3eb4e726c1f5..4f9385b20497 100644 --- a/src/test/librados/snapshots.cc +++ b/src/test/librados/snapshots.cc @@ -41,7 +41,9 @@ TEST_F(LibRadosSnapshotsPP, SnapListPP) { bufferlist bl1; bl1.append(buf, sizeof(buf)); ASSERT_EQ(0, ioctx.write("foo", bl1, sizeof(buf), 0)); + ASSERT_FALSE(cluster.get_pool_is_selfmanaged_snaps_mode(pool_name)); ASSERT_EQ(0, ioctx.snap_create("snap1")); + ASSERT_FALSE(cluster.get_pool_is_selfmanaged_snaps_mode(pool_name)); std::vector snaps; EXPECT_EQ(0, ioctx.snap_list(&snaps)); EXPECT_EQ(1U, snaps.size()); @@ -49,6 +51,7 @@ TEST_F(LibRadosSnapshotsPP, SnapListPP) { EXPECT_EQ(0, ioctx.snap_lookup("snap1", &rid)); EXPECT_EQ(rid, snaps[0]); EXPECT_EQ(0, ioctx.snap_remove("snap1")); + ASSERT_FALSE(cluster.get_pool_is_selfmanaged_snaps_mode(pool_name)); } TEST_F(LibRadosSnapshots, SnapRemove) { @@ -238,7 +241,9 @@ TEST_F(LibRadosSnapshotsSelfManaged, Rollback) { TEST_F(LibRadosSnapshotsSelfManagedPP, SnapPP) { std::vector my_snaps; my_snaps.push_back(-2); + ASSERT_FALSE(cluster.get_pool_is_selfmanaged_snaps_mode(pool_name)); ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&my_snaps.back())); + ASSERT_TRUE(cluster.get_pool_is_selfmanaged_snaps_mode(pool_name)); ::std::reverse(my_snaps.begin(), my_snaps.end()); ASSERT_EQ(0, ioctx.selfmanaged_snap_set_write_ctx(my_snaps[0], my_snaps)); ::std::reverse(my_snaps.begin(), my_snaps.end()); @@ -269,6 +274,7 @@ TEST_F(LibRadosSnapshotsSelfManagedPP, SnapPP) { ASSERT_EQ(0, ioctx.selfmanaged_snap_remove(my_snaps.back())); my_snaps.pop_back(); ioctx.snap_set_read(LIBRADOS_SNAP_HEAD); + ASSERT_TRUE(cluster.get_pool_is_selfmanaged_snaps_mode(pool_name)); ASSERT_EQ(0, ioctx.remove("foo")); }