format_bitmask(f, "flag", mapping, flags);
}
-static int do_show_info(const char *imgname, librbd::Image& image,
- const char *snapname, Formatter *f)
+static int do_show_info(librados::IoCtx &io_ctx, librbd::Image& image,
+ const char *imgname, const char *snapname, Formatter *f)
{
librbd::image_info_t info;
std::string parent_pool, parent_name, parent_snapname;
if (r < 0)
return r;
+ std::string data_pool;
+ if (!old_format) {
+ int64_t data_pool_id = image.get_data_pool_id();
+ if (data_pool_id != io_ctx.get_id()) {
+ librados::Rados rados(io_ctx);
+ librados::IoCtx data_io_ctx;
+ r = rados.ioctx_create2(data_pool_id, data_io_ctx);
+ if (r < 0) {
+ data_pool = "<missing data pool " + stringify(data_pool_id) + ">";
+ } else {
+ data_pool = data_io_ctx.get_pool_name();
+ }
+ }
+ }
+
r = image.overlap(&overlap);
if (r < 0)
return r;
f->dump_unsigned("objects", info.num_objs);
f->dump_int("order", info.order);
f->dump_unsigned("object_size", info.obj_size);
+ if (!data_pool.empty()) {
+ f->dump_string("data_pool", data_pool);
+ }
f->dump_string("block_name_prefix", prefix);
f->dump_int("format", (old_format ? 1 : 2));
} else {
<< std::endl
<< "\torder " << info.order
<< " (" << prettybyte_t(info.obj_size) << " objects)"
- << std::endl
- << "\tblock_name_prefix: " << prefix
+ << std::endl;
+ if (!data_pool.empty()) {
+ std::cout << "\tdata_pool: " << data_pool << std::endl;
+ }
+ std::cout << "\tblock_name_prefix: " << prefix
<< std::endl
<< "\tformat: " << (old_format ? "1" : "2")
<< std::endl;
return r;
}
- r = do_show_info(image_name.c_str(), image,
+ r = do_show_info(io_ctx, image, image_name.c_str(),
snap_name.empty() ? nullptr : snap_name.c_str(),
formatter.get());
if (r < 0) {