From: Jason Dillaman Date: Sat, 13 Jan 2018 21:15:48 +0000 (-0500) Subject: cls/rbd: remove incompatible group features from partial implementation X-Git-Tag: v12.2.3~223^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cadd8426b358647505e950017d9a146e6f7f6696;p=ceph.git cls/rbd: remove incompatible group features from partial implementation Fixes: https://tracker.ceph.com/issues/22676 Signed-off-by: Jason Dillaman --- diff --git a/src/cls/rbd/cls_rbd_types.cc b/src/cls/rbd/cls_rbd_types.cc index 81b12a0fc0b1..6428f1f5d5b4 100644 --- a/src/cls/rbd/cls_rbd_types.cc +++ b/src/cls/rbd/cls_rbd_types.cc @@ -317,24 +317,6 @@ bool GroupSpec::is_valid() const { return (!group_id.empty()) && (pool_id != -1); } -void GroupSnapshotNamespace::encode(bufferlist& bl) const { - ::encode(group_pool, bl); - ::encode(group_id, bl); - ::encode(snapshot_id, bl); -} - -void GroupSnapshotNamespace::decode(bufferlist::iterator& it) { - ::decode(group_pool, it); - ::decode(group_id, it); - ::decode(snapshot_id, it); -} - -void GroupSnapshotNamespace::dump(Formatter *f) const { - f->dump_int("group_pool", group_pool); - f->dump_string("group_id", group_id); - f->dump_int("snapshot_id", snapshot_id); -} - class EncodeSnapshotNamespaceVisitor : public boost::static_visitor { public: explicit EncodeSnapshotNamespaceVisitor(bufferlist &bl) : m_bl(bl) { @@ -409,9 +391,6 @@ void SnapshotNamespaceOnDisk::decode(bufferlist::iterator &p) case cls::rbd::SNAPSHOT_NAMESPACE_TYPE_USER: snapshot_namespace = UserSnapshotNamespace(); break; - case cls::rbd::SNAPSHOT_NAMESPACE_TYPE_GROUP: - snapshot_namespace = GroupSnapshotNamespace(); - break; default: snapshot_namespace = UnknownSnapshotNamespace(); break; @@ -426,8 +405,6 @@ void SnapshotNamespaceOnDisk::dump(Formatter *f) const { void SnapshotNamespaceOnDisk::generate_test_instances(std::list &o) { o.push_back(new SnapshotNamespaceOnDisk(UserSnapshotNamespace())); - o.push_back(new SnapshotNamespaceOnDisk(GroupSnapshotNamespace(0, "10152ae8944a", 1))); - o.push_back(new SnapshotNamespaceOnDisk(GroupSnapshotNamespace(5, "1018643c9869", 3))); } std::ostream& operator<<(std::ostream& os, const UserSnapshotNamespace& ns) { @@ -435,14 +412,6 @@ std::ostream& operator<<(std::ostream& os, const UserSnapshotNamespace& ns) { return os; } -std::ostream& operator<<(std::ostream& os, const GroupSnapshotNamespace& ns) { - os << "[group" - << " group_pool=" << ns.group_pool - << " group_id=" << ns.group_id - << " snapshot_id=" << ns.snapshot_id << "]"; - return os; -} - std::ostream& operator<<(std::ostream& os, const UnknownSnapshotNamespace& ns) { os << "[unknown]"; return os; diff --git a/src/cls/rbd/cls_rbd_types.h b/src/cls/rbd/cls_rbd_types.h index 7d8d1abcad2d..f983577b44ff 100644 --- a/src/cls/rbd/cls_rbd_types.h +++ b/src/cls/rbd/cls_rbd_types.h @@ -219,8 +219,7 @@ struct GroupSpec { WRITE_CLASS_ENCODER(GroupSpec); enum SnapshotNamespaceType { - SNAPSHOT_NAMESPACE_TYPE_USER = 0, - SNAPSHOT_NAMESPACE_TYPE_GROUP = 1 + SNAPSHOT_NAMESPACE_TYPE_USER = 0 }; struct UserSnapshotNamespace { @@ -245,46 +244,6 @@ struct UserSnapshotNamespace { std::ostream& operator<<(std::ostream& os, const UserSnapshotNamespace& ns); -struct GroupSnapshotNamespace { - static const uint32_t SNAPSHOT_NAMESPACE_TYPE = SNAPSHOT_NAMESPACE_TYPE_GROUP; - - GroupSnapshotNamespace() {} - - GroupSnapshotNamespace(int64_t _group_pool, - const string &_group_id, - const snapid_t &_snapshot_id) :group_pool(_group_pool), - group_id(_group_id), - snapshot_id(_snapshot_id) {} - - int64_t group_pool; - string group_id; - snapid_t snapshot_id; - - void encode(bufferlist& bl) const; - void decode(bufferlist::iterator& it); - - void dump(Formatter *f) const; - - inline bool operator==(const GroupSnapshotNamespace& gsn) const { - return group_pool == gsn.group_pool && - group_id == gsn.group_id && - snapshot_id == gsn.snapshot_id; - } - - inline bool operator<(const GroupSnapshotNamespace& gsn) const { - if (group_pool < gsn.group_pool) { - return true; - } else if (group_id < gsn.group_id) { - return true; - } else { - return snapshot_id < gsn.snapshot_id; - } - } - -}; - -std::ostream& operator<<(std::ostream& os, const GroupSnapshotNamespace& ns); - struct UnknownSnapshotNamespace { static const uint32_t SNAPSHOT_NAMESPACE_TYPE = static_cast(-1); @@ -304,7 +263,7 @@ struct UnknownSnapshotNamespace { std::ostream& operator<<(std::ostream& os, const UnknownSnapshotNamespace& ns); -typedef boost::variant SnapshotNamespace; +typedef boost::variant SnapshotNamespace; struct SnapshotNamespaceOnDisk { diff --git a/src/test/cls_rbd/test_cls_rbd.cc b/src/test/cls_rbd/test_cls_rbd.cc index a13c18329311..367137832232 100644 --- a/src/test/cls_rbd/test_cls_rbd.cc +++ b/src/test/cls_rbd/test_cls_rbd.cc @@ -785,7 +785,6 @@ TEST_F(TestClsRbd, parents) TEST_F(TestClsRbd, snapshots) { - cls::rbd::SnapshotNamespace userSnapNamespace = cls::rbd::UserSnapshotNamespace(); librados::IoCtx ioctx; ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); @@ -795,7 +794,6 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(0, create_image(&ioctx, oid, 10, 22, 0, oid, -1)); vector snap_names; - vector snap_namespaces; vector snap_sizes; SnapContext snapc; vector parents; @@ -807,9 +805,7 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(0u, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(0u, snap_names.size()); - ASSERT_EQ(0u, snap_namespaces.size()); ASSERT_EQ(0u, snap_sizes.size()); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(0u, snap_timestamps.size()); @@ -821,11 +817,8 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(0u, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(1u, snap_names.size()); ASSERT_EQ("snap1", snap_names[0]); - ASSERT_EQ(1u, snap_namespaces.size()); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(10u, snap_sizes[0]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(1u, snap_timestamps.size()); @@ -838,11 +831,8 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(0u, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(1u, snap_names.size()); ASSERT_EQ("snap1", snap_names[0]); - ASSERT_EQ(1u, snap_namespaces.size()); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(10u, snap_sizes[0]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(1u, snap_timestamps.size()); @@ -856,11 +846,8 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(0u, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(1u, snap_names.size()); ASSERT_EQ("snap1", snap_names[0]); - ASSERT_EQ(1u, snap_namespaces.size()); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(10u, snap_sizes[0]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(1u, snap_timestamps.size()); @@ -873,11 +860,8 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(0u, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(snap_names.size(), 1u); ASSERT_EQ(snap_names[0], "snap1"); - ASSERT_EQ(1u, snap_namespaces.size()); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(snap_sizes[0], 10u); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(1u, snap_timestamps.size()); @@ -891,14 +875,10 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(1u, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(2u, snap_names.size()); - ASSERT_EQ(2u, snap_namespaces.size()); ASSERT_EQ("snap2", snap_names[0]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(10u, snap_sizes[0]); ASSERT_EQ("snap1", snap_names[1]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[1]); ASSERT_EQ(10u, snap_sizes[1]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(2u, snap_timestamps.size()); @@ -906,14 +886,10 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(0, snapshot_rename(&ioctx, oid, 0, "snap1-rename")); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(2u, snap_names.size()); - ASSERT_EQ(2u, snap_namespaces.size()); ASSERT_EQ("snap2", snap_names[0]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(10u, snap_sizes[0]); ASSERT_EQ("snap1-rename", snap_names[1]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[1]); ASSERT_EQ(10u, snap_sizes[1]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(2u, snap_timestamps.size()); @@ -925,11 +901,8 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(1u, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(1u, snap_names.size()); - ASSERT_EQ(1u, snap_namespaces.size()); ASSERT_EQ("snap2", snap_names[0]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(10u, snap_sizes[0]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(1u, snap_timestamps.size()); @@ -950,14 +923,10 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(large_snap_id, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(2u, snap_names.size()); - ASSERT_EQ(2u, snap_namespaces.size()); ASSERT_EQ("snap3", snap_names[0]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(0u, snap_sizes[0]); ASSERT_EQ("snap2", snap_names[1]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[1]); ASSERT_EQ(10u, snap_sizes[1]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(2u, snap_timestamps.size()); @@ -977,11 +946,8 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(large_snap_id, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(1u, snap_names.size()); - ASSERT_EQ(1u, snap_namespaces.size()); ASSERT_EQ("snap2", snap_names[0]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[0]); ASSERT_EQ(10u, snap_sizes[0]); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(1u, snap_timestamps.size()); @@ -993,9 +959,7 @@ TEST_F(TestClsRbd, snapshots) ASSERT_EQ(large_snap_id, snapc.seq); ASSERT_EQ(0, snapshot_list(&ioctx, oid, snapc.snaps, &snap_names, &snap_sizes, &parents, &protection_status)); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); ASSERT_EQ(0u, snap_names.size()); - ASSERT_EQ(0u, snap_namespaces.size()); ASSERT_EQ(0u, snap_sizes.size()); ASSERT_EQ(0, snapshot_timestamp_list(&ioctx, oid, snapc.snaps, &snap_timestamps)); ASSERT_EQ(0u, snap_timestamps.size()); @@ -1003,45 +967,6 @@ TEST_F(TestClsRbd, snapshots) ioctx.close(); } -TEST_F(TestClsRbd, snapshots_namespaces) -{ - cls::rbd::SnapshotNamespace groupSnapNamespace = cls::rbd::GroupSnapshotNamespace(5, "1018643c9869", 3); - cls::rbd::SnapshotNamespace userSnapNamespace = cls::rbd::UserSnapshotNamespace(); - librados::IoCtx ioctx; - ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - - string oid = get_temp_image_name(); - - ASSERT_EQ(0, create_image(&ioctx, oid, 10, 22, 0, oid, -1)); - - vector snap_namespaces; - SnapContext snapc; - - ASSERT_EQ(0, get_snapcontext(&ioctx, oid, &snapc)); - ASSERT_EQ(0u, snapc.snaps.size()); - ASSERT_EQ(0u, snapc.seq); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); - ASSERT_EQ(0u, snap_namespaces.size()); - - ASSERT_EQ(0, snapshot_add(&ioctx, oid, 0, "snap1")); - - librados::ObjectWriteOperation op; - ::librbd::cls_client::snapshot_add(&op, 1, "snap1", groupSnapNamespace); - int r = ioctx.operate(oid, &op); - ASSERT_EQ(0, r); - - ASSERT_EQ(0, get_snapcontext(&ioctx, oid, &snapc)); - ASSERT_EQ(2u, snapc.snaps.size()); - ASSERT_EQ(1u, snapc.snaps[0]); - ASSERT_EQ(0u, snapc.snaps[1]); - ASSERT_EQ(1u, snapc.seq); - ASSERT_EQ(0, snapshot_namespace_list(&ioctx, oid, snapc.snaps, &snap_namespaces)); - ASSERT_EQ(groupSnapNamespace, snap_namespaces[0]); - ASSERT_EQ(userSnapNamespace, snap_namespaces[1]); - - ioctx.close(); -} - TEST_F(TestClsRbd, snapshots_timestamps) { librados::IoCtx ioctx; @@ -1069,7 +994,6 @@ TEST_F(TestClsRbd, snapshots_timestamps) ioctx.close(); } - TEST_F(TestClsRbd, snapid_race) { librados::IoCtx ioctx; @@ -1952,18 +1876,6 @@ TEST_F(TestClsRbd, mirror_instances) { ASSERT_EQ(0U, instance_ids.size()); } -TEST_F(TestClsRbd, group_create) { - librados::IoCtx ioctx; - ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - - string group_id = "group_id"; - ASSERT_EQ(0, group_create(&ioctx, group_id)); - - uint64_t psize; - time_t pmtime; - ASSERT_EQ(0, ioctx.stat(group_id, &psize, &pmtime)); -} - TEST_F(TestClsRbd, group_dir_list) { librados::IoCtx ioctx; ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); @@ -2069,12 +1981,10 @@ void test_image_add(librados::IoCtx &ioctx, const string& group_id, ASSERT_EQ(0, ioctx.omap_get_keys(group_id, "", 10, &keys)); auto it = keys.begin(); - ASSERT_EQ(2U, keys.size()); + ASSERT_EQ(1U, keys.size()); string image_key = cls::rbd::GroupImageSpec(image_id, pool_id).image_key(); ASSERT_EQ(image_key, *it); - ++it; - ASSERT_EQ("snap_seq", *it); } TEST_F(TestClsRbd, group_image_add) { @@ -2082,7 +1992,7 @@ TEST_F(TestClsRbd, group_image_add) { ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); string group_id = "group_id"; - ASSERT_EQ(0, group_create(&ioctx, group_id)); + ASSERT_EQ(0, ioctx.create(group_id, true)); int64_t pool_id = ioctx.get_id(); string image_id = "image_id"; @@ -2093,8 +2003,8 @@ TEST_F(TestClsRbd, group_image_remove) { librados::IoCtx ioctx; ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - string group_id = "group_id"; - ASSERT_EQ(0, group_create(&ioctx, group_id)); + string group_id = "group_id1"; + ASSERT_EQ(0, ioctx.create(group_id, true)); int64_t pool_id = ioctx.get_id(); string image_id = "image_id"; @@ -2104,16 +2014,15 @@ TEST_F(TestClsRbd, group_image_remove) { ASSERT_EQ(0, group_image_remove(&ioctx, group_id, spec)); set keys; ASSERT_EQ(0, ioctx.omap_get_keys(group_id, "", 10, &keys)); - ASSERT_EQ(1U, keys.size()); - ASSERT_EQ("snap_seq", *(keys.begin())); + ASSERT_EQ(0U, keys.size()); } TEST_F(TestClsRbd, group_image_list) { librados::IoCtx ioctx; ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - string group_id = "group_id"; - ASSERT_EQ(0, group_create(&ioctx, group_id)); + string group_id = "group_id2"; + ASSERT_EQ(0, ioctx.create(group_id, true)); int64_t pool_id = ioctx.get_id(); string image_id = "imageid"; // Image id shouldn't contain underscores @@ -2138,8 +2047,8 @@ TEST_F(TestClsRbd, group_image_clean) { librados::IoCtx ioctx; ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - string group_id = "group_id1"; - ASSERT_EQ(0, group_create(&ioctx, group_id)); + string group_id = "group_id3"; + ASSERT_EQ(0, ioctx.create(group_id, true)); int64_t pool_id = ioctx.get_id(); string image_id = "image_id"; @@ -2166,78 +2075,6 @@ TEST_F(TestClsRbd, group_image_clean) { ASSERT_EQ(cls::rbd::GROUP_IMAGE_LINK_STATE_ATTACHED, ref_state); } -TEST_F(TestClsRbd, image_add_group) { - librados::IoCtx ioctx; - ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - - int64_t pool_id = ioctx.get_id(); - string image_id = "imageid"; - - ASSERT_EQ(0, create_image(&ioctx, image_id, 2<<20, 0, - RBD_FEATURE_LAYERING, image_id, -1)); - - string group_id = "group_id"; - - cls::rbd::GroupSpec spec(group_id, pool_id); - ASSERT_EQ(0, image_add_group(&ioctx, image_id, spec)); - - map vals; - ASSERT_EQ(0, ioctx.omap_get_vals(image_id, "", RBD_GROUP_REF, 10, &vals)); - - cls::rbd::GroupSpec val_spec; - bufferlist::iterator it = vals[RBD_GROUP_REF].begin(); - ::decode(val_spec, it); - - ASSERT_EQ(group_id, val_spec.group_id); - ASSERT_EQ(pool_id, val_spec.pool_id); -} - -TEST_F(TestClsRbd, image_remove_group) { - librados::IoCtx ioctx; - ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - - int64_t pool_id = ioctx.get_id(); - string image_id = "image_id"; - - ASSERT_EQ(0, create_image(&ioctx, image_id, 2<<20, 0, - RBD_FEATURE_LAYERING, image_id, -1)); - - string group_id = "group_id"; - - cls::rbd::GroupSpec spec(group_id, pool_id); - ASSERT_EQ(0, image_add_group(&ioctx, image_id, spec)); - // Add reference in order to make sure that image_remove_group actually - // does something. - ASSERT_EQ(0, image_remove_group(&ioctx, image_id, spec)); - - map vals; - ASSERT_EQ(0, ioctx.omap_get_vals(image_id, "", RBD_GROUP_REF, 10, &vals)); - - ASSERT_EQ(0U, vals.size()); -} - -TEST_F(TestClsRbd, image_get_group) { - librados::IoCtx ioctx; - ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - - int64_t pool_id = ioctx.get_id(); - string image_id = "imageidgroupspec"; - - ASSERT_EQ(0, create_image(&ioctx, image_id, 2<<20, 0, - RBD_FEATURE_LAYERING, image_id, -1)); - - string group_id = "group_id_get_group_spec"; - - cls::rbd::GroupSpec spec_add(group_id, pool_id); - ASSERT_EQ(0, image_add_group(&ioctx, image_id, spec_add)); - - cls::rbd::GroupSpec spec; - ASSERT_EQ(0, image_get_group(&ioctx, image_id, &spec)); - - ASSERT_EQ(group_id, spec.group_id); - ASSERT_EQ(pool_id, spec.pool_id); -} - TEST_F(TestClsRbd, trash_methods) { librados::IoCtx ioctx;