namespace at = argument_types;
namespace po = boost::program_options;
+std::string get_snap_namespace_name(librbd::snap_namespace_type_t type)
+{
+ switch (type) {
+ case RBD_SNAP_NAMESPACE_TYPE_USER:
+ return "user";
+ case RBD_SNAP_NAMESPACE_TYPE_GROUP:
+ return "group";
+ case RBD_SNAP_NAMESPACE_TYPE_TRASH:
+ return "trash";
+ case RBD_SNAP_NAMESPACE_TYPE_MIRROR:
+ return "mirror";
+ default:
+ return "unknown (" + stringify(type) + ")";
+ }
+}
+
int do_list_snaps(librbd::Image& image, Formatter *f, bool all_snaps, librados::Rados& rados)
{
std::vector<librbd::snap_info_t> snaps;
return r;
}
- std::string snap_namespace_name = "Unknown";
- switch (snap_namespace) {
- case RBD_SNAP_NAMESPACE_TYPE_USER:
- snap_namespace_name = "user";
- break;
- case RBD_SNAP_NAMESPACE_TYPE_GROUP:
- snap_namespace_name = "group";
- break;
- case RBD_SNAP_NAMESPACE_TYPE_TRASH:
- snap_namespace_name = "trash";
- break;
- case RBD_SNAP_NAMESPACE_TYPE_MIRROR:
- snap_namespace_name = "mirror";
- break;
- }
-
int get_trash_res = -ENOENT;
- std::string trash_original_name;
+ librbd::snap_trash_namespace_t trash_snap;
int get_group_res = -ENOENT;
librbd::snap_group_namespace_t group_snap;
int get_mirror_res = -ENOENT;
get_group_res = image.snap_get_group_namespace(s->id, &group_snap,
sizeof(group_snap));
} else if (snap_namespace == RBD_SNAP_NAMESPACE_TYPE_TRASH) {
- get_trash_res = image.snap_get_trash_namespace(
- s->id, &trash_original_name);
+ get_trash_res = image.snap_get_trash_namespace2(
+ s->id, &trash_snap, sizeof(trash_snap));
} else if (snap_namespace == RBD_SNAP_NAMESPACE_TYPE_MIRROR) {
get_mirror_res = image.snap_get_mirror_namespace(
s->id, &mirror_snap, sizeof(mirror_snap));
f->dump_string("timestamp", tt_str);
if (all_snaps) {
f->open_object_section("namespace");
- f->dump_string("type", snap_namespace_name);
+ f->dump_string("type", get_snap_namespace_name(snap_namespace));
if (get_group_res == 0) {
std::string pool_name = pool_map[group_snap.group_pool];
f->dump_string("pool", pool_name);
f->dump_string("group", group_snap.group_name);
f->dump_string("group snap", group_snap.group_snap_name);
} else if (get_trash_res == 0) {
- f->dump_string("original_name", trash_original_name);
+ f->dump_string("original_namespace_type",
+ get_snap_namespace_name(
+ trash_snap.original_namespace_type));
+ f->dump_string("original_name", trash_snap.original_name);
} else if (get_mirror_res == 0) {
f->dump_string("state", mirror_snap_state);
f->open_array_section("mirror_peer_uuids");
if (all_snaps) {
std::ostringstream oss;
- oss << snap_namespace_name;
+ oss << get_snap_namespace_name(snap_namespace);
if (get_group_res == 0) {
std::string pool_name = pool_map[group_snap.group_pool];
<< group_snap.group_name << "@"
<< group_snap.group_snap_name << ")";
} else if (get_trash_res == 0) {
- oss << " (" << trash_original_name << ")";
+ oss << " ("
+ << get_snap_namespace_name(trash_snap.original_namespace_type)
+ << " " << trash_snap.original_name << ")";
} else if (get_mirror_res == 0) {
oss << " (" << mirror_snap_state << " "
<< "peer_uuids:[" << mirror_snap.mirror_peer_uuids << "]";